Kubernetes DNS | 解析Kubernets pod DNS域名

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

1、流程验证

cat >dns-Deployment.yaml<<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
 name: busybox-deployment
spec:
 replicas: 1
 selector:
   matchLabels:
    app: busybox
 template:
   metadata:
     labels:
       app: busybox
   spec:
     restartPolicy: Always
     containers:
     - name: busybox
       command:
       - sleep
       - "3600"
       image: busybox:1.28.4
EOF

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

在这里插入图片描述
可以看到是无法解析的。根据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

在这里插入图片描述
vi /etc/resolv.conf 将search 域,dns服务器地址加入首部

在这里插入图片描述

现在就可以解析了
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值