Linux系统中K8S网络配置指南
Kubernetes(K8S)的网络配置是其核心功能之一,主要依赖CNI(Container Network Interface)插件实现Pod间通信、Service暴露及网络策略控制。以下是Linux环境下K8S网络配置的关键步骤及注意事项:
在配置网络插件前,需完成以下基础设置,确保集群节点间网络互通:
systemctl stop firewalld;永久禁用:systemctl disable firewalld。setenforce 0;永久禁用:编辑/etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled。swapoff -a关闭当前Swap;编辑/etc/fstab,注释掉Swap相关行(如/dev/mapper/centos-swap swap),防止重启后生效。/etc/sysconfig/network-scripts/ifcfg-ens33),设置BOOTPROTO=static、ONBOOT=yes,并指定IPADDR、NETMASK、GATEWAY、DNS1/DNS2(如IPADDR=192.168.1.100、GATEWAY=192.168.1.1、DNS1=8.8.8.8)。修改后重启网络服务:systemctl restart network。hostnamectl set-hostname <节点名>(如k8s-master、k8s-node1)设置主机名;编辑/etc/hosts,添加集群所有节点的IP与主机名映射(如192.168.1.100 k8s-master、192.168.1.101 k8s-node1),确保节点间可通过主机名访问。yum install -y chronyd && systemctl start chronyd && systemctl enable chronyd,避免节点时钟不一致导致集群问题。网络配置前需部署Kubernetes基础组件(kubeadm、kubelet、kubectl):
/etc/yum.repos.d/kubernetes.repo文件,内容如下:[kubernetes]
name=Kubernetes
baseurl=https://mirrors.ustc.edu.cn/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
yum install -y kubelet kubeadm kubectl安装;设置kubelet开机启动:systemctl enable kubelet。kubeadm init --apiserver-advertise-address <Master-IP> --pod-network-cidr <Pod网络CIDR>(如--pod-network-cidr=10.244.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
kubeadm init后会生成kubeadm join命令(包含token和CA证书哈希),在Worker节点上执行该命令即可加入集群。K8S不内置网络实现,需通过CNI插件管理Pod网络。常用插件及配置如下:
Flannel支持多种后端(UDP、VXLAN、Host-GW),其中VXLAN是生产推荐模式(性能较好)。
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml,等待Pod全部启动(kubectl get pods -n kube-system显示Running)。kube-flannel.yml中的--kube-subnet-mgr和--ip-masq参数,或通过ConfigMap调整。Calico采用纯三层转发(不依赖overlay),支持BGP路由和细粒度网络策略,适合大规模生产环境。
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml,等待Pod启动完成。calico.yaml中的CALICO_IPV4POOL_CIDR(如10.244.0.0/16)和CALICO_IPV4POOL_IPIP(设为Never,避免IP-in-IP封装)。Cilium基于eBPF技术,提供高性能网络与安全策略,适合云原生场景(如Knative、Istio)。
kubectl apply -f https://docs.cilium.io/en/stable/gettingstarted/k8s-install.yaml,按提示完成配置。kubectl get pods -n kube-system,确认网络插件Pod(如Flannel的kube-flannel-ds-*、Calico的calico-node-*)均为Running状态。nginx),进入Pod内ping其他节点或Pod的IP:kubectl run test-pod --image=nginx --rm -it -- /bin/sh
# 在Pod内执行
ping <Master-IP>
ping <Worker-Node-IP>
ClusterIP或NodePort),通过集群内或外部访问Service的IP/端口,确认服务可达。K8S的NetworkPolicy资源可实现Pod间的访问控制(如允许/拒绝特定命名空间、标签的Pod访问)。
NetworkPolicy,仅允许default命名空间中带有app=db标签的Pod访问default命名空间中带有app=web标签的Pod的TCP 80端口:apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-db-to-web
namespace: default
spec:
podSelector:
matchLabels:
app: web
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: db
ports:
- protocol: TCP
port: 80
应用策略:kubectl apply -f network-policy.yaml。以上步骤覆盖了Linux环境下K8S网络配置的核心流程,实际部署时需根据集群规模、性能需求及安全要求选择合适的插件,并调整配置参数。