除了通过入口向外部公开服务之外,还可以在k8s集群内部访问服务

时间:2018-12-07 23:33:11

标签: kubernetes google-kubernetes-engine

我已将两项服务都配置为NodePort

服务1

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

服务2

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,但是后来我无法通过入口访问它们。

什么是正确的配置?

1 个答案:

答案 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 .