k8s环境通过DNS名称访问POD

网友投稿 1119 2022-10-26

k8s环境通过DNS名称访问POD

背景

分布式服务部署在k8s环境,由于运行在每个pod中的服务要知晓这个分布式集群中其它的服务节点ip或者dns名称。而statefulset给其管理的pod提供了稳定的网络标识符(例如pod名字和主机名),通过headless service为每一个pod提供了固定的dns名称,很好的解决了这个问题。然后,心里就又了产生了另一个疑问,k8s还有哪些方式可以直接访问到pod呢?

直接访问pod的方式

pod自动分配的ip

在k8s中一般使用Calico或者Flannel这种网络通信方案,这个方案提供了k8s集群中所有pod的ip互相通信的解决方案。优点:简单缺点:pod重启之后,ip是重新自动获取,不是pod的唯一标识

DNS名称访问

k8s提供的DNS名称和k8s集群默认的集群名字有关系,默认k8s集群的域名为cluster.local,则所有DNS的全名称都会以cluster.local为后缀,本文测试集群域名为cluster.local。k8s为pod提供了如下几种DNS名称:

k8s为service资源分配了DNS名称,通过DNS名称可以访问到service对用的pod。而通过statefulset创建的pod,并依赖service headless能实现给statefulset管理的pod提供固定的DNS名称pod-name.service-headless-name.namespace.svc.cluster-domain.example,具体样例: # kubectl get pods -n test-env|grep kafka-0 kafka-0 1/1 Running 0 2d23h # kubectl get services -n test-env|grep kafka-headless 8d kafka-headless ClusterIP None 6667/TCP 8d

kubectl exec -it dnsutils bash

nslookup

kafka-0.kafka-headless.test-env.svc.cluster.localServer: 10.96.0.10Address: 10.96.0.10#53

Name: kafka-0.kafka-headless.test-env.svc.cluster.localAddress: 10.101.26.45

优点:适合有状态服务之间互相通信 缺点:需要先创建一个service headless 2. deployment或通过service暴露出来的 DaemonSet所创建的Pod会有如下DNS名称可用pod-ip-address.deployment-name.my-namespace.svc.cluster-domain.example,具体样例:

kubectl get pods -o wide|grep 1/1 Running 0 17m 10.101.26.51 work4

kubectl exec -it dnsutils bash

nslookup

10-101-26-51. 10.96.0.10Address: 10.96.0.10#53

Name: 10-101-26-51.10.101.26.51

优点:简单 缺点:pod重启之后,ip是重新自动获取,不是pod的唯一标识,故DNS名称会变。 3.Pod会对应如下DNS名字解析pod-ip-address.my-namespace.pod.cluster-domain.example,具体样例:

kubectl get pods -o wide|grep 1/1 Running 0 17m 10.101.26.51 work4

kubectl exec -it dnsutils bash

nslookup

10-101-26-51.default.pod.cluster.localServer: 10.96.0.10Address: 10.96.0.10#53

Name: 10-101-26-51.default.pod.cluster.localAddress: 10.101.26.51

优点:简单 缺点:pod重启之后,ip是重新自动获取,不是pod的唯一标识,故DNS名称会变。 # 参考 https://kubernetes.io/zh/docs/concepts/services-networking/dns-pod-service/ https://kubernetes.io/zh/docs/concepts/workloads/controllers/statefulset/

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:再见 2020!Apache RocketMQ 发布 4.8.0,DLedger 模式全面提升!
下一篇:如何对接口芯片8255进行扩展
相关文章

 发表评论

暂时没有评论,来抢沙发吧~