温馨提示×

Debian上K8s部署的网络如何配置

小樊
45
2025-12-24 22:44:13
栏目: 智能运维

Debian上Kubernetes网络配置实操指南

一 前置条件与内核网络

  • 在所有节点完成基础准备:禁用swap(执行swapoff -a并注释**/etc/fstab中的swap行)、确保主机名唯一**、节点间网络互通、开启时间同步(如 chrony)。这些是确保 kubelet 与网络插件正常工作的前提。
  • 加载内核模块并设置转发与桥接参数(以 containerd 为例,同样适用于 Docker 场景):
    • 加载模块:
      sudo modprobe overlay
      sudo modprobe br_netfilter
    • 开启桥接与转发(写入**/etc/sysctl.d/99-kubernetes-k8s.conf**):
      net.bridge.bridge-nf-call-iptables = 1
      net.bridge.bridge-nf-call-ip6tables = 1
      net.ipv4.ip_forward = 1
      应用:sudo sysctl --system
      上述内核与转发设置是容器跨主机通信与 Service 正常 NAT 所必需的。

二 初始化集群与Pod网络CIDR规划

  • 安装 kubeadm/kubelet/kubectl(略)。在控制平面节点执行初始化,务必显式指定Pod 网络 CIDR,该 CIDR 需与所选 CNI 插件默认或配置一致:
    • 示例(Flannel 常用):
      sudo kubeadm init --apiserver-advertise-address=<MASTER_IP> --pod-network-cidr=10.244.0.0/16
    • 示例(Calico 常用):
      sudo kubeadm init --apiserver-advertise-address=<MASTER_IP> --pod-network-cidr=192.168.0.0/16
  • 初始化完成后,按提示配置 kubectl(拷贝 admin.conf 到 $HOME/.kube/config)。
  • 说明:kubeadm 不会自动安装 CNI,只有在应用了 CNI 插件并完成节点就绪后,节点才会从 NotReady 变为 Ready

三 安装与配置CNI网络插件

  • 选择一种主流 CNI(二选一或按需求选其一),在控制平面节点 apply 对应清单即可完成 Pod 网络打通与跨主机连通。
  • Flannel(推荐用于快速上手与通用场景)
    • 部署:
      kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    • 要点:默认使用 10.244.0.0/16 作为 Pod CIDR,需与 kubeadm 的 --pod-network-cidr 保持一致。
  • Calico(支持网络策略、可定制性强)
    • 部署:
      kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
    • 要点:常见默认 192.168.0.0/16;如使用不同 Pod CIDR,需修改清单中的 CALICO_IPV4POOL_CIDR 值后再 apply。
  • 验证:
    kubectl get nodes(应为 Ready
    kubectl get pods -n kube-system(CNI 相关 Pod 均为 Running

四 防火墙与安全组放行

  • 若使用 UFW,在主控与工作节点放行如下端口(示例命令):
    • 主控节点:
      sudo ufw allow 6443/tcp
      sudo ufw allow 2379:2380/tcp
      sudo ufw allow 10250/tcp
      sudo ufw allow 10251/tcp
      sudo ufw allow 10252/tcp
      sudo ufw allow 10255/tcp
      sudo ufw reload
    • 工作节点:
      sudo ufw allow 10250/tcp
      sudo ufw allow 30000:32767/tcp(NodePort 范围)
  • 如使用云厂商安全组,同样需放行上述端口区间,否则节点与控制平面无法通信、NodePort 无法对外暴露。

五 验证与常见问题排查

  • 连通性验证
    • 部署测试应用并暴露:
      kubectl create deployment nginx-app --image=nginx --replicas=2
      kubectl expose deployment nginx-app --name=nginx-web-svc --type=NodePort --port=80 --target-port=80
    • 访问测试:
      kubectl get svc nginx-web-svc(获取 NodePort,如 31743
      curl http://<任一节点IP>:31743
  • 快速排查清单
    • 节点未 Ready:kubectl describe node 与 kubectl get pods -n kube-system 查看 CNI Pod 是否 CrashLoop/Error。
    • Pod 间不通:确认 CNI 已成功部署、Pod CIDR 规划一致、跨节点路由/安全组无阻断。
    • Service 不通:核对 Service 类型、NodePort 范围与安全组/防火墙放行。
    • 重置与重装(必要时):
      sudo kubeadm reset
      sudo rm -rf /etc/cni/net.d
      iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
      重新 init 并 apply CNI 清单。

0