网站首页 文章专栏 10多网卡环境安装.md
如果node上有多张网卡,不管是真是网卡还是虚拟网卡,都会造成k8s通信异常。而虚拟网卡常常用来连接多个异地计算设备,所以实现多网卡的k8s通信有助于实现异地k8s集群。
会造成两个已知的问题:
kubectl exec
访问slave节点的container失败,因为master无法访问node ip下图是一个通信失败的案例,onlyoffice
pod被调度到了wenfeng-z470
机器上,但是该机器是通过n2n
虚拟局域网加入集群的。k8s master节点显示其ip地址为192.168.20.235
可以在node上手动sudo route add default gw 192.168.195.2
的方法指定默认路由,同时在master节点上也会自动修改为对应的网卡ip地址。但问题在于,如果该网卡没有连接外网(指定为gw之后不能联网),会无法访问该节点。
在每个节点上修改kubelete
的启动参数:
sudo vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
修改如下:
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.="yaml""
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/default/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS --cloud-provider=vsphere --cloud-config=/etc/vsphereconf/vsphere.conf --node-ip 172.16.253.201
即添加一个--node-ip
然后重启kubelete
sudo systemctl daemon-reload && sudo systemctl restart kubelet
在master节点上可看到所有node的ip已经更改。
但这样依旧无法ping通不同node上的pod,从而造成通信问题。即使使用了openvpn,设置所有流量经过openVPNserver,依旧无法解决。
受这篇文章启发,问题可能出现在flannel绑定的网卡上。
ip -d link show
41: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN mode DEFAULT group default
link/ether 3a:87:3f:d5:35:c5 brd ff:ff:ff:ff:ff:ff promiscuity 0
vxlan id 1 local 192.168.255.6 dev tun0 srcport 0 0 dstport 8472 nolearning ageing 300 udpcsum addrgenmode none
vxlan id 1 local 192.168.255.6 dev tun0
表明flannel和tun0绑定在一起。如果不是你希望的结果,那么需要修改flannel的启动参数
在第二章安装网络插件一节中介绍了获取和修改flannel配置文件的方法,现在继续修改该文件。
找到如下yaml片段,将args
增加--iface
参数,设置为你需要的网卡名即可
containers:
- name: kube-flannel
image: quay.io/coreos/flannel:v0.10.0-amd64
command:
- /opt/bin/flanneld
args:
- --ip-masq
- --kube-subnet-mgr
- --iface=tun0
如果是新建的集群,直接启动;否则kubectl delete -f kube-flannel.yaml
且kubectl apply -f kube-flannel.yaml
,该操作会重启所有节点的flannel插件。请确保所有的节点都有tun0
网卡(未尝试过不同名的openvpn网卡,但应该不行)。
此后就可以ping通不同节点的pods。