温馨提示×

CentOS上K8S部署的网络配置技巧

小樊
65
2025-09-22 11:14:04
栏目: 智能运维

CentOS上K8S部署网络配置技巧

1. 基础网络环境准备

在配置K8S网络前,需确保节点网络环境稳定,避免因基础设置问题导致网络故障:

  • 静态IP配置:为每个节点(Master/Worker)配置静态IP,避免DHCP动态分配导致的IP变动。编辑网络接口配置文件(如/etc/sysconfig/network-scripts/ifcfg-ens33),设置BOOTPROTO=staticONBOOT=yes,并指定IPADDRNETMASKGATEWAYDNS1/DNS2(如DNS1=8.8.8.8DNS2=114.114.114.114),保存后重启网络服务(systemctl restart network)。
  • 主机名与hosts解析:通过hostnamectl set-hostname <hostname>为每个节点设置唯一主机名(如k8s-masterk8s-node1);编辑/etc/hosts文件,添加集群节点IP与主机名的映射(如192.168.1.100 k8s-master192.168.1.101 k8s-node1),确保节点间可通过主机名互相解析。
  • 关闭防火墙与SELinux:测试环境中,可通过systemctl stop firewalld && systemctl disable firewalld关闭防火墙;通过setenforce 0临时禁用SELinux,sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config永久禁用,避免其限制网络通信。
  • 禁用Swap分区:K8S要求禁用Swap分区,通过swapoff -a临时关闭,编辑/etc/fstab文件注释掉Swap行(如# /dev/mapper/centos-swap swap)永久禁用。
  • 配置内核参数:编辑/etc/sysctl.d/k8s.conf文件,添加net.bridge.bridge-nf-call-ip6tables=1net.bridge.bridge-nf-call-iptables=1net.ipv4.ip_forward=1,执行sysctl --system使配置生效,确保K8S网络插件(如Flannel、Calico)正常工作。

2. CNI网络插件选择与配置

CNI(容器网络接口)是K8S网络的核心组件,负责Pod间通信、IP分配及网络策略实现。需根据集群规模、性能需求选择合适的插件:

  • Flannel:适合小型/中型集群,部署简单,支持VXLAN(默认,封装效率高)、host-gw(无封装,性能更好但需节点在同一二层网络)后端。通过kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml安装,安装后检查kube-system命名空间下的flannel Pod状态(kubectl get pods -n kube-system -l k8s-app=flannel)。
  • Calico:适合中大型生产环境,支持BGP(纯三层路由,性能接近物理网络)和VXLAN模式,原生支持K8s NetworkPolicy,可实现细粒度的Pod间安全隔离(如基于标签的访问控制)。通过kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml安装,支持与公有云/私有云混合部署。
  • Cilium:基于eBPF技术,适合高性能、大规模集群,提供深度包检测、API层策略控制及实时流量监控(如Hubble平台)。通过kubectl apply -f https://docs.cilium.io/en/stable/gettingstarted/k8s-install-default.yaml安装,适合对网络性能和安全有极高要求的场景。

3. 网络策略配置

K8S NetworkPolicy用于控制Pod间、Pod与外部网络的通信,是保障集群网络安全的关键手段:

  • 基础语法结构:NetworkPolicy需指定podSelector(匹配目标Pod)、policyTypes(Ingress/Egress/Both,定义入站/出站规则),并通过ingress(入站规则)、egress(出站规则)定义允许的流量(如来源IP、端口、协议)。
  • 示例1:允许同命名空间特定标签Pod通信
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-same-namespace
    spec:
      podSelector:
        matchLabels:
          app: myapp  # 匹配目标Pod标签
      policyTypes:
      - Ingress
      - Egress
      ingress:
      - from:
        - podSelector:
            matchLabels:
              app: myapp  # 允许同标签Pod访问
      egress:
      - to:
        - ipBlock:
            cidr: 10.0.0.0/8  # 允许访问外部10.0.0.0/8网段
    
  • 示例2:限制Pod仅能访问特定外部IP
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: restrict-external-access
    spec:
      podSelector:
        matchLabels:
          app: db  # 匹配数据库Pod
      policyTypes:
      - Egress
      egress:
      - to:
        - ipBlock:
            cidr: 172.16.0.10/32  # 仅允许访问外部172.16.0.10
        ports:
        - protocol: TCP
          port: 3306  # 仅允许访问MySQL端口
    
    应用策略:kubectl apply -f network-policy.yaml

4. 高级网络配置技巧

  • 使用eBPF技术优化性能:Cilium基于eBPF实现网络转发,避免了传统内核网络栈的开销,适合高吞吐、低延迟场景(如实时数据处理)。eBPF还支持实时流量监控(如Hubble),可查看Pod间通信拓扑、检测异常流量。
  • 网络插件动态配置:部分插件支持动态调整配置(如Calico的BGP路由配置),无需重启集群即可更新网络策略,提升运维效率。
  • 集成服务网格:结合Istio或Linkerd等服务网格,可实现更细粒度的流量管理(如金丝雀发布、故障注入)、加密通信(mTLS)和服务观测(如指标、日志、追踪),增强集群的可观测性与安全性。
  • 日志审计与监控:启用CNI插件的日志功能(如Flannel的--v=2参数),结合Prometheus+Grafana监控网络性能(如Pod间延迟、流量吞吐量),及时发现并解决网络问题。

以上技巧覆盖了CentOS上K8S部署的网络配置全流程,从基础环境到高级优化,可根据集群规模和业务需求灵活选择。

0