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