虚拟机中k8s calico网络不通

本文解决了一个Kubernetes环境中Pod跨主机通信失败的问题。通过修改Calico配置文件,重启服务,并调整网络设置,最终实现了Pod间的稳定通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

k8s pod 跨主机pind pod 不通

一 改calico.yaml

# 增加定位
- name: IP_AUTODETECTION_METHOD
value: can-reach=192.168.31.168   #master节点内网ip
- name: IP
value: "autodetect"

#取消注释,10.100.0.1/16为pod的网段
 name: CALICO_IPV4POOL_CIDR
 value: "10.100.0.1/16"
 
 #延时改长
 livenessProbe:
   initialDelaySeconds: 60
   failureThreshold: 10

二 删除配置文件,重新安装

kubectl delete -f calico.yaml
rm -rf /var/lib/cni
/etc/cni/net.d  # 删除此目录下所有文件,如bridge 模块的10-bridge.conf
kubectl apply -f calico.yaml
所有节点reboot

如上执行完后,pod 可以ping通,但是vmware挂起后,再打开又ping 不通了

route -n # 发现tunl0的路由消失了
systemctl restart NetworkManager 
ifconfig tunl0 up

打开tunl0后,可以ping通,但还会存在vmware挂起后又ping 不通的问题

后面直接关闭了NetworkManager

service  NetworkManager stop
### Kubernetes (k8s) 集群在虚拟机中的安装与网络配置 #### 一、概述 Kubernetes 是一种用于自动化部署、扩展和管理容器化应用程序的开源平台。为了实现跨节点通信,Kubernetes 使用 CNI(Container Network Interface)插件来定义网络模型。常见的 CNI 插件有 Flannel 和 Calico[^1]。 --- #### 二、环境准备 在开始之前,请确保以下条件已满足: - 至少两台虚拟机作为 Master 和 Worker 节点。 - 所有节点均已安装 Docker 或其他支持的容器运行时接口(CRI),例如 containerd[^2]。 - 已关闭防火墙或允许必要的端口访问。 - 主机名解析已完成,可以通过 `kubectl` 命令验证连接性。 --- #### 三、Master 节点初始化 1. **初始化 Master 节点** 在 Master 节点上执行以下命令完成集群初始化: ```bash sudo kubeadm init --pod-network-cidr=192.168.0.0/16 ``` 这里的 CIDR 地址范围取决于所选的 CNI 插件,默认为 Flannel 的推荐值[^4]。 2. **设置 kubeconfig 文件** 初始化完成后,将管理员权限分配给当前用户: ```bash mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config ``` 3. **检查节点状态** 确认 Master 节点的状态是否为 Ready: ```bash kubectl get nodes ``` --- #### 四、CNI 插件安装 以下是两种主流 CNI 插件的安装方法: ##### 1. 安装 Flannel Flannel 提供了一种简单的覆盖网络解决方案,适用于小型到中型集群。 ```bash kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml ``` 此操作会创建所需的 Pod 并应用默认网络策略。 ##### 2. 安装 Calico Calico 更适合大规模生产环境,提供更高级的安全功能和 BGP 支持。 ```bash curl https://projectcalico.docs.tigera.io/manifests/calico.yaml -O kubectl apply -f calico.yaml ``` 如果需要自定义参数,可以修改 YAML 文件后再应用。 > 注意:无论选择哪种插件,在同一集群中仅能启用一个 CNI 解决方案。 --- #### 五、Worker 节点加入集群 通过以下命令获取 Join Token,并将其复制到每个 Worker 节点上执行: ```bash kubeadm token create --print-join-command ``` 示例输出可能如下所示: ```bash kubeadm join <master-ip>:<port> --token <token-value> ``` 成功加入后,再次运行 `kubectl get nodes` 查看所有节点状态[^3]。 --- #### 六、验证 CoreDNS 功能 CoreDNS 是 Kubernetes 默认的服务发现组件。确认其 Pod 是否正常运行: ```bash kubectl get pods -n kube-system | grep coredns ``` 当看到两个副本均处于 Running 状态时,表示 DNS 服务已经可用。 --- #### 七、后续优化建议 - 如果计划长期维护该集群,考虑实施 RBAC 权限控制机制。 - 对于高可用架构设计,可增加多个 Master 节点并通过负载均衡器分发请求。 - 根据实际需求调整资源配额及调度策略。 --- ### 总结 上述流程涵盖了从基础环境搭建至核心服务验证的关键环节。无论是选用轻量级工具链还是追求极致性能表现的产品线,合理规划初始阶段的各项参数始终至关重要。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值