温馨提示×

centos k8s部署网络设置方法

小樊
38
2025-12-23 16:45:35
栏目: 智能运维

CentOS 上 Kubernetes 网络设置方法

一 前置条件与内核网络

  • 关闭 Swap(Kubernetes 要求):执行命令:swapoff -a;并在 /etc/fstab 中注释 swap 行,永久生效。
  • 加载内核模块:启用 overlaybr_netfilter,并配置开机加载:
    • 执行:modprobe overlay && modprobe br_netfilter
    • 写入:/etc/modules-load.d/k8s.conf
      overlay
      br_netfilter
  • 开启桥接与转发(确保容器跨主机通信与 iptables 规则生效):
    • 写入:/etc/sysctl.d/k8s.conf
      net.bridge.bridge-nf-call-iptables = 1
      net.bridge.bridge-nf-call-ip6tables = 1
      net.ipv4.ip_forward = 1
    • 使配置生效:sysctl --system
  • 容器运行时与 kubelet 建议使用 systemd cgroup 驱动(以 containerd 为例):
    • 生成默认配置:containerd config default > /etc/containerd/config.toml
    • 编辑:/etc/containerd/config.toml,将 SystemdCgroup = true
    • 重启:systemctl enable --now containerd
  • 节点互通与时间同步:确保节点间 IP 互通、主机名解析正常,并开启 NTP/chrony 时间同步。

二 初始化集群并指定网段

  • 准备 kubectl 配置(在 Master 上):
    • 执行:mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 使用 kubeadm 初始化(示例):
    • 命令:kubeadm init --apiserver-advertise-address <Master_IP> --pod-network-cidr 10.244.0.0/16 --service-cidr 10.96.0.0/12
    • 说明:
      • –pod-network-cidr 必须与所选 CNI 插件的默认网段一致(见下一节)。
      • –service-cidr 默认常用 10.96.0.0/12,可按需调整,但需与集群内现有服务网段不冲突。
  • 加入工作节点:在 Master 上执行 kubeadm token create --print-join-command 获取加入命令,在 Worker 上执行。

三 安装 CNI 网络插件

  • 选择插件与网段匹配:
    • Flannel(简单、易上手):默认 Pod CIDR 为 10.244.0.0/16
    • Calico(支持网络策略、规模较大场景):通常使用 192.168.0.0/16 作为 Pod CIDR(以所用清单为准)。
  • 部署示例:
    • Flannel:
      • 执行:kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
      • 如需自定义后端/网段,可编辑清单中的 net-conf.json(例如将 “Network” 改为你的 Pod CIDR,“Backend.Type” 可选 vxlan/udp)。
    • Calico:
      • 执行:kubectl apply -f https://docs.projectcalico.org/v3.25/manifests/calico.yaml(版本可按需选择)。
  • 注意:同一集群只能启用 一个 CNI 插件,避免冲突。

四 验证与常见问题

  • 验证步骤:
    • 查看节点与系统 Pod:kubectl get nodeskubectl get pods -n kube-system
    • 查看 Flannel/Calico 组件是否 Running
    • 连通性测试:
      • 运行测试 Pod:kubectl run test-nginx --image=nginx --restart=Never
      • 获取 IP:kubectl get pod test-nginx -o wide
      • 在集群内另一 Pod 中访问该 IP(例如 curl http://<POD_IP>),确认跨节点与跨 Pod 通信正常。
  • 常见问题与处理:
    • 节点 NotReady:多因 CNI 未部署或 Pod CIDR 不匹配,核对 kubeadm 的 –pod-network-cidr 与插件清单中的 Network
    • Pod 之间或节点与 Pod 不通:检查 iptables/ipvsbridge-nf-call-iptables/ip6tables 是否开启,以及云厂商 安全组/ACL 是否放行 VxLAN/8472(UDP) 等流量。
    • 路由/网段冲突:确保 Pod CIDRService CIDR 均不与宿主机网络和其他网络重叠。
    • 多 CNI 冲突:卸载已安装插件后再部署新插件,确保只保留 一个 CNI。

0