温馨提示×

Ubuntu Kubernetes网络如何设置

小樊
44
2025-12-28 09:30:01
栏目: 智能运维

Ubuntu 上搭建 Kubernetes 网络的实操指南

一 基础环境准备

  • 关闭 Swap(Kubernetes 不支持):执行 sudo swapoff -a,并在 /etc/fstab 中注释 swap 行以永久生效。
  • 加载内核模块:sudo modprobe overlay 与 sudo modprobe br_netfilter。
  • 开启桥接与转发:
    sudo tee /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
    sudo sysctl --system
  • 容器运行时与 cgroup 驱动:安装 Docker 并配置 systemd 驱动(/etc/docker/daemon.json 中添加 “exec-opts”: [“native.cgroupdriver=systemd”],重启 Docker)。
  • 安装组件:在所有节点安装 kubelet、kubeadm、kubectl,并 sudo apt-mark hold 锁定版本,避免自动升级引发兼容性问题。
  • 节点互通与端口放行:确保 Master/Worker 节点间网络互通,按需放行关键端口(如 644310250 等)或使用安全组策略。

二 初始化集群与 kubectl 配置

  • 仅在 Master 节点执行初始化,并指定与所选 CNI 插件匹配的 Pod 网段(常见为 10.244.0.0/16192.168.0.0/16):
    sudo kubeadm init --pod-network-cidr=10.244.0.0/16
  • 配置 kubectl:
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 加入 Worker:使用 kubeadm init 输出中的 kubeadm join 命令在各 Worker 节点执行,完成后等待节点状态变为 Ready

三 安装网络插件 CNI

  • 选择并部署一种 CNI 插件(仅部署一种,避免冲突):
插件 适用场景 安装要点
Calico 中大规模、需要细粒度策略 kubectl apply -f https://docs.projectcalico.org/v3.26/manifests/calico.yaml;若 Pod 网段非默认,修改清单中的 CALICO_IPV4POOL_CIDR;双网卡可设置 IP_AUTODETECTION_METHOD: “interface=eth0”
Flannel 快速搭建、中小规模 使用最新稳定清单(如 v0.22.0):curl -O https://raw.githubusercontent.com/flannel-io/flannel/v0.22.0/Documentation/kube-flannel.yml && kubectl apply -f kube-flannel.yml;同二层网段可将 Backend.Type 由 vxlan 改为 host-gw 提升性能
Cilium 高性能、基于 eBPF、可替代 kube-proxy 通过 Helm 安装:helm repo add cilium https://helm.cilium.io/ && helm install cilium cilium/cilium --namespace kube-system --set kubeProxyReplacement=true(按需设置 k8sServiceHost/k8sServicePort)
  • 部署完成后确认相关 Pod 均为 Running:kubectl get pods -n kube-system | grep -E ‘calico|flannel|cilium’。

四 验证与连通性测试

  • 节点状态:kubectl get nodes(应为 Ready)。
  • 插件状态:kubectl get pods -n kube-system(确保 CNI 相关 Pod 正常)。
  • Pod 连通性:
    • 启动测试应用:kubectl run nginx --image=nginx --port=80
    • 获取 Pod IP:POD_IP=$(kubectl get pod nginx -o jsonpath=‘{.status.podIP}’)
    • 从其他 Pod 访问:kubectl run test-pod --image=busybox --rm -it – wget -qO- http://$POD_IP
  • 外部访问:为 Service 配置 NodePort/LoadBalancer/Ingress 后从集群外部访问验证。

五 常见问题与优化

  • Pod 网段一致性:kubeadm init 的 –pod-network-cidr 必须与 CNI 配置一致(如 10.244.0.0/16192.168.0.0/16),否则会导致跨节点不通。
  • 双网卡/多网卡:在 Calico 中设置 IP_AUTODETECTION_METHOD 指定主网卡(如 interface=eth0)。
  • 性能优化:同二层网络下 Flannel 可将 vxlan 切换为 host-gw;Cilium 启用 eBPF 可提升转发与策略性能。
  • 安全策略:按需启用 NetworkPolicy(Calico 或 Cilium 均支持),限制命名空间/Pod 间访问。
  • 防火墙策略:测试环境可临时关闭 ufw,生产环境应配置精确放行规则,确保 644310250 等端口与节点间通信正常。

0