centos k8s部署怎样配置网络
导读:CentOS 上 Kubernetes 网络配置实操指南 一 前置网络与系统准备 关闭防火墙与 SELinux(测试环境常用做法,生产请按需放通端口与策略) systemctl stop firewalld && sys...
CentOS 上 Kubernetes 网络配置实操指南
一 前置网络与系统准备
- 关闭防火墙与 SELinux(测试环境常用做法,生产请按需放通端口与策略)
- systemctl stop firewalld & & systemctl disable firewalld
- setenforce 0 & & sed -i ‘s/^SELINUX=enforcing/SELINUX=disabled/’ /etc/selinux/config
- 禁用 Swap(kubelet 要求)
- swapoff -a & & sed -i ‘/swap/s/^/#/’ /etc/fstab
- 内核网络参数与模块(桥接流量入 iptables、开启转发)
- cat > /etc/sysctl.d/k8s.conf < < EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 vm.swappiness = 0 EOF
- modprobe br_netfilter & & sysctl --system
- 主机名与 /etc/hosts(示例)
- hostnamectl set-hostname k8s-master
- echo “192.168.10.100 k8s-master\n192.168.10.101 k8s-node1” > > /etc/hosts
- 时间同步(避免证书/组件异常)
- yum install -y ntpdate & & ntpdate time.windows.com
- 容器运行时(以 containerd 为例,配置 systemd cgroup)
- yum install -y containerd.io cri-tools
- containerd config default | tee /etc/containerd/config.toml
- sed -i ‘s/SystemdCgroup = false/SystemdCgroup = true/’ /etc/containerd/config.toml
- systemctl enable --now containerd 说明:以上为常见前置项,能确保节点具备基本的网络转发与容器网络栈支持。
二 集群初始化与 Pod/Service CIDR 规划
- 规划地址段(与所选网络插件保持一致)
- Service CIDR:建议 10.96.0.0/16
- Pod CIDR:
- Flannel 常用:10.244.0.0/16
- Calico 常用:192.168.0.0/16
- 初始化控制平面(示例)
- kubeadm init
–apiserver-advertise-address=192.168.10.100
–service-cidr=10.96.0.0/16
–pod-network-cidr=10.244.0.0/16
–image-repository=registry.aliyuncs.com/google_containers
- kubeadm init
- 配置 kubectl
- mkdir -p $HOME/.kube
- cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- chown $(id -u):$(id -g) $HOME/.kube/config
- 工作节点加入
- kubeadm join 192.168.10.100:6443 --token --discovery-token-ca-cert-hash sha256: 提示:Pod CIDR 必须在初始化时指定,后续更换成本高;请与所选网络插件的默认 CIDR 保持一致。
三 安装网络插件
- Flannel(推荐用于快速打通 Pod 网络)
- kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- 若初始化时使用了非默认 Pod CIDR,需编辑 kube-flannel.yml 中的 Network 字段与之匹配。
- Calico(支持 NetworkPolicy、跨节点策略更丰富)
- 下载对应版本清单(示例为 v3.25):
- wget https://docs.projectcalico.org/v3.25/manifests/calico.yaml
- 如使用非默认 Pod CIDR(如 192.168.0.0/16),在 calico.yaml 中设置:
-
- name: CALICO_IPV4POOL_CIDR
- value: “192.168.0.0/16”
-
- 应用:
- kubectl apply -f calico.yaml
- 下载对应版本清单(示例为 v3.25):
- 验证
- kubectl get nodes
- kubectl get pods -n kube-system | grep -E ‘flannel|calico’ 说明:Flannel 部署简单、覆盖常见场景;Calico 提供网络策略等能力,适合对网络治理有要求的集群。
四 连通性验证与网络策略示例
- 基础连通性
- 部署测试应用:kubectl run nginx --image=nginx --port=80
- 查看 Pod IP:kubectl get pod nginx -o wide
- 跨 Pod 访问:kubectl exec -it – curl http://:80
- DNS 解析
- kubectl run -it --rm dns-test --image=busybox:1.36 --restart=Never – nslookup kubernetes.default.svc.cluster.local
- 网络策略(示例:同命名空间内允许 80 入站)
- apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-same-ns-http
namespace: default
spec:
podSelector:
matchLabels:
app: nginx
policyTypes:
- Ingress ingress:
- from:
- podSelector: { } ports:
- protocol: TCP port: 80
- 应用:kubectl apply -f network-policy.yaml 说明:验证应覆盖 Pod 间通信、集群 DNS 与关键端口策略,确保业务与治理策略生效。
- apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-same-ns-http
namespace: default
spec:
podSelector:
matchLabels:
app: nginx
policyTypes:
五 常见问题与排查要点
- 节点 NotReady:多数因网络插件未就绪,检查 kube-system 中 flannel/calico Pod 是否 Running,镜像是否拉取成功,Pod CIDR 是否与初始化参数一致。
- Pod 间不通:确认节点间 Pod CIDR 路由可达(云上需开启相关路由/安全组),以及 iptables/ipvs 未被错误策略干扰。
- Service 访问异常:核对 Service CIDR 与 kube-proxy 工作模式(iptables/ipvs),排查 Endpoint 是否正确关联。
- DNS 解析失败:检查 kube-dns/coredns 是否就绪、是否存在 NetworkPolicy 拦截、以及节点 resolv.conf 配置。
- 生产建议:不要长期关闭防火墙与 SELinux,改为按需放通端口与策略;为容器运行时与 kubelet 配置合适的 systemd cgroup 驱动与镜像仓库镜像源,提升稳定性与可维护性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos k8s部署怎样配置网络
本文地址: https://pptw.com/jishu/752157.html
