阅读量:17
Linux系统中K8S网络配置指南
Kubernetes(K8S)的网络配置是其核心功能之一,主要依赖CNI(Container Network Interface)插件实现Pod间通信、Service暴露及网络策略控制。以下是Linux环境下K8S网络配置的关键步骤及注意事项:
一、前置准备:基础环境配置
在配置网络插件前,需完成以下基础设置,确保集群节点间网络互通:
- 关闭防火墙与SELinux:
临时关闭防火墙:systemctl stop firewalld;永久禁用:systemctl disable firewalld。
临时禁用SELinux:setenforce 0;永久禁用:编辑/etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled。 - 关闭Swap分区:
执行swapoff -a关闭当前Swap;编辑/etc/fstab,注释掉Swap相关行(如/dev/mapper/centos-swap swap),防止重启后生效。 - 配置静态IP:
编辑网络接口配置文件(如/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。 - 配置主机名与hosts文件:
使用hostnamectl set-hostname <节点名>(如k8s-master、k8s-node1)设置主机名;编辑/etc/hosts,添加集群所有节点的IP与主机名映射(如192.168.1.100 k8s-master、192.168.1.101 k8s-node1),确保节点间可通过主机名访问。 - 时间同步:
安装并启动Chronyd服务:yum install -y chronyd && systemctl start chronyd && systemctl enable chronyd,避免节点时钟不一致导致集群问题。
二、安装Kubernetes核心组件
网络配置前需部署Kubernetes基础组件(kubeadm、kubelet、kubectl):
- 添加Kubernetes镜像源:
创建/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。
三、部署Kubernetes集群
- 初始化Master节点:
执行kubeadm init --apiserver-advertise-address(如--pod-network-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 - 加入Worker节点:
在Master节点上执行kubeadm init后会生成kubeadm join命令(包含token和CA证书哈希),在Worker节点上执行该命令即可加入集群。
四、配置CNI网络插件
K8S不内置网络实现,需通过CNI插件管理Pod网络。常用插件及配置如下:
1. Flannel(简单易用,适合入门)
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)。 - 可选配置:
若需自定义网络(如修改Pod CIDR),可编辑kube-flannel.yml中的--kube-subnet-mgr和--ip-masq参数,或通过ConfigMap调整。
2. Calico(高性能,支持网络策略)
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封装)。
3. Cilium(云原生,支持eBPF加速)
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状态。 - 测试Pod间通信:
部署一个测试Pod(如nginx),进入Pod内ping其他节点或Pod的IP:kubectl run test-pod --image=nginx --rm -it -- /bin/sh # 在Pod内执行 pingping - 验证Service暴露:
创建一个Service(如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: 80kubectl apply -f network-policy.yaml。
以上步骤覆盖了Linux环境下K8S网络配置的核心流程,实际部署时需根据集群规模、性能需求及安全要求选择合适的插件,并调整配置参数。