linux

Linux中K8S网络如何配置

小樊
39
2025-10-12 00:47:34
栏目: 智能运维

Linux环境下K8S网络配置指南
Kubernetes(K8S)的网络配置是其核心功能之一,需完成基础环境准备CNI网络插件部署网络策略配置三大步骤,确保集群内Pod、节点及外部服务的互联互通。

一、基础环境准备

在配置K8S网络前,需完成以下基础设置,避免网络冲突或组件无法正常运行:

  1. 关闭防火墙与SELinux
    防火墙(如firewalld)和SELinux会拦截网络流量,需临时关闭并禁用开机启动:
    systemctl stop firewalld && systemctl disable firewalld  # 关闭防火墙
    setenforce 0                                           # 临时禁用SELinux
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config  # 永久禁用SELinux
    
  2. 禁用Swap分区
    K8S要求节点禁用Swap,否则会导致Pod调度异常:
    swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab  # 临时关闭Swap并注释/etc/fstab中的Swap配置
    
  3. 配置静态IP与主机名解析
    • 编辑网络接口配置文件(如/etc/sysconfig/network-scripts/ifcfg-ens33),设置静态IP、子网掩码、网关及DNS:
      TYPE=Ethernet
      BOOTPROTO=static
      ONBOOT=yes
      IPADDR=192.168.1.100  # 节点静态IP
      NETMASK=255.255.255.0
      GATEWAY=192.168.1.1
      DNS1=8.8.8.8
      DNS2=114.114.114.114
      
    • 配置主机名(如k8s-masterk8s-node1)并通过/etc/hosts文件实现节点间域名解析:
      hostnamectl set-hostname k8s-master  # 设置主机名
      echo "192.168.1.100 k8s-master\n192.168.1.101 k8s-node1" >> /etc/hosts  # 添加节点解析
      
  4. 时间同步
    节点时间不一致会导致证书验证失败或调度异常,需安装chrony并开启同步:
    yum install -y chrony && systemctl enable chronyd && systemctl start chronyd
    

二、CNI网络插件部署

CNI(Container Network Interface)是K8S管理Pod网络的插件标准,常用插件包括Flannel(轻量Overlay)、Calico(三层路由+网络策略)、Cilium(eBPF高性能)。以下是各插件的配置步骤:

1. Flannel(适合中小规模集群/开发测试)

Flannel通过Overlay网络(默认VXLAN)实现Pod跨节点通信,配置简单但性能较低:

2. Calico(适合中大规模集群/生产环境)

Calico基于BGP协议实现三层路由,支持精细网络策略(如Pod间访问控制),适合对安全性要求高的场景:

3. Cilium(适合大规模集群/高性能场景)

Cilium基于eBPF技术,实现高性能网络转发(如100Gbps+)和深度安全策略(如L7层流量控制),适合高频交易、大流量电商等场景:

三、验证网络配置

部署插件后,需通过以下步骤验证网络是否正常:

  1. 检查插件组件状态
    查看对应命名空间下的Pod是否均为Running状态:
    kubectl get pods -n kube-system | grep -E 'flannel|calico|cilium'  # 根据插件类型选择
    
  2. 测试Pod跨节点通信
    • 创建测试Pod(如Nginx):
      kubectl run nginx --image=nginx --port=80 --dry-run=client -o yaml | kubectl apply -f -
      
    • 获取测试Pod的IP地址(如10.244.1.2):
      POD_IP=$(kubectl get pod nginx -o jsonpath='{.status.podIP}')
      
    • 在其他节点创建临时Pod(如BusyBox),通过wget访问测试Pod:
      kubectl run test-pod --image=busybox --rm -it -- wget -qO- http://$POD_IP
      
      若返回Nginx欢迎页面,则说明跨节点通信正常。

四、配置网络策略(可选,增强安全性)

K8S支持通过NetworkPolicy资源定义Pod间的访问规则(如仅允许特定命名空间的Pod访问数据库),以下是一个示例:

通过以上步骤,可完成Linux环境下K8S网络的配置,确保集群具备稳定的Pod通信能力。需根据实际场景选择合适的插件(如开发测试选Flannel,生产环境选Calico/Cilium),并通过网络策略强化安全性。

0
看了该问题的人还看了