【发布时间】:2020-10-03 15:49:38
【问题描述】:
问题是针对 kubernetes 中的 pod DNS 解析。来自官方文档的声明(从右上角的下拉列表中选择 v1.18): https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pods
豆荚。
A/AAAA 记录
由 Deployment 或 DaemonSet 创建的任何 pod 都具有以下可用的 DNS 解析:
pod-ip-address.deployment-name.my-namespace.svc.cluster-domain.example.
这是我的 kubernetes 环境:
master $ kubectl version
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.0", GitCommit:"9e991415386e4cf155a24b1da15becaa390438d8", GitTreeState:"clean", BuildDate:"2020-03-25T14:58:59Z", GoVersion:"go1.13.8", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.0", GitCommit:"9e991415386e4cf155a24b1da15becaa390438d8", GitTreeState:"clean", BuildDate:"2020-03-25T14:50:46Z", GoVersion:"go1.13.8", Compiler:"gc", Platform:"linux/amd64"}
使用kubectl create deploy nginx --image=nginx 创建一个简单的部署后,我在test 命名空间中创建一个busybox pod 来执行nslookup,如下所示:
kubectl create ns test
cat <<EOF | kubectl apply -n test -f -
apiVersion: v1
kind: Pod
metadata:
name: busybox1
labels:
name: busybox
spec:
containers:
- image: busybox:1.28
command:
- sleep
- "3600"
name: busybox
EOF
然后我按照官方文档pod-ip-address.deployment-name.my-namespace.svc.cluster-domain.example 这样做nslookup:
master $ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-f89759699-h8cj9 1/1 Running 0 12m 10.244.1.4 node01 <none> <none>
master $ kubectl get deploy -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx 1/1 1 1 17m nginx nginx app=nginx
master $ kubectl exec -it busybox1 -n test -- nslookup 10.244.1.4.nginx.default.svc.cluster.local
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
nslookup: can't resolve '10.244.1.4.nginx.default.svc.cluster.local'
command terminated with exit code 1
master $ kubectl exec -it busybox1 -n test -- nslookup 10-244-1-4.nginx.default.svc.cluster.local
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
nslookup: can't resolve '10-244-1-4.nginx.default.svc.cluster.local'
command terminated with exit code 1
问题 1:
为什么名称的 nslookup 失败?是不是我做错了什么?
当我继续探索 pod 的 dns 名称时,我这样做了:
master $ kubectl exec -it busybox1 -n test -- nslookup 10-244-1-4.default.pod.cluster.local
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name: 10-244-1-4.default.pod.cluster.local
Address 1: 10.244.1.4
master $ kubectl exec -it busybox1 -n test -- nslookup 10-244-1-4.test.pod.cluster.local
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name: 10-244-1-4.test.pod.cluster.local
Address 1: 10.244.1.4
问题 2:
为什么nslookup 10-244-1-4.test.pod.cluster.local 连 10.244.1.4 的 pod 在默认命名空间都成功了?
【问题讨论】:
-
如果您知道 IP,那么为什么还要进行 DNS 解析..我猜 1. 是一个文档问题 2. 可能是功能损坏但没有修复,因为没有人使用它..我建议提高 GitHub这两个问题
标签: kubernetes kubernetes-pod kube-dns coredns