【问题标题】:Kubeadm - unable to join nodes - request canceled while waiting for connection [closed]Kubeadm - 无法加入节点 - 等待连接时取消请求 [关闭]
【发布时间】:2021-07-26 17:17:45
【问题描述】:

尝试使用 kubeadm 在 3 个 Debian 10 虚拟机上配置 k8s 集群。

所有虚拟机都有2个网络接口,eth0作为公共接口,静态ip,eth1作为本地接口,静态ip在192.168.0.0/16:

  • 主人:192.168.1.1
  • 节点1:192.168.2.1
  • 节点2:192.168.2.2

所有节点之间都有互连。

ip a 来自主控主机:

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:52:70:53:d5:12 brd ff:ff:ff:ff:ff:ff
    inet XXX.XXX.244.240/24 brd XXX.XXX.244.255 scope global dynamic eth0
       valid_lft 257951sec preferred_lft 257951sec
    inet6 2a01:367:c1f2::112/48 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::252:70ff:fe53:d512/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:95:af:b0:8c:c4 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.1/16 brd 192.168.255.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::295:afff:feb0:8cc4/64 scope link 
       valid_lft forever preferred_lft forever

主节点初始化良好:

kubeadm init --upload-certs --apiserver-advertise-address=192.168.1.1 --apiserver-cert-extra-sans=192.168.1.1,XXX.XXX.244.240 --pod-network-cidr=10.40.0.0/16 -v=5

Output

但是当我加入工作节点时,kube-api 无法访问:

kubeadm join 192.168.1.1:6443 --token 7bl0in.s6o5kyqg27utklcl --discovery-token-ca-cert-hash sha256:7829b6c7580c0c0f66aa378c9f7e12433eb2d3b67858dd3900f7174ec99cda0e -v=5

Output

来自主服务器的 Netstat:

# netstat -tupn | grep :6443
tcp        0      0 192.168.1.1:43332       192.168.1.1:6443        TIME_WAIT   -                   
tcp        0      0 192.168.1.1:41774       192.168.1.1:6443        ESTABLISHED 5362/kube-proxy     
tcp        0      0 192.168.1.1:41744       192.168.1.1:6443        ESTABLISHED 5236/kubelet        
tcp        0      0 192.168.1.1:43376       192.168.1.1:6443        TIME_WAIT   -                   
tcp        0      0 192.168.1.1:43398       192.168.1.1:6443        TIME_WAIT   -                   
tcp        0      0 192.168.1.1:41652       192.168.1.1:6443        ESTABLISHED 4914/kube-scheduler 
tcp        0      0 192.168.1.1:43448       192.168.1.1:6443        TIME_WAIT   -                   
tcp        0      0 192.168.1.1:43328       192.168.1.1:6443        TIME_WAIT   -                   
tcp        0      0 192.168.1.1:43452       192.168.1.1:6443        TIME_WAIT   -                   
tcp        0      0 192.168.1.1:43386       192.168.1.1:6443        TIME_WAIT   -                   
tcp        0      0 192.168.1.1:43350       192.168.1.1:6443        TIME_WAIT   -                   
tcp        0      0 192.168.1.1:41758       192.168.1.1:6443        ESTABLISHED 5182/kube-controlle 
tcp        0      0 192.168.1.1:43306       192.168.1.1:6443        TIME_WAIT   -                   
tcp        0      0 192.168.1.1:43354       192.168.1.1:6443        TIME_WAIT   -                   
tcp        0      0 192.168.1.1:43296       192.168.1.1:6443        TIME_WAIT   -                   
tcp        0      0 192.168.1.1:43408       192.168.1.1:6443        TIME_WAIT   -                   
tcp        0      0 192.168.1.1:41730       192.168.1.1:6443        ESTABLISHED 5182/kube-controlle 
tcp        0      0 192.168.1.1:41738       192.168.1.1:6443        ESTABLISHED 4914/kube-scheduler 
tcp        0      0 192.168.1.1:43444       192.168.1.1:6443        TIME_WAIT   -                   
tcp6       0      0 192.168.1.1:6443        192.168.1.1:41730       ESTABLISHED 5094/kube-apiserver 
tcp6       0      0 192.168.1.1:6443        192.168.1.1:41744       ESTABLISHED 5094/kube-apiserver 
tcp6       0      0 192.168.1.1:6443        192.168.1.1:41738       ESTABLISHED 5094/kube-apiserver 
tcp6       0      0 192.168.1.1:6443        192.168.1.1:41652       ESTABLISHED 5094/kube-apiserver 
tcp6       0      0 ::1:6443                ::1:42862               ESTABLISHED 5094/kube-apiserver 
tcp6       0      0 192.168.1.1:6443        192.168.1.1:41758       ESTABLISHED 5094/kube-apiserver 
tcp6       0      0 ::1:42862               ::1:6443                ESTABLISHED 5094/kube-apiserver 
tcp6       0      0 192.168.1.1:6443        192.168.1.1:41774       ESTABLISHED 5094/kube-apiserver 

