温馨提示×

centos下k8s网络配置怎样实现

小樊
44
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 

七、常见问题排查

  • Pod无法通信:检查网络插件Pod是否Running(kubectl get pods -n kube-system);确认--pod-network-cidr与插件配置一致。
  • 节点无法加入集群:检查kubeadm join命令是否过期(有效期24小时);确认节点网络可达。

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

0