centos与k8s网络配置
导读:CentOS 上 Kubernetes 网络配置实操指南 一 基础网络与系统准备 主机名与解析 设置主机名:hostnamectl set-hostname k8s-master(工作节点设为如 k8s-node1) 配置 /etc/h...
CentOS 上 Kubernetes 网络配置实操指南
一 基础网络与系统准备
- 主机名与解析
- 设置主机名:
hostnamectl set-hostname k8s-master(工作节点设为如 k8s-node1) - 配置 /etc/hosts(示例):
192.168.1.100 k8s-master 192.168.1.101 k8s-node1 192.168.1.102 k8s-node2
- 设置主机名:
- 静态 IP(以网卡 ens33 为例)
- 编辑:
/etc/sysconfig/network-scripts/ifcfg-ens33DEVICE=ens33 BOOTPROTO=static IPADDR=192.168.1.100 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=8.8.8.8 DNS2=114.114.114.114 ONBOOT=yes - 使生效:
systemctl restart network
- 编辑:
- 基础组件与内核参数
- 关闭交换分区:
swapoff -a & & sed -i '/swap/s/^/#/' /etc/fstab - 防火墙(测试环境常用做法):
systemctl stop firewalld & & systemctl disable firewalld - SELinux(测试环境常用做法):
setenforce 0 & & sed -i 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config - 内核转发:
echo 'net.ipv4.ip_forward=1' > > /etc/sysctl.d/k8s.conf & & sysctl --system - 时间同步:
yum install -y ntpdate & & ntpdate time.windows.com
- 关闭交换分区:
- 容器运行时与 kubelet
- 安装 containerd(推荐):
yum install -y containerd.io - 生成默认配置并启用 SystemdCgroup:
containerd config default | tee /etc/containerd/config.toml sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml systemctl enable --now containerd - 安装 kubeadm/kubelet/kubectl(版本保持一致):
yum install -y kubeadm kubelet kubectl - 启动 kubelet:
systemctl enable --now kubelet
- 安装 containerd(推荐):
二 初始化集群与网络插件
- 初始化控制平面(示例)
- 使用 kubeadm 初始化(注意与所选网络插件的 Pod CIDR 保持一致):
kubeadm init \ --apiserver-advertise-address=192.168.1.100 \ --pod-network-cidr=10.244.0.0/16 \ --service-cidr=10.96.0.0/12 - 配置 kubectl:
mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config
- 使用 kubeadm 初始化(注意与所选网络插件的 Pod CIDR 保持一致):
- 安装网络插件(二选一,Pod CIDR 需与 init 参数一致)
- Flannel(覆盖网络,部署简单)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml - Calico(支持网络策略,生产常用)
curl -O https://docs.projectcalico.org/manifests/calico.yaml kubectl apply -f calico.yaml
- Flannel(覆盖网络,部署简单)
- 节点加入
- 在 Master 上获取加入命令:
kubeadm token create --print-join-command - 在 Worker 上执行输出的
kubeadm join ...命令
- 在 Master 上获取加入命令:
三 验证与连通性测试
- 集群状态
kubectl get nodes kubectl get pods -n kube-system - Pod 网络连通性
kubectl run nginx --image=nginx --port=80 --dry-run=client -o yaml | kubectl apply -f - POD_IP=$(kubectl get pod nginx -o jsonpath='{ .status.podIP} ') kubectl run test-pod --image=busybox --rm -it -- wget -qO- http://$POD_IP - Service 与外部访问
kubectl expose pod nginx --port=80 --type=NodePort kubectl get svc nginx # 通过任一节点 IP:NodePort 访问 - 常见问题快速排查
- 节点 NotReady:检查网络插件 Pod 是否 Running、Pod CIDR 是否与 kubeadm 一致
- Pod 之间不通:确认 Flannel/Calico 已就绪、节点间 UDP/TCP 8472(Flannel VXLAN)或 IPIP 未被阻断
- DNS 解析异常:检查 kube-dns/coredns 是否就绪、是否存在 NetworkPolicy 拦截
- 镜像拉取失败:配置国内镜像源或使用企业私有仓库
四 生产环境注意事项
- 安全与合规
- 不建议长期关闭防火墙与 SELinux,生产环境应基于最小暴露面配置规则(如仅放行 6443/10250/8472/4789 等必要端口),并将 SELinux 设为 permissive 或按策略配置
- 网络模型选择
- 同机房二层网络优先选择 Calico BGP 或 Cilium BPF 提升性能;跨机房/公有云优先 Flannel VXLAN 或 Calico IPIP
- 网络策略
- 启用 NetworkPolicy 实现命名空间与服务间隔离,优先使用 Calico 或 Cilium 提供的策略引擎
- 高可用与升级
- 控制平面高可用(多 Master + VIP/Keepalived),网络插件与 Kubernetes 版本保持兼容,变更前备份 etcd 与关键清单文件
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos与k8s网络配置
本文地址: https://pptw.com/jishu/752155.html
