Calico IP 混乱

Ank*_*sal 6 calico kubernetes

我对 Calico IP 有点困惑:

如果我使用以下命令将 calico 添加到 kubernetes 集群

kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml
Run Code Online (Sandbox Code Playgroud)

CALICO_IPV4POOL_CIDR 为 192.168.0.0/16,因此 IP 范围为 192.168.0.0 至 192.168.255.255

现在我已经使用以下命令启动了集群:

kubeadm init --pod-network-cidr=20.96.0.0/12 --apiserver-advertise-address=192.168.56.30
Run Code Online (Sandbox Code Playgroud)

因此,现在 Pod 的 IP 地址(使用 Pod 网络 CIDR)将在:20.96.0.0 到 20.111.255.255 之间

这两个不同的IP是什么?我的 Pod 正在获取 IP 地址 20.96.205.192 等。

Wil*_*.F. 7

  • 默认情况CALICO_IPV4POOL_CIDR#commented,请查看calico.yaml中的这些行:
# The default IPv4 pool to create on startup if none exists. Pod IPs will be
# chosen from this range. Changing this value after installation will have
# no effect. This should fall within `--cluster-cidr`.
# - name: CALICO_IPV4POOL_CIDR
#   value: "192.168.0.0/16"
Run Code Online (Sandbox Code Playgroud)

对于所有效果,除非在部署前手动修改,否则在部署期间不会考虑这些行

  • yaml 本身中的另一个重要行是:

# kubeadm 上的 Pod CIDR 自动检测需要访问配置映射。

这证实了 CIDR 是从集群获取的,而不是从calico.yaml.


这两个不同的IP是什么?我的 Pod 正在获取 IP 地址 20.96.205.192 等。

  • Kubeadm 支持许多Pod 网络插件,Calico 就是其中之一。另一方面,Calico 支持多种部署,kubeadm 只是其中之一。

  • 部署中的Kubeadm--pod-network-cidr是定义 pod 网络 CIDR 的正确方法,这就是20.96.0.0/12有效使用范围的原因。

  • CALICO_IPV4POOL_CIDR对于不为 Pod 网络指定 CIDR 池预留的其他类型的部署来说,这是必需的。


笔记:

  • 该范围20.96.0.0/12不是专用网络范围,如果具有该范围内公共 IP 的客户端尝试访问您的服务,可能会导致问题。
  • 专用网络的无类别保留 IP 范围是:
    • 10.0.0.0/8(16.777.216 个地址)
    • 172.16.0.0/12(1.048.576 个地址)
    • 192.168.0.0/16(65.536 个地址)
  • 您可以为 POD CIDR 网络使用这些范围内的任何子网大小,只需确保它不与网络中的任何子网重叠即可。

附加参考资料: