【问题标题】:K8 DNS not resolvingK8 DNS 无法解析
【发布时间】:2021-06-29 11:54:08
【问题描述】:

我的 K8 DNS 没有解析,因此我确实按照mentioned here 的调试步骤进行操作。由于我是 K8 的新手,有人可以指出我面临的问题吗?我无法从调试步骤中提取任何有用的信息。

cat /etc/os-release

NAME="Ubuntu"
VERSION="20.04.2 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.2 LTS"

kubectl 版本

Client Version: version.Info{Major:"1", Minor:"20", 
GitVersion:"v1.20.5", GitCommit:"6b1d87acf3c8253c123756b9e61dac642678305f", GitTreeState:"clean", BuildDate:"2021-03-18T01:10:43Z", GoVersion:"go1.15.8", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.5", GitCommit:"6b1d87acf3c8253c123756b9e61dac642678305f", GitTreeState:"clean", BuildDate:"2021-03-18T01:02:01Z", GoVersion:"go1.15.8", Compiler:"gc", Platform:"linux/amd64"}

kubectl 获取命名空间

NAME                   STATUS   AGE
default                Active   7d4h

kubectl 获取 pod dnsutils

NAME       READY   STATUS    RESTARTS   AGE
dnsutils   1/1     Running   18         18h

kubectl exec -i -t dnsutils -- nslookup kubernetes.default

;; connection timed out; no servers could be reached

kubectl exec -ti dnsutils -- cat /etc/resolv.conf

nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local 
cluster.local
options ndots:5

kubectl 获取 pod --namespace=kube-system -l k8s-app=kube-dns

NAME                      READY   STATUS    RESTARTS   
AGE
coredns-74ff55c5b-6vsml   1/1     Running   12  7d4h
coredns-74ff55c5b-mww7g   1/1     Running   12  7d4h

kubectl 日志 --namespace=kube-system -l k8s-app=kube-dns

.:53
[INFO] plugin/reload: Running configuration MD5 = db32ca3650231d74073ff4cf814959a7
CoreDNS-1.7.0
linux/amd64, go1.14.4, f59c03d
[INFO] Reloading
[INFO] plugin/health: Going into lameduck mode for 5s
[INFO] plugin/reload: Running configuration MD5 = 3d3f6363f05ccd60e0f885f0eca6c5ff
[INFO] Reloading complete
[INFO] 10.244.0.1:16732 - 59651 "HINFO IN 6307445054232439722.7934820194057826263. udp 57 false 512" NXDOMAIN qr,rd,ra 132 0.006053527s
[INFO] 127.0.0.1:58672 - 59651 "HINFO IN 6307445054232439722.7934820194057826263. udp 57 false 512" NXDOMAIN qr,rd,ra 132 0.00658948s
[INFO] plugin/reload: Running configuration MD5 = db32ca3650231d74073ff4cf814959a7
CoreDNS-1.7.0
linux/amd64, go1.14.4, f59c03d
[INFO] Reloading
[INFO] plugin/health: Going into lameduck mode for 5s
[INFO] plugin/reload: Running configuration MD5 = 3d3f6363f05ccd60e0f885f0eca6c5ff
[INFO] Reloading complete
[INFO] 10.244.0.62:56364 - 32900 "HINFO IN 2808379183970575835.6786373795048579500. udp 57 false 512" NXDOMAIN qr,rd,ra 132 0.004922932s
[INFO] 127.0.0.1:48277 - 32900 "HINFO IN 2808379183970575835.6786373795048579500. udp 57 false 512" NXDOMAIN qr,rd,ra 132 0.007889024s
[INFO] 10.244.0.62:49106 - 59651 "HINFO IN 6307445054232439722.7934820194057826263. udp 57 false 512" NXDOMAIN qr,rd,ra 132 0.005058199s

kubectl get svc --namespace=kube-system

NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE
kube-dns              ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP,9153/TCP   7d4h
monitoring-influxdb   ClusterIP   10.102.51.183   <none>        8086/TCP                 4d21h

kubectl 获取端点 kube-dns --namespace=kube-system

NAME       ENDPOINTS                                                  AGE
kube-dns   10.244.0.45:53,10.244.0.47:53,10.244.0.45:53 + 3 more...   7d4h

cat /run/systemd/resolve/resolv.conf

nameserver 8.8.8.8
nameserver 2001:4860:4860::8888

cat /etc/systemd/resolved.conf

[Resolve]
DNS=8.8.8.8 2001:4860:4860::8888

cat /etc/resolv.conf

nameserver 127.0.0.53
options edns0 trust-ad

这有点奇怪,两个 resolv.conf 有不同的值。另外,我不知道选择哪个 IP(如果我必须手动设置 DNS IP)。

kubeadm 配置视图

apiServer:
  extraArgs:
    authorization-mode: Node,RBAC
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: k8s.gcr.io
kind: ClusterConfiguration
kubernetesVersion: v1.20.5
networking:
  dnsDomain: cluster.local
  podSubnet: 10.244.0.0/16
  serviceSubnet: 10.96.0.0/12
scheduler: {}

更新

dnsutils 分配的 pod 的 IP 是 10.244.2.20,无法从单个 k8 主节点访问。

ping 10.244.2.20

【问题讨论】:

  • 你安装CNI插件了吗?你的节点 cidr/子网是什么?
  • cidr/subnet 10.244.0.0/16 和法兰绒/印花布用于 CNI。我确实清除并删除了所有节点,重新加入它们,然后它就像一个魅力。我想我对防火墙规则搞砸了太多。稍后会详细记录。

标签: kubernetes dns


【解决方案1】:

我的配置存在几个问题。首先:我确实使用了一个不兼容的 docker 版本(20.10.5),它还不被支持。因此,我不知道在使用受支持的 docker 版本时是否也会出现此问题。但是,即使使用这个不兼容的 docker 版本,我也能够通过以下步骤解决问题:

1. DNS 配置错误

我不知道谁/什么会设置resolved.conf 的 DNS 条目,但我的条目显然是错误的。首先,我们需要获取K8的DNS Cluster-IP地址:

kubectl 获取服务 --all-namespaces -o wide

您将收到所有命名空间内的所有服务,包括kube-dns Cluster-IP。就我而言,它看起来像以下

NAMESPACE              NAME                                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE   SELECTOR
kube-system            kube-dns                                ClusterIP   10.96.0.10       <none>        53/UDP,53/TCP,9153/TCP   11d   k8s-app=kube-dns
kube-system            monitoring-influxdb                     ClusterIP   10.102.51.183    <none>        8086/TCP                 9d    k8s-app=influxdb
kubernetes-dashboard   dashboard-metrics-scraper               ClusterIP   10.110.126.218   <none>        8000/TCP                 11d   k8s-app=dashboard-metrics-scraper
kubernetes-dashboard   kubernetes-dashboard                    ClusterIP   10.98.164.199    <none>        443/TCP                  11d   k8s-app=kubernetes-dashboard

在您的 resolved.conf 文件中使用该 DNS。该文件所在的位置取决于您的操作系统。在我的情况下(Ubuntu 20.04)/etc/systemd/resolved.conf

nano /etc/systemd/resolved.conf

[Resolve]
DNS=10.96.0.10 8.8.8.8 2001:4860:4860::8888

2。重新加入所有节点

我确实在 IPTables 旁边使用了 UFW,这在某种程度上弄乱了配置。因此,我做了remove all nodes,安装了一个新的操作系统并重新加入了集群;无需激活 UFW。

3.转发数据包策略

在某些版本docker modifies the iptables 中,数据包将在数据包转发场景中被丢弃。在所有节点上覆盖此行为:

iptables -P FORWARD ACCEPT

为了确定,也启用 ipv4 转发:

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf

【讨论】:

    【解决方案2】:

    您使用的是什么操作系统。我在使用 redhat 企业版 Linux 时遇到了类似的错误。

    我已经删除了 /etc/resolv.conf 中的所有内容,只保留了 dns 服务器的 ip,它可以正常工作。

    您使用的网络策略是什么,对我来说,calico 不起作用。我在上面的 /etc/resolv.conf 设置中使用了 kube-router。

    谢谢。

    【讨论】:

    • 如 Ubuntu 20.04 所述。你的 resolv.conf 中留下了哪个 IP?也没有网络政策。
    • 我在我的组织中实现了这个,我使用了我们的 dns 服务器 ip,如果您在个人云或 pc 中使用,您应该使用 8.8.8.8。
    猜你喜欢
    • 2010-09-18
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多