【问题标题】:kubernetes v1.18: DNS resolution records for Podskubernetes v1.18:Pod 的 DNS 解析记录
【发布时间】: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


【解决方案1】:

关于您的第一个问题,据我所知,您的假设是否正确,文档似乎不准确。 pod 的 A/AAAA 参考是文档 (1.18) 中的新内容。为此,我强烈建议您打开一个问题 here,以便开发人员可以仔细研究它。

我建议您在这方面参考1.17 documentation,因为它是为了反映实际情况。

在 1.17 中我们可以看到这个注释:

注意:因为不为 Pod 名称创建 A 或 AAAA 记录,所以要创建 Pod 的 A 或 AAAA 记录需要hostname。没有 hostname 但有 subdomain 的 Pod 只会为无头服务 (default-subdomain.my-namespace.svc.cluster-domain.example) 创建 A 或 AAAA 记录,指向 Pod 的 IP 地址。此外,除非在 Service 上设置了 publishNotReadyAddresses=True,否则 Pod 需要准备好才能有记录。

据我所知,尽管文档说了什么,但在 1.18 上这仍然是正确的。

关于问题二的方向相同,您也可以打开一个问题,但我个人认为使用基于 IP 的 DNS 名称没有任何实际原因。这些名称供 kubernetes 内部使用,使用它并没有给您任何优势。

最好的方案是在 Kubernetes 上使用service based dns names。事实证明它非常可靠。

【讨论】:

    【解决方案2】:

    对于问题 1,可能是文档不准确。如果我为部署创建 ClusterIP 服务:
    kubectl expose deploy nginx --name=front-end --port=80

    然后我可以看到这个名字:

    kubectl exec -it busybox1 -n test -- nslookup 10-244-1-4.front-end.default.svc.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.front-end.default.svc.cluster.local
    Address 1: 10.244.1.4 10-244-1-4.front-end.default.svc.cluster.local
    

    【讨论】:

      猜你喜欢
      • 2019-02-06
      • 2018-06-23
      • 2020-06-28
      • 1970-01-01
      • 2023-03-06
      • 2015-05-14
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      相关资源
      最近更新 更多