k8s+isulad 网络问题
按照我前面的博客中的配置安装calico,发现存在网络问题,具体现象如下:
1. 各节点配置的物理地址可以互访
2. pod 容器的地址段ip 只能在单个节点中互访,跨节点不能访问
使用calicoctl node status 查看BGP状态,正常
sudo calicoctl node statusCalico process is running.IPv4 BGP status+--------------+-------------------+-------+------------+-------------+| PEER ADDRESS | PEER TYPE | STATE | SINCE | INFO |+--------------+-------------------+-------+------------+-------------+| 10.12.70.141 | node-to-node mesh | up | 2025-08-13 | Established || 10.12.70.142 | node-to-node mesh | up | 2025-08-13 | Established || 10.12.70.144 | node-to-node mesh | up | 2025-08-13 | Established || 10.12.70.145 | node-to-node mesh | up | 2025-08-13 | Established || 10.12.70.146 | node-to-node mesh | up | 2025-08-13 | Established || 10.12.70.147 | node-to-node mesh | up | 2025-08-13 | Established || 10.12.70.148 | node-to-node mesh | up | 2025-08-13 | Established || 10.12.70.149 | node-to-node mesh | up | 2025-08-13 | Established || 10.12.70.150 | node-to-node mesh | up | 2025-08-13 | Established |+--------------+-------------------+-------+------------+-------------+IPv6 BGP statusNo IPv6 peers found.// 查看本地路由ip routedefault via 10.12.70.129 dev enp3s1 proto dhcp src 10.12.70.143 metric 100 10.12.70.128/25 dev enp3s1 proto kernel scope link src 10.12.70.143 metric 100 22.244.22.128 via 10.12.70.144 dev enp3s1 proto 80 onlink 22.244.22.128/26 via 10.12.70.144 dev enp3s1 proto 80 onlink 22.244.40.0 via 10.12.70.146 dev enp3s1 proto 80 onlink
查看本地路由发现不了vxlan.calico信息,路由表中缺少 Calico VXLAN 隧道路由。
起初我认为是中国电子云的vpc网络问题(因为我的k8s节点是建立在中国电子云的虚拟机上的),后来找售后技术讨论,排除了中国电子云问题。
开始怀疑是不是安全策略问题,就在原来基础上为每个节点的安全组做了pod和svc地址段的信任放行,问题依旧存在。
我把所有现象都贴给了DeepSeek让它帮我分析,结果它认为是calico配置模式有问题,BGP网络使用的VXLAN,这里的模式应该是\"vxlanMode\": \"Always\" ,而我当前的配置是vxlanMode: CrossSubnet 模式。这里可以通过如下命令查看当前配置信息:
sudo calicoctl get ippool default-ipv4-ippool -o yaml | grep vxlanMode
但是使用DeepSeek给的解决方案:
sudo calicoctl patch ippool default-ipv4-ippool -p \'{\"spec\":{\"vxlanMode\": \"Always\"} }\'//显示修改成功,但是再查看配置还是始终改不过来
于是我查了以下官网的文档,这里可参考:Installation reference | Calico Documentation
通过修改installation这个资源可以更改上述配置内容。具体配置如下:
// 查看当前配置信息kubectl get installation default -n tigera-operator -o yaml// 修改 calico 安装中的custom-resources.yaml配置文件,也可以将installation写在另外一个tigera-operator.yaml配置文件中// installation 内容apiVersion: operator.tigera.io/v1kind: Installationmetadata: name: defaultspec: # Configures Calico networking. serviceCIDRs: - \"55.96.0.0/20\" //自定义svc的地址段 calicoNetwork: ipPools: - name: default-ipv4-ippool blockSize: 26 cidr: 22.244.0.0/16 //pod地址段 encapsulation: VXLAN //主要修改这个值就可以改变vxlanMode的值 natOutgoing: Enabled nodeSelector: all() imagePullSecrets: [] variant: Calico registry: docker.m.daocloud.io //自定义国内镜像拉取地址
这里建议不要完全参考DeepSeek给的修改方案,因为配置参数总有错误,如果拿不准可以查看以下calico的官方文档,也可以通过kubectl explain Installation.spec 往下查看,确认下面的参数项内容,往往DeepSeek在这个地方给的参数项压根就没有,或者从属归类有问题。
配置完后 使用如下命令更新配置,同时查看修改状态。
kubectl apply -f custom-resources.yaml//重启更新容器kubectl rollout restart deployment tigera-operator -n tigera-operator//等待容器启动正常kubectl wait --for=condition=available deployment/tigera-operator -n tigera-operator --timeout=90s//查看配置修改情况sudo calicoctl get ippool default-ipv4-ippool -o yaml | grep vxlanMode {\"apiVersion\":\"projectcalico.org/v3\",\"kind\":\"IPPool\",\"metadata\":{\"annotations\":{},\"generation\":1,\"labels\":{\"app.kubernetes.io/managed-by\":\"tigera-operator\"},\"name\":\"default-ipv4-ippool\",\"resourceVersion\":\"1351\"},\"spec\":{\"allowedUses\":[\"Workload\",\"Tunnel\"],\"assignmentMode\":\"Automatic\",\"blockSize\":26,\"cidr\":\"22.244.0.0/16\",\"ipipMode\":\"Never\",\"natOutgoing\":true,\"nodeSelector\":\"all()\",\"vxlanMode\":\"Always\"}} vxlanMode: Always// 现在已经是Always了//接下来重启calico-node,你也可以查看calico-system 命名空间下的部署都启动一遍kubectl get all -n calico-systemkubectl rollout restart daemonset calico-node -n calico-systemkubectl rollout restart deploy calico-kube-controllers -n calico-system...
此时再在节点上ping容器的ip就可以通了,通过之前做的nettools测试镜像可以测试容器之间的通断情况。
查看本地路由:
//ip route
22.244.40.0/26 via 22.244.40.0 dev vxlan.calico onlink
22.244.112.0 dev vxlan.calico scope link
也可以看到vxlan.calico信息了说明vxlan的路由通道已经正常建立起来了。
网+络问题解决。