【问题标题】:Debugging DNS resolutions in kubernetes在 Kubernetes 中调试 DNS 解析
【发布时间】:2019-02-08 16:18:55
【问题描述】:

我已经使用以下命令在Ubuntu 16.04 上初始化了 kubernetes v1.13.1 集群:

sudo kubeadm init --token-ttl=0 --apiserver-advertise-address=192.168.88.142

并安装weave 使用:

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

我有 10 个raspberry pi 充当工作节点并连接到集群。他们都在正常运行部署。有节点正在运行 pod,它们尝试连接到 iot hub visdwk-azure-devices.net 并发布一些数据。在 10 个节点中,只有少数节点能够连接,其他节点会抛出错误 unable to connect to iot hub。我做了一个 ping 测试,发现他们在 ping google 的公共 IP 地址时无法 ping google。

这让我觉得coredns pod 出了点问题。我跟着这个documentation 做了下面的测试。

Pod 在/etc/resolv.conf 中有以下内容

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

这对我来说看起来很正常。所有 coredns pod 都运行良好。

coredns-86c58d9df4-42xqc               1/1     Running   8         1d11h
coredns-86c58d9df4-p6d98               1/1     Running   7         1d6h

我还从busybox 容器中完成了nslookup kubernetes.default 并得到了正确的响应。以下是coredns-86c58d9df4-42xqc的日志

.:53
2019-02-08T08:40:10.038Z [INFO] CoreDNS-1.2.6
2019-02-08T08:40:10.039Z [INFO] linux/amd64, go1.11.2, 756749c
CoreDNS-1.2.6
linux/amd64, go1.11.2, 756749c
 [INFO] plugin/reload: Running configuration MD5 = 
f65c4821c8a9b7b5eb30fa4fbc167769
t

上面的日志看起来也很正常。

我也不能说 pod 无法解决 iot hub 因为 weave 的任何错误,因为如果 weave 抛出错误,那么我相信 pod 将永远不会启动并且将始终处于失败状态,但实际上pod 保持运行状态。如果我错了,请在这里纠正我。

DNS 服务似乎也处于运行状态:

NAME                   TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)         AGE
kube-dns               ClusterIP   10.96.0.10     <none>        53/UDP,53/TCP   1d6h

但我仍然无法弄清楚为什么集群中的少数节点无法解析物联网集线器。任何人都可以在这里给我一些建议。请帮忙。谢谢。

来自失败 pod 的日志:

 1550138544: New connection from 127.0.0.1 on port 1883.
1550138544: New client connected from 127.0.0.1 as 6f1e2c4f-c44d-4c27-b9a9-0fb91f816504 (c1, k60).
1550138544: Sending CONNACK to 6f1e2c4f-c44d-4c27-b9a9-0fb91f816504 (0, 0)
1550138544: Received PUBLISH from 6f1e2c4f-c44d-4c27-b9a9-0fb91f816504 (d0, q0, r0, m0, 'devices/machine6/messages/events/', ... (1211 bytes))
1550138544: Received DISCONNECT from 6f1e2c4f-c44d-4c27-b9a9-0fb91f816504
1550138544: Client 6f1e2c4f-c44d-4c27-b9a9-0fb91f816504 disconnected.
1550138547: Saving in-memory database to /mqtt/data/mosquitto.db.
1550138547: Bridge local.machine6 doing local SUBSCRIBE on topic devices/machine6/messages/events/#
1550138547: Connecting bridge iothub-bridge (visdwk.azure-devices.net:8883)
1550138552: Error creating bridge: Try again.
1550138566: New connection from 127.0.0.1 on port 1883.
1550138566: New client connected from 127.0.0.1 as afb6cc2a-ee78-482e-aff0-fc595e06f86a (c1, k60).
1550138566: Sending CONNACK to afb6cc2a-ee78-482e-aff0-fc595e06f86a (0, 0)
1550138566: Received PUBLISH from afb6cc2a-ee78-482e-aff0-fc595e06f86a (d0, q0, r0, m0, 'devices/machine6/messages/events/', ... (1211 bytes))
1550138566: Received DISCONNECT from afb6cc2a-ee78-482e-aff0-fc595e06f86a
1550138566: Client afb6cc2a-ee78-482e-aff0-fc595e06f86a disconnected.
1550138567: New connection from 127.0.0.1 on port 1883.
1550138567: New client connected from 127.0.0.1 as 01b9e135-fbc8-4d67-9962-356e8cf9f080 (c1, k60).
1550138567: Sending CONNACK to 01b9e135-fbc8-4d67-9962-356e8cf9f080 (0, 0)
1550138567: Received PUBLISH from 01b9e135-fbc8-4d67-9962-356e8cf9f080 (d0, q0, r0, m0, 'devices/machine6/messages/events/', ... (755 bytes))
1550138567: Received DISCONNECT from 01b9e135-fbc8-4d67-9962-356e8cf9f080
1550138567: Client 01b9e135-fbc8-4d67-9962-356e8cf9f080 disconnected.
1550138578: Saving in-memory database to /mqtt/data/mosquitto.db.
1550138583: Bridge local.machine6 doing local SUBSCRIBE on topic devices/machine6/messages/events/#
1550138583: Connecting bridge iothub-bridge (visdwk.azure-devices.net:8883)
1550138588: Error creating bridge: Try again.

