报错
rancher上无法访问集群,查看rancher-agent pod不在了,restart deployment后也起不来,查看events信息,有如下报错:E1121 06:26:50.428335 1 controller.go:223] unable to sync kubernetes service: Post "https://[::1]:6443/api/v1/namespaces": dial tcp [::1]:6443: connect: cannot assign requested address
发现是apiserver1使用了ipv6地址,导致服务无法进行通信。
解决
禁用该节点的ipv6。
# 禁用整个系统所有接口的IPv6
net.ipv6.conf.all.disable_ipv6 = 1
# 禁用eth0的IPv6
net.ipv6.conf.eth0.disable_ipv6 = 1
# 生效
sysctl -p /etc/sysctl.conf
# 或者修改内核参数,"xxxxx"代表任何已有的内核参数,在它后面添加"ipv6.disable=1"。
vim /etc/default/grub
GRUB_CMDLINE_LINUX="xxxxx ipv6.disable=1"
grub2-mkconfig -o /boot/grub2/grub.cfg
重启apiserver
注意这里不能直接删除apiserver的pod,否则不会生效。因为pause容器没有被删除,pod内部网络仍然用的之前的网络,还是有ipv6地址的。
进入容器内查看ip,还是有ipv6的。
正确的删除方法是:
mv /etc/kubernetes/manifests/kube-apiserver.yaml /root
mv /root/kube-apiserver.yaml /etc/kubernetes/manifests/kube-apiserver.yaml
或者:
crictl ps |grep kube-apiserver
crictl stop kube-apiserver
重启后,apiserver恢复正常。