Ubuntu Kubernetes网络配置技巧

以下是Ubuntu上配置Kubernetes网络的关键技巧:

一、基础网络配置

  • 系统参数优化
    修改/etc/sysctl.d/kubernetes.conf,启用网桥转发并关闭IPv6:

    net.bridge.bridge-nf-call-iptables=1
    net.ipv4.ip_forward=1
    net.ipv6.conf.all.disable_ipv6=1
    

    执行sysctl -p使配置生效。

  • 静态IP配置
    通过/etc/netplan/配置网卡静态IP,确保节点间网络可达,例如:

    network:
      version: 2
      ethernets:
        ens33:
          addresses: [192.168.1.100/24]
          gateway4: 192.168.1.1
          nameservers:
            addresses: [8.8.8.8]
    

    执行netplan apply生效。

二、网络插件选择与部署

  • 推荐插件

    • Calico:支持网络策略,适合安全要求高的场景。
    • Flannel:轻量级,适合简单集群。
    • Cilium:高性能,支持eBPF加速。
  • 安装插件
    以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
    

三、安全策略配置

  • 防火墙规则
    使用UFW限制仅开放必要端口(如API Server的6443、节点间通信的10250等),关闭默认的NodePort端口范围(30000-32767)或限制访问来源。
    示例:

    sudo ufw allow from 10.0.0.0/24 to any port 6443 proto tcp  # 仅允许集群内访问API Server
    sudo ufw deny in on ens33 from any to any port 30000:32767  # 禁止外部访问NodePort
    
  • 网络策略(NetworkPolicy)
    通过YAML定义Pod间通信规则,例如限制特定命名空间的Pod只能访问数据库服务:

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: db-access
    spec:
      podSelector:
        matchLabels:
          app: database
      ingress:
      - from:
        - namespaceSelector:
            matchLabels:
              app: frontend
        ports:
        - protocol: TCP
          port: 3306
    

    应用策略:kubectl apply -f network-policy.yaml

四、性能优化

  • 调整MTU
    根据网络环境设置Pod的MTU(如1500或9000),避免分片。在Calico中可通过注解配置:

    metadata:
      annotations:
        cni.projectcalico.org/mtu: "1500"
    
  • 启用IPVS负载均衡
    在Kubernetes中配置IPVS模式提升Service转发效率,编辑/etc/kubernetes/manifests/kube-proxy.yaml,设置mode: ipvs

五、验证与监控

  • 网络连通性测试

    • 使用kubectl exec进入Pod,通过pingcurl测试Pod间通信。
    • 检查节点间CNI网络插件Pod状态:kubectl get pods -n kube-system
  • 监控工具集成
    部署Prometheus+Grafana监控网络流量、延迟等指标,重点关注Pod间通信延迟和丢包率。