温馨提示×

Ubuntu Kubernetes网络配置方法

小樊
44
2025-12-14 16:05:40
栏目: 智能运维

Ubuntu 上 Kubernetes 网络配置实操指南

一 前置条件与系统网络准备

  • 禁用 Swap(Kubernetes 要求):执行命令:sudo swapoff -a,并在 /etc/fstab 中注释 swap 行,永久生效。
  • 加载桥接与开启转发:
    • 加载模块:sudo modprobe br_netfilter
    • 内核参数:net.bridge.bridge-nf-call-iptables=1net.ipv4.ip_forward=1
    • 持久化:写入 /etc/sysctl.d/k8s.conf 并执行 sudo sysctl --system
  • 容器运行时建议使用 containerd(更契合 K8s CRI):
    • 安装:sudo apt install -y containerd
    • 生成默认配置:containerd config default | sudo tee /etc/containerd/config.toml
    • 启用 SystemdCgroup:将 SystemdCgroup = false 改为 true 并重启:sudo systemctl restart containerd && sudo systemctl enable containerd
  • 主机名与解析(示例):
    • 设置主机名:hostnamectl set-hostname master(各节点分别设置)
    • 写入 /etc/hosts:
      • 10.128.0.4 master
      • 10.128.0.5 node1
      • 10.128.0.6 node2
  • 时间同步:建议统一时区为 Asia/Shanghai 并做时间校准,避免证书与调度异常。

二 初始化集群与 Pod 网段规划

  • 安装 kubeadm/kubelet/kubectl(Ubuntu 22.04 + K8s 1.28 示例仓库):
    • 导入 GPG:curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
    • 添加源:echo ‘deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /’ | sudo tee /etc/apt/sources.list.d/kubernetes.list
    • 安装组件:sudo apt-get update && sudo apt-get install -y kubelet=1.28.4-1.1 kubeadm=1.28.4-1.1 kubectl=1.28.4-1.1
    • 锁定版本:sudo apt-mark hold kubelet kubeadm kubectl
  • 初始化控制平面(仅在 master 执行,注意 –pod-network-cidr 与所选插件一致):
    • 命令:sudo kubeadm init --apiserver-advertise-address=10.128.0.4 --pod-network-cidr=10.244.0.0/16 --kubernetes-version=1.28.4
  • 配置 kubectl:
    • mkdir -p $HOME/.kube
    • sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    • sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 工作节点加入:在 master 生成命令 kubeadm token create --print-join-command,在 worker 执行输出的 kubeadm join … 命令。

三 安装网络插件

  • 选择插件与 Pod CIDR 对齐:常见插件有 Flannel、Calico、Cilium;若使用 Flannel,通常将 Pod CIDR 设为 10.244.0.0/16
  • 安装示例:
    • Flannel:
      • kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
      • 如需自定义后端/网段,可在 kube-flannel.yml 中修改 net-conf.jsonNetworkBackend.Type(如 vxlan)
    • Calico:
      • 方式 A(Operator):kubectl apply -f https://docs.projectcalico.org/manifests/tigera-operator.yamlkubectl apply -f https://docs.projectcalico.org/manifests/custom-resources.yaml
      • 方式 B(经典清单):kubectl apply -f https://docs.projectcalico.org/v3.25/manifests/calico.yaml
    • Cilium:
      • helm repo add cilium https://helm.cilium.io/
      • helm install cilium cilium/cilium
  • 安装后等待 kube-system 命名空间中相关 Pod 均为 Running

四 验证与连通性测试

  • 集群与节点状态:
    • kubectl cluster-info
    • kubectl get nodes -o wide
  • 网络插件状态:
    • Flannel:kubectl get pods -n kube-system -l app=flannel
    • Calico:kubectl get pods -n kube-system | grep calico
  • 端到端连通性:
    • 启动测试应用:kubectl run nginx --image=nginx --port=80
    • 查看 Pod IP:kubectl get pod nginx -o wide
    • 进入另一个 Pod 访问:kubectl exec -it – curl http://
  • 网络策略(可选,示例限制出口到某网段):
    • 应用策略后,验证被阻断/放行的流量是否符合预期。

五 常见问题与排查要点

  • 节点 NotReady:多因网络插件未就绪或 Pod CIDR 不匹配;核对初始化时的 –pod-network-cidr 与插件配置是否一致,并查看 kube-system 中插件 Pod 日志。
  • Pod 间不通:检查 br_netfilter/iptables/ip_forward 是否生效(见第一部分),以及云厂商安全组/本机防火墙是否放行 VxLAN/Geneve 等 overlay 端口。
  • 多插件冲突:同一集群不建议并行运行多个 CNI 插件,安装前确保旧插件已彻底清理。
  • 镜像拉取慢/失败:可更换为国内镜像源或提前拉取所需镜像,再执行部署。

0