kubeadm在非默认的NICIP上加入超时。

问题描述 投票:0回答:1

我正试图在prem上配置一个K8s集群,服务器使用多个网卡运行Fedora CoreOS。

我正在配置集群使用一个非默认的网卡--一个有2个接口的债券。所有的服务器都可以通过该接口相互连接,并有HTTP+HTTPS连接到互联网。

kubeadm join挂起在。

I0513 13:24:55.516837   16428 token.go:215] [discovery] Failed to request cluster-info, will try again: Get https://${BOND_IP}:6443/api/v1/namespaces/kube-public/configmaps/cluster-info?timeout=10s: context deadline exceeded (Client.Timeout exceeded while awaiting headers)

相关的kubeadm init配置是这样的。

[...]
localAPIEndpoint:
  advertiseAddress: ${BOND_IP}
  bindPort: 6443
nodeRegistration:
  kubeletExtraArgs:
    volume-plugin-dir: "/opt/libexec/kubernetes/kubelet-plugins/volume/exec/"
    runtime-cgroups: "/systemd/system.slice"
    kubelet-cgroups: "/systemd/system.slice"
    node-ip: ${BOND_IP}
  criSocket: /var/run/dockershim.sock
  name: master
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
[...]

我使用的join配置是这样的:

apiVersion: kubeadm.k8s.io/v1beta2
kind: JoinConfiguration
discovery:
  bootstrapToken:
    token: ${TOKEN}
    caCertHashes:
    - "${SHA}"
    apiServerEndpoint: "${BOND_IP}:6443"
nodeRegistration:
  kubeletExtraArgs:
    volume-plugin-dir: "/opt/libexec/kubernetes/kubelet-plugins/volume/exec/"
    runtime-cgroups: "/systemd/system.slice"
    kubelet-cgroups: "/systemd/system.slice"

如果我用默认的eth0配置它,它就能正常工作了

这不是连接问题。端口测试工作正常。

# nc -s ${BOND_IP_OF_NODE} -zv ${BOND_IP_OF_MASTER} 6443
Ncat: Version 7.80 ( https://nmap.org/ncat )
Ncat: Connected to ${BOND_IP_OF_MASTER}:6443.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.

我怀疑这是由于kubelet在eth0上监听造成的 如果是这样,我可以改变它,使用不同的NICIP吗?

LE:eth0连接已经被完全切断(电缆出线,接口掉线,连接掉线).现在,当我们init时,如果我们为kube-api选择端口0.0.0.0,它默认为债券,这是我们最初想要的。

kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 0.0.0.0

result:

[certs] apiserver serving cert is signed for DNS names [emp-prod-nl-hilv-quortex19 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.0.0.1 ${BOND_IP}]

我甚至在iptables中为accept添加了6443端口,但还是会超时。我所有的CALICO pods都已经启动并运行了(kube-system命名空间中的所有 pods)。

LLE。

我测试了Calico和Weavenet,但都出现了同样的问题。api-server已经启动,并且可以从主站使用curl到达,但从节点上却超时了。

LLLE。

在kube-api只是一个HTTPS服务器的前提下,我尝试了两个方案,在做kubeadm join时,从节点上无法到达它。

  1. 在6443上运行了一个python3的简单http服务器 从节点上可以连接到它
  2. 运行了一个nginx pod,并将其作为NodePort暴露在另一个端口上,并且能够从node连接。

节点就是不能到达6443的api服务器或者其他端口......。

我做错了什么....

join kubernetes kubeadm nic
1个回答
1
投票

的原因。

使用的接口是在BOND中,类型为ACTIVE-ACTIVE。这使得kubeadm从2个bonded中尝试了另一个接口,该接口与广告服务器的IP显然不在同一个子网...

使用ACTIVE-PASSIVE就成功了,能够加入节点。

LE:如果有人知道原因 kubeadm加盟 不支持 LACPACTIVE-ACTIVE债券 设置在 FEDORA COREOS 请在此告知。否则,如果需要额外的配置,我很想知道我错过了什么。

© www.soinside.com 2019 - 2024. All rights reserved.