资讯动态

k8s下,Harbor 私有镜像仓库部署

发布时间:2026/9/24 17:28:27 来源:尧图企业网站定制
环境信息表格服务器IP角色node‑0110.10.6.27k8s 节点 HAProxyKeepalivednode‑0210.10.6.28k8s 节点 HAProxyKeepalivednode‑0310.10.6.29k8s 节点 HAProxyKeepalivedVIP10.10.6.100Keepalived 虚拟 IP前端负载均衡入口集群版本K8s v1.28.15Helmv3.14.0Ingress‑Nginx‑Controller v1.13.5Harbor‑v2.15.2 网络架构HAProxy 四层 TCP 透传SSL 证书终止于 k8s 内部 ingress‑nginx不在 haproxy 做 ssl 解密访问域名harbor.devops.local前置条件kubernetes 集群正常运行calico 网络就绪ingress‑nginx‑controller 已经部署完成使用 NodePort 模式https 端口为 30443kubectl get ingressclass #确认 ingressclass名称为 nginx三台服务器 HAProxyKeepalived 高可用已经部署VIP10.10.6.100helm 环境可用可访问外网 helm 仓库一、Helm 部署 Harbor1. 添加 harbor helm 仓库helm repo add harbor https://helm.goharbor.io helm repo update2. 离线下载 chart可选内网环境建议cd /opt helm pull harbor/harbor --untar cd harbor3. 编写 harbor 自定义 values 配置 my‑harbor‑values.yaml注意此处 ingress 默认没有填写 ingressClassName部署完成之后需要手动修补这是本次实施遇到的坑expose: type: ingress tls: enabled: true certSource: auto ingress: hosts: core: harbor.devops.local annotations: nginx.ingress.kubernetes.io/proxy-body-size: 0 nginx.ingress.kubernetes.io/ssl-redirect: true externalURL: https://harbor.devops.local harborAdminPassword: Harbor123456 persistence: persistentVolumeClaim: registry: storageClass: size: 20Gi chartmuseum: storageClass: jobservice: storageClass: database: storageClass: redis: storageClass: trivy: storageClass: 4. helm 执行安装helm upgrade --install harbor . \ -n harbor \ --create-namespace \ -f my-harbor-values.yaml5. 部署后检查 pod 状态kubectl get pods -n harbor -w等待所有 pod 状态变为 Runningjobservice 允许前期 1‑3 次重启稳定后不再重启属于正常。6. 修复 Ingress 资源重要helm chart 默认缺失 ingressClassName 字段问题现象Ingress 资源 CLASS 列为noneingress‑nginx 控制器直接忽略该 ingress 规则不会同步配置。 执行 patch 命令修复 ingress 资源kubectl patch ingress harbor-ingress -n harbor -p {spec:{ingressClassName:nginx}}修复完成之后查看 ingresskubectl get ingress -n harbor此时 CLASS 列变为nginx⚠️该 Ingress 的 ADDRESS 字段为空属于正常现象因为 ingress‑nginx 使用 NodePort 模式非 LoadBalancer Service。二、三台 HAProxy 配置修改三台机器都必须修改配置保持完全一致编辑/etc/haproxy/haproxy.cfg在配置文件末尾追加下面 listen 片段重点mode tcp 四层透传bind 监听0.0.0.0:443禁止直接绑定 VIP 地址 10.10.6.100否则 keepalived 漂移之后备节点 haproxy 启动失败listen k8s-ingress-https bind 0.0.0.0:443 mode tcp balance roundrobin server k8s-node1 10.10.6.27:30443 check inter 3000 fall 2 rise 2 server k8s-node2 10.10.6.28:30443 check inter 3000 fall 2 rise 2 server k8s-node3 10.10.6.29:30443 check inter 3000 fall 2 rise 2说明k8s‑node1/k8s‑node2仅为 haproxy 内部后端别名无需和服务器主机名保持一致仅用于 stats 监控页面展示实际生效的是后面的 IPNodePort 端口。每台 haproxy 修改之后校验配置并热重载#校验语法 haproxy -c -f /etc/haproxy/haproxy.cfg #热加载配置不需要重启服务 systemctl reload haproxy防火墙放行 443 端口三台 haproxy 节点firewall-cmd --add-port443/tcp --permanent firewall-cmd --reload验证 haproxy 监听端口ss -lnp | grep 443 #确认haproxy进程监听 *:443三、集群节点 hosts 解析 harbor 健康验证1、k8s 节点 hosts 写入域名解析node‑01/node‑02/node‑03echo 10.10.6.100 harbor.devops.local /etc/hosts2、健康接口测试验证整套链路curl -k https://harbor.devops.local/api/v2.0/health预期返回 json 结果status:healthy所有组件状态 healthy 即为 harbor 后端 前端 haproxy 链路全部正常。四、所有 K8s 业务节点 containerd 配置镜像推送必须配置自签证书跳过校验修改/etc/containerd/config.toml添加 harbor 仓库跳过 tls 校验配置[plugins.io.containerd.grpc.v1.cri.registry.configs.harbor.devops.local.tls] insecure_skip_verify true修改之后重启 containerd 服务systemctl restart containerd测试 nerdctl 登录 harbor 仓库nerdctl login harbor.devops.local五、PC 客户端访问准备windows 电脑修改 hosts 文件 (C:\Windows\System32\drivers\etc\hosts)增加解析10.10.6.100 harbor.devops.local浏览器访问https://harbor.devops.local当前使用 ingress‑nginx 默认内置自签证书浏览器提示不安全告警属于现状生产环境建议申请内网域名证书创建 tls secret 绑定到 harbor‑ingress 消除告警获取 harbor 管理员密码如果部署时没有写死密码可从 secret 读取kubectl get secret harbor -n harbor -o jsonpath{.data.harborAdminPassword} |base64 -d;echo默认管理员账号admin六、完整流量路径PC客户端浏览器 ↓ Keepalived‑VIP 10.10.6.100:443 (HAProxy mode tcp四层透传不解密SSL) ↓轮询后端k8s节点NodePort k8s节点IP:30443 ↓ ingress‑nginx‑controller Pod终止HTTPS SSL证书 ↓匹配ingress‑nginx规则 harbor‑ingress harbor‑portal / harbor‑core (ClusterIP Service →业务Pod)七、后续运维说明harbor 后续 helm 升级时如果 values.yaml 没有指定 ingressClassName升级后会再次丢失该字段需要重新 patch建议直接把 ingressClassName 写进 my‑harbor‑values.yamlhaproxy 三台配置务必保持完全一致保证 keepalived 故障漂移之后业务不间断harbor 的数据持久化存储需要定期做好 PV 数据备份。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价