首页 > 解决方案 > 使用 pod 的名称而不是主机和端口调用 pod

问题描述

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

标签: kubernetesminikubecoredns

解决方案


在您的服务中(特别是)将port:数字设置为 80。这是 HTTP 的默认 TCP 端口号,因此如果...:12345URL 中没有端口号,它将使用该端口号。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/在没有明确给出端口号的情况下调用。

(您几乎总是需要使用 Service 来接受与 pod 的连接;您通常不会直接与 pod 通信,除了一些特殊情况外,这样做很棘手。)


推荐阅读