多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
##### **Q:calico-node的`IP`与`IP_AUTODETECTION_METHOD`这两个环境变量的作用是什么?** A:如果主机有多个网卡或多个IP,那么会有如下两个问题: (1)如果有主机有多个网卡,Pod从主机节点发送出去的时候,从哪个网卡出去(路由模式下就是从哪个网卡路由出去,IPIP模式下就是从哪个网卡封装出去);如果一个网卡有多个IP,使用哪一个IP进行路由或封包 (2)BGP协议在交换路由时使用哪个IP 上面的两个环境变量,就是用来解决这两个问题的。 `IP`这个环境变量的设置规则如下: ![](https://img.kancloud.cn/38/44/384494683176e480a74878a4f8bacbae_2487x721.png) 简单总结就是,`IP`的值可以是一个IP`x.x.x.x`,也可以是`autodetect`,如果是`x.x.x.x`,则使用这个值,网卡就是这个IP对就的网卡;如果是`autodetect`,则使用自动检测方法来检测IP。 自动检测方法对应的就是第二个环境变量`IP_AUTODETECTION_METHOD`,该变量的[取值如下](https://projectcalico.docs.tigera.io/reference/node/configuration#ip-autodetection-methods): * `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