centos

centos下k8s网络配置怎样实现

小樊
50
2025-08-31 01:46:16
栏目: 智能运维

CentOS下Kubernetes网络配置实现指南

一、前置准备

在配置Kubernetes网络前,需完成以下基础环境设置,确保集群节点间通信正常:

  1. 关闭防火墙与SELinux
    防火墙和SELinux可能拦截网络流量,测试环境可临时关闭:
    systemctl stop firewalld && systemctl disable firewalld  # 关闭防火墙
    setenforce 0                                           # 临时关闭SELinux
    sed -i 's/enforcing/disabled/' /etc/selinux/config     # 永久关闭SELinux
    
  2. 禁用Swap分区
    Kubernetes要求禁用Swap,否则Pod网络可能异常:
    swapoff -a                                             # 临时禁用
    sed -i '/swap/s//#/' /etc/fstab                        # 永久禁用
    
  3. 配置静态IP
    为每个节点(Master/Node)配置静态IP,编辑/etc/sysconfig/network-scripts/ifcfg-ens33(网卡名以实际为准):
    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             # DNS
    
    重启网络服务生效:systemctl restart network
  4. 时间同步
    安装chrony同步时间,避免因时间差导致集群问题:
    yum install chrony -y
    systemctl enable chronyd --now
    

二、安装Kubernetes基础组件

确保已安装kubeletkubeadmkubectl(版本需一致):

yum install -y kubelet kubeadm kubectl
systemctl enable kubelet --now

三、初始化Kubernetes集群(指定Pod CIDR)

使用kubeadm初始化集群时,需指定Pod网络的CIDR范围(后续网络插件需匹配此范围):

kubeadm init --pod-network-cidr=10.244.0.0/16  # Flannel默认CIDR,若用Calico可改为192.168.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

四、选择并部署网络插件

Kubernetes需通过CNI插件实现Pod网络,常见插件及部署步骤如下:

1. Flannel(简单易用,适合基础场景)

Flannel通过overlay网络实现Pod通信,不支持网络策略:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

验证插件状态:

kubectl get pods -n kube-system  # 查看Flannel Pod是否Running
2. Calico(支持网络策略,安全性高)

Calico提供细粒度的网络策略控制,适合生产环境:

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

验证插件状态:

kubectl get pods -n kube-system | grep calico  # 查看Calico Pod是否Running
3. Weave Net(支持加密,多云环境)

Weave Net部署简单,支持自动加密:

kubectl apply -f https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 tr -d '\n')

五、验证网络连通性

  1. 部署测试Pod
    创建两个Nginx Pod用于测试:
    kubectl run nginx1 --image=nginx --port=80
    kubectl run nginx2 --image=nginx --port=80
    kubectl get pods -o wide  # 查看Pod IP
    
  2. 测试Pod间通信
    进入nginx1 Pod,ping nginx2的IP:
    kubectl exec -it nginx1 -- /bin/sh
    ping <nginx2的IP>
    
    若能ping通,说明Pod网络配置成功。

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

若使用Calico,可通过NetworkPolicy限制Pod间流量,例如:仅允许default命名空间内nginx Pod访问redis Pod:

apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
  name: allow-nginx-to-redis
  namespace: default
spec:
  selector: app == 'redis'
  ingress:
  - from:
    - namespaceSelector: name == 'default'
      podSelector: app == 'nginx'
    ports:
    - protocol: TCP
      port: 6379

应用策略:

kubectl apply -f network-policy.yaml

七、常见问题排查

通过以上步骤,可在CentOS上完成Kubernetes网络配置,实现Pod间通信及可选的安全策略控制。根据实际需求选择合适的网络插件,并参考官方文档优化配置。

0
看了该问题的人还看了