使用Pod的名称而不是主机和端口来调用Pod

时间:2020-07-21 17:35:18

标签: kubernetes minikube coredns

我正在本地minikube集群(使用helm图表)中运行一组微服务,它们相互通信。通过value-dev.yaml传递到其他服务和通信的每个服务的主机和端口都可以正常工作。现在,我需要做进一步的工作,并将连接调用从http://helm-chart-name:PORT/更改为http://helm-chart-name/http://service-pod-name/。我尝试这样做,但是没有用。有办法实现吗?

2 个答案:

答案 0 :(得分:1)

在您的服务中(具体来说)将port:设置为80。这是HTTP的默认TCP端口号,因此,如果没有...:12345端口号,它将使用的端口号在网址中。 targetPort:需要匹配Pod正在监听的端口;不需要匹配port:

apiVersion: v1
kind: Service
metadata:
  name: {{ include "chart.fullname" . }}
spec:
  selector:
    {{- include "chart.selectorLabels" . | nindent 4 }}
  ports:
    - name: http
      protocol: TCP
      port: 80          # default HTTP port
      targetPort: 3000  # port number the matching Pod uses

现在其他服务可以调用http://helm-chart-name/,而无需明确给出端口号。

(您几乎总是需要使用服务来接受与Pod的连接;通常,您通常不直接与Pod通信,而且在某些特殊情况下,这样做很棘手。)

答案 1 :(得分:0)

如果需要使用Pod进行访问,则DNS解析如下: pod-ip-address.deployment-name.my-namespace.svc.cluster-domain.example。鉴于Pod的短暂特性以及运行多个相同类型Pod的可能性,我建议使用Service abstraction进行集群内通信,如您所需要的那样。服务解析为此格式my-svc.my-namespace.svc.cluster-domain.example的DNS。您也可以使用无头服务,并使用特定(主机)名称解析为Pod。请参阅DNS Reolution details here