Kubernetes网络配置指南(以CentOS为例)
Kubernetes网络配置的核心是通过CNI(Container Network Interface)插件实现Pod间通信、跨节点网络打通及安全策略控制。以下是详细配置步骤:
在配置网络前,需完成以下基础环境设置,确保集群节点间网络互通:
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
/etc/sysconfig/network-scripts/ifcfg-ens33),设置静态IP、子网掩码、网关和DNS,确保各节点IP在同一网段。DEVICE=ens33
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
重启网络服务使配置生效:systemctl restart network。k8s-master、k8s-node1),并在/etc/hosts中添加节点IP与主机名映射,确保节点间可通过主机名访问。hostnamectl set-hostname k8s-master # Master节点
echo "192.168.1.100 k8s-master" >> /etc/hosts # 所有节点均需添加
systemctl start chronyd && systemctl enable chronyd
使用kubeadm工具快速搭建Kubernetes集群(以CentOS为例):
yum install -y kubeadm kubelet kubectl --disable-gpg-check
systemctl enable kubelet && systemctl start kubelet
kubeadm init命令初始化集群,必须指定Pod网络CIDR(需与后续网络插件网段一致,如10.244.0.0/16)。kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.1.100
初始化完成后,按提示配置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网络,以下是主流插件的安装步骤:
Calico是基于BGP的三层网络插件,适合中大规模生产环境,支持精细的网络策略控制(如限制Pod间通信、访问外部网络)。
192.168.0.0/16,需根据实际情况修改)。curl -O https://docs.projectcalico.org/v3.26/manifests/calico.yaml
# 若Pod网段为10.244.0.0/16,修改calico.yaml中的CALICO_IPV4POOL_CIDR字段
sed -i 's/CALICO_IPV4POOL_CIDR: "192.168.0.0\/16"/CALICO_IPV4POOL_CIDR: "10.244.0.0\/16"/g' calico.yaml
kubectl apply -f calico.yaml
Running。kubectl get pods -n calico-system
Flannel是Overlay网络插件,配置简单、资源消耗低,适合中小规模集群或开发测试环境(支持VXLAN、Host-GW等后端)。
curl -O https://raw.githubusercontent.com/flannel-io/flannel/v0.22.0/Documentation/kube-flannel.yml
kube-flannel.yml,找到net-conf.json部分,将Backend.Type改为host-gw(需集群节点在同一局域网)。sed -i 's/"Type": "vxlan"/"Type": "host-gw"/g' kube-flannel.yml
kubectl apply -f kube-flannel.yml
Running。kubectl get pods -n kube-flannel
Cilium基于eBPF技术实现网络转发与策略控制,性能远超传统插件,适合大规模集群、高频交易或大流量电商场景(需内核版本≥5.4)。
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
helm repo add cilium https://helm.cilium.io
helm repo update
helm install cilium cilium/cilium --version 1.14.0 \
--namespace kube-system \
--set k8sServiceHost=192.168.1.100 \ # 替换为Kubernetes API Server IP
--set k8sServicePort=6443 # API Server端口(默认6443)
Running,并确认eBPF功能已启用。kubectl get pods -n kube-system -l k8s-app=cilium
kubectl exec -n kube-system cilium-xxxx -- cilium status
kubectl exec进入Pod,使用ping或curl验证与其他Pod的连通性。kubectl run nginx --image=nginx --port=80 # 创建Nginx Pod
kubectl expose pod nginx --type=ClusterIP --port=80 # 暴露为ClusterIP Service
kubectl exec -it nginx -- /bin/sh # 进入Pod
ping <其他Pod的IP> # 测试连通性
calico-node、Flannel的flannel-node)均为Running。kubectl get pods -n kube-system
NetworkPolicy限制Pod间通信(如仅允许同一命名空间的Pod访问)。apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-same-namespace
spec:
podSelector: {} # 选择所有Pod
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector: {} # 仅允许同一命名空间的Pod访问
egress:
- to:
- podSelector: {} # 仅允许访问同一命名空间的Pod
应用策略:kubectl apply -f network-policy.yaml。以上步骤覆盖了Kubernetes网络配置的核心流程,根据集群规模(中小规模/大规模)、性能需求(轻量/高性能)及安全要求(基础/严格),选择合适的网络插件即可实现稳定的网络环境。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。