为Kubernetes中的Pod配置供内部使用的DNS记录
Kubernetes中的Pod配置供内部使用的DNS记录
嗨,针对你的问题,其实在Kubernetes里我们很少直接给Pod配置固定的内部DNS——毕竟Pod的生命周期很短,重启或者调度后IP就会变化,没法保证稳定性。正确的姿势是用Service来为你的微服务提供稳定的内部访问入口,同时还能轻松设置自定义的DNS名称哦!
下面结合你的Helm Chart场景,给你一步步说明怎么操作:
第一步:在Helm Chart中添加Service资源
你需要在你的pod-chart里新增一个Service的模板文件,比如创建templates/service.yaml,内容可以参考下面的示例:apiVersion: v1 kind: Service metadata: name: {{ .Values.service.name }} namespace: {{ .Values.namespace | default .Release.Namespace }} spec: selector: # 这里的labels必须和你Pod模板里的labels完全匹配,Service才能找到对应的Pod app: {{ .Values.pod.labels.app }} ports: - protocol: TCP port: {{ .Values.service.port }} # Service对外暴露的端口 targetPort: {{ .Values.pod.containerPort }} # 容器内实际监听的端口 type: ClusterIP # 这是默认类型,仅集群内部可访问,完全符合你的内部API调用需求第二步:在values.yaml中配置自定义DNS名称
打开你的values.yaml,添加对应的Service配置项,把你想要的自定义DNS名称填在service.name里:service: name: my-microservice-internal # 这就是其他Pod可以用来访问的自定义内部DNS名称 port: 8080 pod: labels: app: my-microservice containerPort: 8080第三步:验证内部访问方式
部署完这个Helm Chart后,其他Pod就能通过这个自定义DNS访问你的微服务了:- 如果是同一命名空间下的Pod,直接用
my-microservice-internal就能访问 - 如果是不同命名空间的Pod,需要用完整的FQDN:
my-microservice-internal.<你的命名空间>.svc.cluster.local
- 如果是同一命名空间下的Pod,直接用
另外补充个小提示:如果你的场景需要多个自定义DNS名称,还可以考虑用ExternalName类型的Service或者配置CoreDNS的自定义记录,但绝大多数内部调用场景下,普通的ClusterIP Service就完全够用啦。
备注:内容来源于stack exchange,提问作者Peter Penzov
相关产品推荐
相关产品推荐

