入门 Kubernetes 网络配置,最稳妥的路径是先理解 Pod 与 Service 模型,再选择成熟的 CNI 插件(如 Calico 或 Flannel)完成集群内通信,最后通过 Ingress 暴露服务。
先说结论:新手建议优先选用社区维护成熟的 CNI 插件,避免自行编写网络逻辑,重点确保 Pod 网段不与物理网络冲突。
- 适合:刚搭建完控制平面,需要打通 Pod 间通信的场景
- 先准备:规划好 Pod CIDR 网段,确认节点间防火墙策略
- 验收:通过 Pod 间 ping 测试及 Service 访问验证连通性
命令速用版
如果你已经初始化了集群但尚未安装网络插件,可以直接应用官方提供的配置文件。以下是两个常见插件的安装命令:
# 安装 Calico
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml# 安装 Flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml安装后查看状态:
kubectl get pods -n kube-system为什么会这样
Kubernetes 网络模型的核心要求是所有 Pod 都可以在不使用 NAT 的情况下与其他 Pod 通信,且 Pod 自己的 IP 与其他 Pod 看到的 IP 是相同的。这意味着每个 Pod 都需要一个唯一的 IP 地址,且节点间的 Pod 可以直接通信。
为了实现这一点,Kubernetes 依赖 CNI(容器网络接口)插件。Linux 中每个进程都在一个网络命名空间内通信,Pod 中的容器共享网络命名空间,因此它们拥有相同的 IP 地址和端口空间,可以通过 localhost 访问彼此。而 Service 则提供了一组 Pod 的统一访问入口,支持负载均衡,其 IP 地址是虚拟的,由 Kubernetes 集群管理。
分步处理
1. 规划网段
在初始化集群前,必须规划好 Pod 网段(POD_SUBNET)。该网段不能与 master 节点或 worker 节点所在的物理网段重叠。例如,如果节点 IP 是 192.168.1.x,Pod 网段建议使用 10.100.0.0/16 这类私有地址。
2. 初始化集群
使用 kubeadm 初始化时,指定网络插件所需的 CIDR 参数。例如:
kubeadm init `--pod-network-cidr`=10.100.0.0/163. 安装 CNI 插件
根据选择的插件应用配置文件。安装完成后,网络插件的 Pod 应该处于 Running 状态。
4. 配置 Service
创建 Service 来暴露应用。例如创建一个 ClusterIP 类型的服务:
apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:selector:app: nginxports:- port: 80targetPort: 80type: ClusterIP怎么验证是否生效
1. 检查插件状态
确保 kube-system 命名空间下的网络插件 Pod 全部运行正常:
kubectl get pods -n kube-system2. 连通性测试
创建两个临时 Pod,互相 ping 测试。例如:
kubectl run busybox `--image`=busybox:1.32 `--rm` -it -- ping -c 4 8.8.8.8如果在集群内,可以尝试 ping 另一个 Pod 的 IP 地址。公开资料中没有看到可靠的量化数据表明特定插件的延迟差异,但连通性是基本指标。
3. 服务访问
在集群内部其他 Pod 中访问 Service 的 IP 或域名,确认负载均衡生效。
常见坑
1. 网段冲突
POD_SUBNET 所使用的网段不能与节点所在的网段重叠,否则路由会混乱。如果您对 CIDR 概念不熟悉,请不要随意修改默认取值。
2. 云平台特定限制
在云环境中,网络模型可能受限于云提供商。例如在 Azure Kubernetes Service (AKS) 中,官方提示 kubenet 网络功能将在未来停用,建议升级到 Azure 容器网络接口 (CNI) 覆盖层,以避免服务中断。
3. 主机名问题
在安装过程中,如果 hostname 不合法可能导致初始化失败。建议在安装前检查并修改主机名,确保符合 DNS 命名规范。
4. 防火墙策略
节点间的防火墙必须允许特定端口通信(如 BGP 端口用于 Calico,VXLAN 端口用于 Flannel),否则 Pod 间无法跨节点通信。
参考来源
- Kubernetes 网络管理:从 CNI 到 Ingress 的全栈网络配置
- Kubernetes 网络配置:从基础到高级
- 超长干货丨 Kubernetes 网络快速入门完全指南
- 在 Azure Kubernetes Service (AKS) 中配置 kubenet 网络 - Azure Kubernetes Service | Microsoft Learn
- 非云环境中 Kubernetes 的配置和运行:网络 - 腾讯云开发者社区
- Project Calico 官方文档 (https://docs.projectcalico.org/manifests/calico.yaml)
- CoreOS Flannel 官方文档 (https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml)
原文链接:https://www.zjcp.cc/ask/10409.html
