• 欢迎来到本博客,希望可以y一起学习与分享

k8sDNS调试与通过DNS名称访问POD

笔记 benz 4个月前 (06-06) 13次浏览 0个评论 扫描二维码
文章目录[隐藏]

k8s DNS调试工具

调试 DNS 问题

背景

分布式服务部署在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名称:

1、k8s为service资源分配了DNS名称,通过DNS名称可以访问到service对用的pod。而通过statefulset创建的pod,并依赖service headless能实现给statefulset管理的pod提供固定的DNS名称pod-name.service-headless-name.namespace.svc.cluster-domain.example

 

优点:适合有状态服务之间互相通信
缺点:需要先创建一个service headless

2.、 deployment或通过service暴露出来的 DaemonSet所创建的Pod会有如下DNS名称可用pod-ip-address.deployment-name.my-namespace.svc.cluster-domain.example

注意:10-101-26-51是容器的ip。

优点:简单
缺点:pod重启之后,ip是重新自动获取,不是pod的唯一标识,故DNS名称会变。

3、Pod会对应如下DNS名字解析pod-ip-address.my-namespace.pod.cluster-domain.example

注意:10-101-26-51是容器的ip。

优点:简单
缺点:pod重启之后,ip是重新自动获取,不是pod的唯一标识,故DNS名称会变。

参考

https://kubernetes.io/zh/docs/concepts/services-networking/dns-pod-service/
https://kubernetes.io/zh/docs/concepts/workloads/controllers/statefulset/


文章 k8sDNS调试与通过DNS名称访问POD 转载需要注明出处
喜欢 (0)

您必须 登录 才能发表评论!