Kubernetes如何在CentOS上进行网络配置
导读:在 CentOS 上配置 Kubernetes 网络的实操指南 一 基础网络与内核参数 设置主机名与节点互通:为每个节点设置唯一主机名(如:hostnamectl set-hostname k8s-master),并在所有节点维护一致的...
在 CentOS 上配置 Kubernetes 网络的实操指南
一 基础网络与内核参数
- 设置主机名与节点互通:为每个节点设置唯一主机名(如:hostnamectl set-hostname k8s-master),并在所有节点维护一致的 /etc/hosts 映射,确保节点间可通过主机名访问。
- 关闭 Swap:Kubernetes 要求禁用 Swap。执行:swapoff -a,并在 /etc/fstab 中注释 swap 行,随后用 free -m 验证 Swap 为 0。
- 加载内核模块与开启转发:
- 加载模块:modprobe overlay & & modprobe br_netfilter
- 持久化:
cat > /etc/modules-load.d/k8s.conf < < EOF overlay br_netfilter EOF - 开启桥接与转发:
cat > /etc/sysctl.d/k8s.conf < < EOF net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF sysctl --system
- 防火墙与 SELinux(测试/实验环境常用做法):
- 停止并禁用防火墙:systemctl stop firewalld & & systemctl disable firewalld
- 临时禁用 SELinux:setenforce 0;永久禁用:编辑 /etc/selinux/config,将 SELINUX=enforcing 改为 SELINUX=disabled
- 容器运行时与 kubelet:安装并启用 containerd(或 Docker),配置 SystemdCgroup = true,启动 containerd 与 kubelet 服务。
二 选择并部署 CNI 网络插件
- 规划 Pod 网段:在初始化集群时通过 –pod-network-cidr 指定(例如 Flannel 常用 10.244.0.0/16)。
- 部署插件(任选其一,完成其一即可):
| 插件 | 适用场景 | 安装命令 | 备注 |
|---|---|---|---|
| Flannel | 快速上手、覆盖网络 | kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml | 默认后端 VXLAN;Pod 网段通常为 10.244.0.0/16 |
| Calico | 网络策略与安全能力强 | kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml | 支持 BGP/Overlay 等模式,适合对策略有要求的场景 |
- 初始化控制平面(示例):
kubeadm init --pod-network-cidr=10.244.0.0/16 mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config - 工作节点加入(示例):
kubeadm join < control-plane-host> :6443 --token < token> --discovery-token-ca-cert-hash sha256:< hash> - 安装完成后等待 kube-system 命名空间中的网络组件 Running。
三 验证与连通性测试
- 集群就绪检查:
kubectl get nodes -o wide kubectl get pods -n kube-system -o wide - Pod 网络连通性:
kubectl run test-nginx --image=nginx:1.25 --restart=Never kubectl get pod test-nginx -o wide # 在集群内另一 Pod 中访问 kubectl run test-curl --image=curlimages/curl:8.5 --restart=Never -it --rm -- \ curl -I http://< test-nginx-pod-ip> - Service 与 DNS:
kubectl expose pod test-nginx --port=80 --name=nginx-svc --type=ClusterIP kubectl get svc nginx-svc kubectl run test-dns --image=busybox:1.36 --restart=Never -it --rm -- \ nslookup kubernetes.default.svc.cluster.local - 节点间连通性:在节点上互相 ping 或通过 nc/telnet 测试关键端口(如 6443/10250/8472 等)。
四 常见问题与排错要点
- Pod 处于 Pending:多因未部署 CNI 或 –pod-network-cidr 与插件配置不匹配;检查 kube-system 中网络 Pod 是否 Running,核对网段一致性。
- Pod 之间或节点间不通:确认已加载 overlay/br_netfilter 且 ip_forward=1;检查云厂商 安全组/ACL 是否放行 VxLAN(8472/UDP)、节点间 TCP/6443 等端口。
- Service 解析失败:确认 CoreDNS Pod 就绪,检查 kube-dns Service 的 ClusterIP 是否分配,使用 nslookup 排查。
- MTU 与性能:在 Flannel 或 Calico 中根据网卡 MTU 调整(如 VXLAN 通常需预留约 50 字节,MTU 设为 1450 更稳);云上或隧道封装场景尤需关注。
- 防火墙/SELinux:若未关闭,需为 CNI/ kube-proxy 放行相应端口与协议,或按官方建议精细化策略(生产环境不建议直接关闭)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Kubernetes如何在CentOS上进行网络配置
本文地址: https://pptw.com/jishu/775315.html
