在 Calico 中,IP_AUTODETECTION_METHOD
的配置项用于指定 Calico 如何检测容器的 IP 地址。
一、kubernetes-internal-ip模式
其中,kubernetes-internal-ip
是一种特殊的模式,用于在 Kubernetes 环境中检测容器的 IP 地址。具体作用如下:
kubernetes-internal-ip 模式:
kubernetes-internal-ip
模式时,它将尝试从 Kubernetes 的 API 服务器获取容器的 IP 地址。使用 kubernetes-internal-ip
模式有以下优势:
在使用 kubernetes-internal-ip
模式时,确保 Kubernetes 集群正常运行,Calico 与 Kubernetes API 服务器正常通信,并且 Pod 的 IP 地址能够被正确分配和获取。这样,Calico 将能够有效地管理和路由容器的流量。
first-found
:把本机网卡的所有IP列出来,然后选择第一个IP(docker0与lo网卡的IP会被忽略掉),第一个IP
会因为操作系统的不同而不同,比如在centos操作系统中,假设网卡ens33有一个IP 192.168.92.101,网卡ens37有两个IP 192.168.90.101(primray)和192.168.90.10(second),那么找到的IP就是192.168.90.101(好像是按每个网卡的primary IP升序排列)
kubernetes-internal-ip
:使用K8S节点的internal-ip,我们通过kubectl get node -o wide
可以看到每个节点的internal-ip是多少
can-reach=x.x.x.x
:通过哪个IP能到达x.x.x.x,就选择哪个IP。如果一个网卡有多个IP,都可以到达x.x.x.x,则选择哪一个(待验证)。另外x.x.x.x
可以换成域名比如can-reach=www.baidu.com
interface=INTERFACE-REGEX
:通过interface的名字正则表达式来寻找IP,比如interface=ens33
或interface=ens*
。
skip-interface=INTERFACE-REGEX
:先过滤掉某些网卡,然后使用first-found方法。
cidr=CIDR
:通过CIDR来寻找。比如cidr=192.168.92.0/24
,某主机有网卡ens33(192.168.92.101)和ens37(192.168.90.101),那么选择的IP就是192.168.92.101
?