Calico通过Kubernetes CNI接口加载运行,不可手动安装calico-node;calicoctl须版本严格匹配、显式配置DATASTORE_TYPE(kubernetes或etcd)、正确设置IP_AUTODETECTION_METHOD,并禁用IPIP/VXLAN之一以避免冲突。

Calico 不是“安装”出来的,而是通过 Kubernetes 的 CNI 接口被加载并运行的;直接在宿主机上手动安装 calico-node 二进制或服务,反而会导致冲突和不可控状态。
calicoctl 命令行工具必须提前下载并配置好
很多操作卡在第一步,就是因为 calicoctl 没配对、没权限、没连上数据后端。它不是 kubectl 插件,也不依赖 kubeconfig 默认路径。
- 必须从
https://github.com/projectcalico/calico/releases下载与你 Calico 集群版本严格匹配的二进制(比如 v3.13.1 对应calicoctl-linux-amd64),不能用最新版去管老集群 - 下载后加执行权限:
chmod +x calicoctl-linux-amd64,建议软链到/usr/local/bin/calicoctl - 必须显式指定连接方式:默认它会尝试连 etcd,但如果你用的是 Kubernetes API 模式(即
DATASTORE_TYPE=kubernetes),就得配置CALICO_DATASTORE_TYPE=kubernetes环境变量,否则报错Failed to create Calico API client: error getting cluster information: connection refused - 验证是否连通:
CALICO_DATASTORE_TYPE=kubernetes calicoctl get nodes—— 能列出节点才算真正就位
CALICO_IPV4POOL_IPIP 和 CALICO_IPV4POOL_VXLAN 必须二选一关闭
Calico 默认启用 IPIP(v3.13+),但这个行为在跨网段通信时才真正生效;如果所有节点都在同一二层网络(如统一 VLAN),IPIP 反而引入额外封装开销,吞吐下降 15%~20%。
- 生产环境推荐先禁用 IPIP:
CALICO_IPV4POOL_IPIP=Off,再确认 BGP 路由能自动收敛(calicoctl get ipippool -o wide应为空) - 若节点分布在不同子网(比如机房 A 的 10.10.1.0/24 和机房 B 的 10.10.2.0/24),则必须启用 IPIP 或 VXLAN;此时
CALICO_IPV4POOL_VXLAN=Never(避免混用) - 切勿同时开启两者,Calico 不校验,但 Felix 日志会反复报
conflicting tunnel modes,Pod 网络间断性不通
IP_AUTODETECTION_METHOD 错误会导致 Node IP 识别失败
Calico 启动后找不到本机 IP,calico-node Pod 就会卡在 Waiting for node to be ready,日志里反复出现 Failed to autodetect an IPv4 address。
- 默认逻辑是取第一个非 lo 网卡的主 IP,但在多网卡服务器(如带管理口
eno1、业务口ens3f0、存储口ens3f1)上大概率选错 - 必须显式指定:
IP_AUTODETECTION_METHOD=interface=ens3f0(注意正则写法,=两边无空格) - 也可以用 CIDR 匹配:
IP_AUTODETECTION_METHOD=can-reach=10.244.0.1,表示“能 ping 通这个地址的网卡” - 验证方法:进
calico-node容器执行ip addr show,比对calicoctl get node <name> -o yaml中的spec.bgp.ipv4Address是否一致
最易被忽略的是:BGP 全互联模式(Node-to-Node Mesh)在超过 50 个节点后,每个节点要维持 N−1 条 TCP 连接,CPU 和连接数压力陡增;这时必须提前规划 Route Reflector,而不是等集群跑起来再切——切换过程需滚动重启所有 calico-node,且中间存在短暂路由黑洞窗口。


















