Kubernetes 1.28集群Flannel网络配置避坑指南:解决ImagePullBackOff与Harbor私有仓库配置

张开发
2026/5/19 20:17:30 15 分钟阅读
Kubernetes 1.28集群Flannel网络配置避坑指南:解决ImagePullBackOff与Harbor私有仓库配置
Kubernetes 1.28集群Flannel网络配置实战从ImagePullBackOff到Harbor私有仓库的完整解决方案当你在国内环境部署Kubernetes 1.28集群时Flannel网络插件的配置往往会遇到镜像拉取失败的问题。这不仅仅是简单的网络连接问题更涉及到容器运行时变更、镜像仓库配置等一系列技术细节。本文将带你深入剖析问题本质并提供两种切实可行的解决方案。1. 问题诊断与核心原因分析使用kubectl describe pod命令查看Flannel Pod状态时最常见的错误就是ImagePullBackOff。这通常表现为Pod始终处于Pending状态事件日志中明确提示无法拉取flannel/flannel或flannel/flannel-cni-plugin镜像。根本原因有三点国内网络限制Flannel官方镜像托管在DockerHub等国外平台国内直接访问速度极慢或完全不可达容器运行时变更Kubernetes 1.24版本移除了dockershim默认使用containerd作为容器运行时镜像拉取策略默认的IfNotPresent策略在本地没有镜像时会尝试从远程仓库拉取通过以下命令可以快速确认问题kubectl get pods -n kube-flannel kubectl describe pod flannel-pod-name -n kube-flannel2. 解决方案一离线镜像本地导入对于无法访问外网或临时测试环境离线导入镜像是快速解决问题的有效方法。以下是详细操作步骤2.1 获取离线镜像包首先需要获取以下两个核心镜像的离线压缩包flannel/flannel:v0.25.1flannel/flannel-cni-plugin:v1.4.0-flannel1可以通过以下方式获取从能访问外网的机器使用docker pull下载后导出从第三方镜像源下载如阿里云镜像仓库使用已导出的tar包需确保版本匹配2.2 镜像导入containerd由于Kubernetes 1.28默认使用containerd需要特别注意导入到正确的命名空间# 将镜像导入k8s.io命名空间 ctr -n k8s.io images import flannel-flannel-v0.25.1-amd64.tar ctr -n k8s.io images import flannel-flannel-cni-plugin-v1.4.1-flannel1-amd64.tar # 验证镜像是否导入成功 ctr -n k8s.io images ls | grep flannel注意必须在集群所有节点包括master和worker上执行相同的导入操作否则调度到未导入镜像的节点时仍会失败。2.3 修改Flannel部署配置原始的kube-flannel.yml需要做两处关键修改将image地址改为本地镜像名称image: flannel/flannel:v0.25.1 # 改为 image: docker.io/flannel/flannel:v0.25.1显式设置镜像拉取策略imagePullPolicy: IfNotPresent3. 解决方案二Harbor私有仓库配置长期来看搭建私有镜像仓库是更专业的解决方案。以下是针对containerd运行时的Harbor配置指南3.1 基础环境准备组件版本要求备注Harborv2.0建议使用最新稳定版Containerd1.6需支持CRI插件Kubernetes1.24已移除dockershim3.2 Containerd配置Harbor为Harbor创建配置文件目录mkdir -p /etc/containerd/certs.d/harbor-host:port创建hosts.toml配置文件server http://harbor-host:port [host.harbor-host:port] capabilities [pull, resolve, push] skip_verify true重启containerd服务systemctl restart containerd3.3 镜像推送至Harbor给镜像打标签docker tag flannel/flannel:v0.25.1 harbor-host:port/library/flannel:v0.25.1登录并推送镜像docker login harbor-host:port docker push harbor-host:port/library/flannel:v0.25.13.4 修改Flannel配置使用Harbor最终的kube-flannel.yml关键修改部分containers: - name: kube-flannel image: harbor-host:port/library/flannel:v0.25.1 imagePullPolicy: IfNotPresent4. 高级配置与优化建议4.1 镜像同步策略对于生产环境建议设置自动同步规则使用Harbor的复制功能定期从DockerHub同步基础镜像配置镜像缓存代理如Aliyun镜像加速器4.2 网络性能调优Flannel支持多种后端根据网络环境选择最佳方案后端类型适用场景性能特点VXLAN云环境/跨主机通用性好有一定开销Host-GW同机房物理机性能最佳要求二层连通UDP测试环境兼容性最好性能最差修改后端类型只需在kube-flannel.yml中添加net-conf.json: | { Network: 10.244.0.0/16, Backend: { Type: vxlan } }4.3 安全加固措施为Harbor启用HTTPS配置containerd的镜像拉取密钥ctr i pull --user username:password harbor-host:port/library/flannel:v0.25.15. 常见问题排查指南当配置完成后仍然遇到问题时可按以下步骤排查检查Pod状态kubectl get pods -n kube-flannel -o wide查看详细事件kubectl describe pod pod-name -n kube-flannel检查容器运行时日志journalctl -u containerd -f手动测试镜像拉取crictl pull image-url验证网络连通性ping harbor-host telnet harbor-host port对于特定的http: server gave HTTP response to HTTPS client错误需要在pull命令中添加--plain-http参数ctr images pull harbor-host:port/library/flannel:v0.25.1 --plain-http

更多文章