【发布时间】: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. 我无法从故障节点和工作节点ping10.96.0.10。看起来是这个问题。? -
是的,那在我看来像是覆盖网络问题。
标签: docker ubuntu kubernetes dns coredns