Pod 正在运行一个 mosquitto 容器,它尝试连接到 visdwk.azure-devices.net 并引发错误。

Connecting bridge iothub-bridge (visdwk.azure-devices.net:8883)
Error creating bridge: Try again.

【问题讨论】:

  • 你能分享受影响节点的 CoreDNS 配置映射吗?
  • @mk_sta 我可以通过运行kubectl edit cm coredns -n kube-system 共享 Master 的 CoreDNS 配置映射,但我不确定是否可以在受影响的节点上运行相同的命令。你能告诉我如何获得配置图吗?谢谢
  • 在尝试解析故障工作节点上的 IP 地址时,您是否查看过 coreDNS 日志?另外,检查所有节点是否在 /etc/resolv.conf 文件中具有相同的内容。最后,检查故障节点是否可以 ping DNS 地址 (10.69.0.10)。
  • @whites11 1. 如果我尝试解析故障工作节点上的 IP 地址并监控 coreDNS 的日志,我什么也看不到。日志显示了我在问题中包含的相同内容。 2. 是的,我可以确认/etc/resolv.conf 中的所有节点都具有相同的内容。 3. 我无法从故障节点和工作节点ping 10.96.0.10。看起来是这个问题。?
  • 是的,那在我看来像是覆盖网络问题。

标签: docker ubuntu kubernetes dns coredns


【解决方案1】:

您的一个 DNS Pod 似乎没有提供 DNS 服务。

证据在声明中,“只有少数节点能够连接,其他抛出错误无法连接到 iot hub”

这是循环中出现故障节点的负载平衡的典型症状。

试试:

  1. 删除给出消息的 DNS 服务器 pod:visdwk.azure-devices.net.visdwknamespace.svc.cluster.local. udp 82 false 512" NXDOMAIN qr,aa,rd,ra 175 0.000651078s where visdwk.azure-devices.net
  2. 等待更改通过集群传播。
  3. 测试连接。

如果这是正确的,他们应该都连接。

要确认,请重新添加 pod 并移除另一个。重新测试,应该都连接不上。

【讨论】:

  • 谢谢。那么对于失败的 pod 我该怎么办。?我无法将它们从集群中永久删除。
  • 验证 pod 的配置。测试成功了吗?
  • 我正在测试它并会更新。只是想知道,这可能是因为网络连接不足,因为我在 ping 一些节点时得到了非常长的响应时间(~1150ms)。?
  • 可能不是,错误信息显示收到了DNS数据包,并发送了一个不存在的域,NXDOMAIN响应。
  • 测试成功了吗?
猜你喜欢
  • 2019-02-06
  • 2017-04-02
  • 2020-10-03
  • 2020-10-20
  • 2018-11-04
  • 1970-01-01
  • 2015-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多