我已将两项服务都配置为NodePort
。
kind: Service
apiVersion: v1
metadata:
name: bitcoinrpc-dev-service
namespace: dev
spec:
selector:
app: bitcoin-node
ports:
- name: bitcoin-mainnet
protocol: TCP
port: 80
targetPort: 8332
- name: bitcoin-testnet
protocol: TCP
port: 8080
targetPort: 18332
type: NodePort
kind: Service
apiVersion: v1
metadata:
name: counterpartyrpc-dev-service
namespace: dev
spec:
selector:
app: counterparty-node
ports:
- name: mainnet
protocol: TCP
port: 80
targetPort: 4000
- name: testnet
protocol: TCP
port: 8080
targetPort: 14000
type: NodePort
我可以通过入口在集群外部访问这两个服务。但是,当我尝试从service1(bitcoin
连接到service2(counterparty)
时,它一直在失去连接。我将服务称为bitcoinrpc-dev-service.dev.svc.cluster.local:80
但是,如果我将此服务称为在ingress
中配置的主机名,则连接会更加稳定。例如当我用service1
引用bitcoin.mydomain.com:80
因为,这意味着当两个需要相互通信的服务都在同一群集中时,将流量路由到群集外部,这似乎效率很低。
我尝试将servicetype
更改为clusterIP
,但是后来我无法通过入口访问它们。
什么是正确的配置?
答案 0 :(得分:1)
其背后的原因是只有带有kube-dns附件的k8s集群才能将域名bitcoinrpc-dev-service.dev.svc.cluster.local:80
转换为其相应的IP地址。
看看这个好答案,它显示了解决此问题的方法:
How to access a service in a kubernetes cluster using the service name .