chrony并启动:systemctl start chronyd && systemctl enable chronyd)。/etc/sysconfig/network-scripts/ifcfg-ens33),修改以下内容:BOOTPROTO=static
ONBOOT=yes
IPADDR=<节点静态IP> # 如192.168.1.100
NETMASK=255.255.255.0
GATEWAY=<网关IP> # 如192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
保存后重启网络服务:systemctl restart network。hostnamectl set-hostname <主机名>设置主机名(如Master节点设为k8s-master);编辑/etc/hosts文件,添加节点IP与主机名映射:192.168.1.100 k8s-master
192.168.1.101 k8s-node1
192.168.1.102 k8s-node2
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
cat > /etc/yum.repos.d/docker-ce.repo << EOF
[docker-ce]
name=Docker CE
baseurl=https://download.docker.com/linux/centos/docker-ce/stable
enabled=1
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
EOF
yum -y install docker-ce docker-ce-cli containerd.io
systemctl enable docker && systemctl start docker
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet
初始化集群(指定Pod网络CIDR,需与后续网络插件配置一致):
kubeadm init --apiserver-advertise-address=<Master静态IP> \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.28.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
初始化完成后,会输出kubeadm join命令(用于Node节点加入集群),请保存备用。
配置kubectl:
将Master节点的kubeconfig文件复制到当前用户目录:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
K8s依赖CNI插件实现Pod网络通信,常用插件包括Flannel(简单易用)、Calico(支持网络策略)等。
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kube-system命名空间下的Flannel Pod是否全部Running:kubectl get pods -n kube-system -l k8s-app=flannel
wget https://docs.projectcalico.org/manifests/calico.yaml
kubectl apply -f calico.yaml
--pod-network-cidr=10.244.0.0/16,需编辑Calico配置文件(calico.yaml),找到CALICO_IPV4POOL_CIDR字段,修改为10.244.0.0/16,再重新应用。在每台Node节点上运行Master节点初始化时输出的kubeadm join命令,例如:
kubeadm join 192.168.1.100:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef
等待Node节点状态变为Ready(通过kubectl get nodes查看)。
kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
EOF
kubectl exec -it test-pod -- /bin/sh
ping <目标Pod/IP>
若能ping通,说明网络配置成功。若使用Calico插件,可通过NetworkPolicy限制Pod间通信。例如,允许app=db的Pod仅接受来自192.168.0.0/24网段的流量:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-db-from-specific-cidr
namespace: default
spec:
podSelector:
matchLabels:
app: db
policyTypes:
- Ingress
ingress:
- from:
- ipBlock:
cidr: 192.168.0.0/24
ports:
- protocol: TCP
port: 3306
应用策略:kubectl apply -f network-policy.yaml。
以上步骤覆盖了CentOS环境下K8s网络配置的核心流程,包括基础环境准备、CNI插件安装与验证。根据实际需求选择合适的插件(如Flannel适合简单场景,Calico适合需要网络策略的场景),并确保所有节点配置一致,即可实现K8s集群的网络通信。