在 kubeadm 工作节点上运行的 pod 名称解析暂时失败

Posted

技术标签:

【中文标题】在 kubeadm 工作节点上运行的 pod 名称解析暂时失败【英文标题】:Temporary failure in name resolution for pod running on kubeadm worker node 【发布时间】:2022-01-09 18:29:48 【问题描述】:

我在 VMWare 上的 Kubernetes 集群中运行 Kafka,带有一个 ControlPlane 和一个工作节点。从 ControlPlane 节点,我的客户端可以与 Kafka 通信,但从我的工作节点,这最终会出现此错误

   %3|1638529687.405|FAIL|apollo-prototype-765f4d8bcf-bjpf4#producer-2| [thrd:sasl_plaintext://my-cluster-kafka-bootstrap:9092/bootstrap]: sasl_plaintext://my-cluster-kafka-bootstrap:9092/bootstrap: Failed to resolve 'my-cluster-kafka-bootstrap:9092': Temporary failure in name resolution (after 20016ms in state CONNECT, 2 identical error(s) suppressed)
   %3|1638529687.406|ERROR|apollo-prototype-765f4d8bcf-bjpf4#producer-2| [thrd:app]: apollo-prototype-765f4d8bcf-bjpf4#producer-2: sasl_plaintext://my-cluster-kafka-bootstrap:9092/bootstrap: Failed to resolve 'my-cluster-kafka-bootstrap:9092': Temporary failure in name resolution (after 20016ms in state CONNECT, 2 identical error(s) suppressed)

这是我的 Kafka 集群清单(使用 Strimzi)

listeners:
  - name: plain
    port: 9092
    type: internal
    tls: false
    authentication:
      type: scram-sha-512
  - name: external
    port: 9094
    type: ingress
    tls: true
    authentication:
      type: scram-sha-512
    configuration:
      class: nginx
      bootstrap:
        host: localb.kafka.xxx.com
      brokers:
      - broker: 0
        host: local.kafka.xxx.com

值得一提的是,完全相同的配置,当我在云中运行时,运行完美。

Telnetnslookup(来自两个节点)抛出错误。 CoreDNS 日志甚至没有提到这个错误。 两个节点上的防火墙也被禁用。

你能帮帮我吗?谢谢!


更新:解决方案 Calico Pod(来自工作节点)抱怨 bird: Netlink: Network is down,即使它没有崩溃

2021-12-03 09:39:58.051 [INFO][90] felix/int_dataplane.go 1539: Received interface addresses update msg=&intdataplane.ifaceAddrsUpdateName:"tunl0", Addrs:set.mapSet
2021-12-03 09:39:58.051 [INFO][90] felix/hostip_mgr.go 85: Interface addrs changed. update=&intdataplane.ifaceAddrsUpdateName:"tunl0", Addrs:set.mapSet
2021-12-03 09:39:58.052 [INFO][90] felix/ipsets.go 130: Queueing IP set for creation family="inet" setID="this-host" setType="hash:ip"
2021-12-03 09:39:58.057 [INFO][90] felix/ipsets.go 785: Doing full IP set rewrite family="inet" numMembersInPendingReplace=3 setID="this-host"
2021-12-03 09:39:58.059 [INFO][90] felix/int_dataplane.go 1036: Linux interface state changed. ifIndex=13 ifaceName="tunl0" state="down"
2021-12-03 09:39:58.082 [INFO][90] felix/int_dataplane.go 1521: Received interface update msg=&intdataplane.ifaceUpdateName:"tunl0", State:"down", Index:13
bird: Netlink: Network is down

Here 是我所做的,它就像一个魅力!

该故障是节点加载的ipvs模块不同引起的。 我为新节点配置了ipip模块,但旧节点做了 没有加载ipip模块,导致calico异常。删除 ipip模块恢复正常。

[root@k8s-node236-232 ~]# lsmod  | grep ipip
ipip                   16384  0 
tunnel4                16384  1 ipip
ip_tunnel              24576  1 ipip
[root@k8s-node236-232 ~]# modprobe -r ipip
[root@k8s-node236-232 ~]# lsmod  | grep ipip

【问题讨论】:

那么,Kafka集群在哪里运行呢?在您无法连接的工作节点上?或者在其他一些节点上?我认为 Strimzi 配置看起来不错 - 至少这里共享的部分。 Kafka在控制平面上运行(只有一个副本) 如果我在工作节点上移动 strimzi 集群操作员(kafka 和 zookeeper 留在控制平面节点上)然后 strimzi 集群操作员日志抱怨我无法连接到 zookeeper 2021-12- 03 12:39:26 ERROR Util:149 - Reconciliation #1(watch) Kafka(default/my-cluster): 等待 ZooKeeperAdmin 连接到 my-cluster-zookeeper-0.my-cluster-zookeeper-时超时超过 300000 毫秒nodes.default.svc:2181 被连接 你的 kubernetes 版本是多少? 如果我移动了 strimzi 集群运营商 ... - 这表明运营商与客户端存在相同的网络/DNS 问题。我不认为这真的是一个 Strimzi 错误,而是 Kube 集群本身的问题。所以也许也值得提供一些来自 Kube 集群的日志(但我不是这方面的专家 TBH)。 【参考方案1】:

Calico Pod(来自工作节点)抱怨 bird: Netlink: Network is down,即使它没有崩溃

2021-12-03 09:39:58.051 [INFO][90] felix/int_dataplane.go 1539: Received interface addresses update msg=&intdataplane.ifaceAddrsUpdateName:"tunl0", Addrs:set.mapSet
2021-12-03 09:39:58.051 [INFO][90] felix/hostip_mgr.go 85: Interface addrs changed. update=&intdataplane.ifaceAddrsUpdateName:"tunl0", Addrs:set.mapSet
2021-12-03 09:39:58.052 [INFO][90] felix/ipsets.go 130: Queueing IP set for creation family="inet" setID="this-host" setType="hash:ip"
2021-12-03 09:39:58.057 [INFO][90] felix/ipsets.go 785: Doing full IP set rewrite family="inet" numMembersInPendingReplace=3 setID="this-host"
2021-12-03 09:39:58.059 [INFO][90] felix/int_dataplane.go 1036: Linux interface state changed. ifIndex=13 ifaceName="tunl0" state="down"
2021-12-03 09:39:58.082 [INFO][90] felix/int_dataplane.go 1521: Received interface update msg=&intdataplane.ifaceUpdateName:"tunl0", State:"down", Index:13
bird: Netlink: Network is down

Here 是我所做的,它就像一个魅力!

该故障是节点加载的ipvs模块不同引起的。 我为新节点配置了ipip模块,但旧节点做了 没有加载ipip模块,导致calico异常。删除 ipip模块恢复正常。

[root@k8s-node236-232 ~]# lsmod  | grep ipip
ipip                   16384  0 
tunnel4                16384  1 ipip
ip_tunnel              24576  1 ipip
[root@k8s-node236-232 ~]# modprobe -r ipip
[root@k8s-node236-232 ~]# lsmod  | grep ipip

【讨论】:

以上是关于在 kubeadm 工作节点上运行的 pod 名称解析暂时失败的主要内容,如果未能解决你的问题,请参考以下文章

kubeadm配置高可用etcd集群

K8s 节点断开连接后,本在运行的 Pod 会如何?

Kubernetes-Pod基本概念(六)

k8s(3) kubeadm 安装k8s

k8s(3) kubeadm 安装k8s

k8s(3) kubeadm 安装k8s