温馨提示×

Ubuntu Kubernetes网络配置有哪些要点

小樊
43
2025-12-04 19:37:04
栏目: 智能运维

Ubuntu 上 Kubernetes 网络配置要点

一 基础环境与内核参数

  • 建议在所有节点完成以下基础配置,确保容器网络与网桥转发正常工作:
    • 时间同步:安装并启用 chrony,统一节点时间,避免证书/控制面异常。
    • 主机名与 /etc/hosts:为各节点设置唯一 hostname,并在 /etc/hosts 中固化解析,便于集群内稳定通信。
    • 禁用交换分区:执行 swapoff -a 并注释 /etc/fstab 中的 swap 条目,或在 systemd 层面禁用与屏蔽,避免 kubelet 异常。
    • 防火墙:在测试/实验环境可使用 ufw disable 简化网络连通性;生产环境建议改为精细化放行策略(见下文端口与策略)。
    • 内核模块与 sysctl:
      • 加载模块:创建 /etc/modules-load.d/k8s.conf,加入 overlay、br_netfilter;执行 modprobe 使其生效。
      • 开启桥接流量到 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 使配置生效。

二 网络模型与 CNI 插件

  • 理解并遵循 Kubernetes 的 Pod 网络模型
    • 每个 Pod 拥有独立 IP(IP-per-Pod),同一 Pod 内多容器共享网络命名空间,可通过 localhost 互通。
    • 集群网络应“扁平化”:任意 Pod ↔ 任意 Pod节点 ↔ 任意 Pod 之间可直接通信,通常不应依赖 NAT;同一 Pod 内容器通过 localhost 通信。
  • 选择并部署 CNI 网络插件(二选一或按场景选择):
    • Calico:基于 BGPIPIP,支持 NetworkPolicy,适合需要细粒度网络策略与稳定生产环境的集群。
    • Flannel:基于 VXLANHost-GW,部署简单,适合测试/小规模环境;节点规模较大时 VXLAN 可能成为性能瓶颈。
    • 安装示例(择一执行):
      • Calico:
        • kubectl apply -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
        • kubectl apply -f https://docs.projectcalico.org/manifests/custom-resources.yaml
      • Flannel:
        • kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    • 初始化控制面时,需与所选插件的 Pod CIDR 保持一致(例如 Flannel 常用 10.244.0.0/16)。

三 Service 与对外暴露

  • Service 抽象用于解耦后端 Pod 的动态变化,提供稳定的访问入口与负载均衡:
    • ClusterIP:集群内部访问入口,默认类型。
    • NodePort:在每个节点开放静态端口,将流量转发到后端 Pod,便于从集群外部访问。
    • LoadBalancer:对接云厂商负载均衡器,对外暴露服务。
  • Ingress:基于 HTTP/HTTPS 的七层路由,将域名/路径映射到后端 Service,通常与 Ingress Controller 配合使用。
  • 示例(NodePort):
    • apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 9376 type: NodePort

四 网络策略与安全

  • 使用 NetworkPolicy 控制 Pod 间Pod 对外部的通信,遵循“默认拒绝、按需放行”的最小权限原则:
    • 示例(仅允许来自带有 app=allowed-client 的 Pod 的入站流量,并允许到 10.0.0.0/8 的出站流量):
      • apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: my-network-policy spec: podSelector: matchLabels: app: my-app policyTypes:
        • Ingress
        • Egress
        • ingress:
          • from:
            • podSelector: matchLabels: app: allowed-client
        • egress:
          • to:
            • ipBlock: cidr: 10.0.0.0/8

五 端口与连通性验证

  • 端口与防火墙要点(示例为 ufw 场景,生产请按需精细化放行):
    • 控制面端口:放行 6443/TCP(kube-apiserver);节点间/组件通信按需放行 10250/TCP(kubelet) 等。
    • 示例:sudo ufw allow 6443/tcp
  • 快速连通性验证清单:
    • 查看节点与系统组件状态:kubectl get nodes;kubectl get pods -A
    • 部署测试 Pod 并验证跨 Pod 通信:kubectl run nginx --image=nginx --port=80;kubectl get pods
    • 验证 Service 与访问路径:kubectl get services;创建 NodePort/Ingress 后从外部访问验证。

0