【问题标题】:Kubernetes Failed create pod sandbox with IPv6 disabledKubernetes 无法创建禁用 IPv6 的 Pod 沙箱
【发布时间】:2018-07-04 09:13:27
【问题描述】:

我昨天注意到 Kubernetes 的以下情况。我必须使用 kubeadm 在 Redhat 7.3 OS 上安装 Kubernetes。作为网络插件,我使用法兰绒。一切正常,直到我发现我的 DNS pod 无法启动并出现以下错误:

Normal   SandboxChanged          13m (x42200 over 13h)  kubelet, k8s-master  Pod sandbox changed, it will be killed and re-created.
Warning  FailedCreatePodSandBox  3m (x42687 over 13h)   kubelet, k8s-master  Failed create pod sandbox.

我检查了我的 cni 界面,发现如下:

cni0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    ether 00:00:00:00:00:00  txqueuelen 1000  (Ethernet)
    RX packets 0  bytes 0 (0.0 B)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 0  bytes 0 (0.0 B)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

没有IP地址和mac。然后我检查了目录/var/lib/cni/networks/cbr0/。有文件对应于flannel分配给该主机的网络10.244.0.0/24。

然后我检查了日志:

journalctl -xe | grep cni
Jan 24 20:35:02 k8s-master kubelet[3353]: E0124 20:35:02.979434    3353     cni.go:259] Error adding network: open /proc/sys/net/ipv6/conf/eth0/accept_dad: no such file or directory
Jan 24 20:35:02 k8s-master kubelet[3353]: E0124 20:35:02.979452    3353 cni.go:227] Error while adding to cni network: open /proc/sys/net/ipv6/conf/eth0/accept_dad: no such file or directory
Jan 24 20:35:03 k8s-master kubelet[3353]: E0124 20:35:03.260145    3353 remote_runtime.go:92] RunPodSandbox from runtime service failed: rpc error: code = Unknown desc = NetworkPlugin cni failed to set up pod "kube-dns-6f4fd4bdf-mcztl_kube-system" network: open /proc/sys/net/ipv6/conf/eth0/accept_dad: no such file or directory

所以有些东西连接到了 ipv6,但我不知道为什么,因为我们不使用 IPv6 协议。然后我在内核级别检查了 IPv6 模块,发现它被禁用了:

GRUB_CMDLINE_LINUX="ipv6.disable=1"

只是为了测试,我尝试启用它,它帮助 pod 获得了 IP 一切正常。

有人能澄清一下这种情况吗,也许你也遇到过同样的问题?为什么我不使用 IPv6 就不能禁用它?

提前谢谢你。

【问题讨论】:

  • 一切都在向 IPv6 迁移,Kubernetes 也不例外。它正在稳步获得 IPv6 功能。据我了解,Kubernetes 网络的某些部分最终将需要 IPv6(可能已经?)。
  • 您是如何启用 IPv6 以使其工作的?
  • GRUB_CMDLINE_LINUX="ipv6.disable=0"。然后 grub2-mkconfig -o /boot/grub2/grub.cfg 并重新启动服务器。

标签: kubernetes ipv6 flannel


【解决方案1】:

如果您只想在集群上使用 IPv4,则需要相应地设置 CNI 网桥。

默认情况下:

export PODCIDR="10.244.0.0/16"

curl -sSL "https://raw.githubusercontent.com/cri-o/cri-o/main/contrib/cni/11-crio-ipv4-bridge.conf" | sed "s:10.85.0.0/16:${PODCIDR}:g" | tee /etc/cni/net.d/11-crio-ipv4-bridge.conf
 
curl -sSL "https://raw.githubusercontent.com/cri-o/cri-o/main/contrib/cni/99-loopback.conf" -o /etc/cni/net.d/99-loopback.conf

rm /etc/cni/net.d/10-crio-bridge.conf

systemctl restart NetworkManager

【讨论】:

    猜你喜欢
    • 2018-08-31
    • 1970-01-01
    • 2018-03-31
    • 2015-10-31
    • 2020-10-12
    • 1970-01-01
    • 2010-12-15
    • 2017-02-28
    • 2016-02-04
    相关资源
    最近更新 更多