来自 master 的 Pod:

# kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -n kube-system -o wide
NAME                                              READY   STATUS    RESTARTS   AGE   IP                   NODE                      NOMINATED NODE   READINESS GATES
coredns-558bd4d5db-8qhhl                          0/1     Pending   0          12m   <none>               <none>                    <none>           <none>
coredns-558bd4d5db-9hj7z                          0/1     Pending   0          12m   <none>               <none>                    <none>           <none>
etcd-cloud604486.fastpipe.io                      1/1     Running   0          12m   2a01:367:c1f2::112   cloud604486.fastpipe.io   <none>           <none>
kube-apiserver-cloud604486.fastpipe.io            1/1     Running   0          12m   2a01:367:c1f2::112   cloud604486.fastpipe.io   <none>           <none>
kube-controller-manager-cloud604486.fastpipe.io   1/1     Running   0          12m   2a01:367:c1f2::112   cloud604486.fastpipe.io   <none>           <none>
kube-proxy-dzd42                                  1/1     Running   0          12m   2a01:367:c1f2::112   cloud604486.fastpipe.io   <none>           <none>
kube-scheduler-cloud604486.fastpipe.io            1/1     Running   0          12m   2a01:367:c1f2::112   cloud604486.fastpipe.io   <none>           <none>

所有虚拟机都设置了这个内核参数:

  • { name: 'vm.swappiness', value: '0' }
  • { name: 'net.bridge.bridge-nf-call-iptables', value: '1' }
  • { name: 'net.bridge.bridge-nf-call-ip6tables', value: '1'}
  • { name: 'net.ipv4.ip_forward', value: 1 }
  • { name: 'net.ipv6.conf.all.forwarding', value: 1}

br_netfilter 内核模块激活且 iptables 设置为旧模式(通过替代方案)

我错过了什么吗?

【问题讨论】:

  • 我很欣赏 master1 可以连接到自己,但我希望调试步骤由抱怨的 worker 运行。如果您为了调试而将-k 或--insecure 包含在curl 中,它将允许您确保您访问的是kubernetes apiserver 而不是其他东西。这确实看起来像是一个普通的防火墙问题,除非您提供的事实表明并非如此。
  • 工作节点可以连接到除6443以外的任何端口上的主节点。我尝试使用openssl s_client进行调试,它甚至没有连接
  • 我重新配置了本地网络,但无济于事,同样的症状。 kubeapi 在公共接口上可用,而不是在本地
  • 您能否按照 mdaniel 的建议尝试从您尝试加入集群的失败节点卷曲 api 地址?
  • 我已经添加了 openssl 和 curl 详细连接,它们都冻结在 ssl 标头上

标签: kubernetes kubeadm


【解决方案1】:

您的问题的原因是组件之间的 TLS 连接必须得到保护。从kubelet 的角度来看,如果Api-server 证书将以替代名称包含我们要连接的服务器的IP,这将是安全的。你会注意到你自己只添加到SANs 一个IP 地址。

你怎么能解决这个问题?有两种方式:

  1. 在您的节点中将 --discovery-token-unsafe-skip-ca-verification 标志与您的 kubeadm join 命令一起使用。

  2. 在集群初始化阶段(kubeadm init)添加第二个NIC到SANs api证书的IP地址

要阅读更多内容,请查看直接相关的 PR #93264,它是在 kubernetes 1.19 中引入的。

【讨论】:

  • 这本身并没有帮助。我在主服务器上的 kubelet 中添加了 --node-ip 标志,但它不起作用。 Kubeadm init 是:kubeadm init --upload-certs --apiserver-advertise-address=192.168.1.1 --apiserver-cert-extra-sans=192.168.1.1,XXX.XXX.244.240 --pod-network-cidr=10.40 .0.0/16
  • 并且错误(等待标头时超出Client.Timeout)表明它根本没有连接
  • 您能否使用您在初始化集群时执行的精确信息/命令及其产生的错误(最好使用 v=5)来更新/编辑您的问题。我很乐意为您提供进一步的帮助,但您清理问题将是向前迈出的第一步,因为通过互联网提供任何建议至关重要。
  • 我已经通过 pastebin 添加了完整的命令输出
【解决方案2】:

经过 1 周的修补问题归结为服务提供商网络配置错误。

对于遇到相同问题的任何人,请检查您网络的 MTU,在我的情况下,它默认为 1500,而不是推荐的 1450。

【讨论】:

    猜你喜欢
    • 2019-12-25
    • 1970-01-01
    • 2021-07-19
    • 2021-07-03
    • 2018-07-21
    • 2016-07-15
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    相关资源
    最近更新 更多