解析Kubernets pod DNS域名

k8s dns理解
这个博主讲的很详细
我的这篇文章主要是演示测试 k8s的dns nslookup怎么解析到k8spod域名
创建一个busybox的pod,测试一下pod内是否可以解析

1、流程验证

cat >dns-Deployment.yaml<

Kubernetes会为其设置一个
< pod-ip >.< namespace >.pod.< cluster-domain > 格式的DNS域名

kubectl apply -f dns-Deployment.yaml
kubectl get pods |grep busybox
kubectl exec busybox -- cat /etc/resolv.conf
kubectl exec -ti busybox -- nslookup kubernetes.default

[root@master ~]# kubectl get pods -o wide|grep busybox 
nslookup 10-244-1-36.default.pod.cluster.local

解析Kubernets pod DNS域名_第1张图片
可以看到是无法解析的。根据coredns解析集群内域名原理可知:DNS 如何解析,依赖容器内 resolv 文件的配置。查看busybox容器内的resolve.conf文件
在这里插入图片描述
可以看到nameserver 10.96.0.10 这个就是配置的 DNS Server,一般就是 K8S 中,coredns的 Service 的 ClusterIP,这个IP是虚拟IP,无法ping,但可以访问。

kubectl get svc -n system 

在这里插入图片描述
发请求时,会根据 /etc/resolv.conf 进行解析流程。选择 nameserver 10.96.0.10进行解析,依次在/etc/resolve.conf 中的 search 域,进行DNS查找,分别是:
search 内容类似如下(不同的pod,第一个域会有所不同)

search default.svc.cluster.local svc.cluster.local cluster.local
*.default.svc.cluster.local ->  *.svc.cluster.local -> *.cluster.local

2、宿主机加入域名验证

nameserver表示解析域名时使用该地址指定的主机为域名服务器。其中域名服务器是按照文件中出现的顺序来查询的,且只有当第一个nameserver没有反应时才查询下面的nameserver。

kubectl get svc -n kube-system
kubectl get pod -n kube-system -o wide|grep dns
kubectl exec  -ti busybox-deployment -- cat /etc/resolv.conf

解析Kubernets pod DNS域名_第2张图片
vi /etc/resolv.conf 将search 域,dns服务器地址加入首部

解析Kubernets pod DNS域名_第3张图片

现在就可以解析了
解析Kubernets pod DNS域名_第4张图片

你可能感兴趣的:(kubernetes,kubernetes)