首页 > 解决方案 > 如何在 k8s 集群上配置 Harbor?

问题描述

我正在尝试使用 helm(values.yaml)在 k8s 集群(由 Rancher 提供)上部署 Harbor(私有 docker 注册表)。下面是我的 valuse.yaml。

  1. 网络
    我在 k8s 入口 nginx 控制器前面有 nginx。
    nginx(http 301 重定向到 https,例如http://harbor.mydomain.com -> https://harbor.ssgadm.com)-> ingress-nginx -> 港口服务

  2. Harbor 与 nginx
    https://github.com/goharbor/harbor/blob/master/docs/1.10/install-config/troubleshoot-installation.md#using-nginx-or-load-balancing
    Harbor 团队说如果 Harbor 落后一个 nginx 代理,删除标头“X-Forwarded-Proto”,所以我在 values.yaml 中添加了入口注释


这是我的问题。
1. 登录docker成功,但是推送docker镜像失败,消息:denied:requested access to the resource is denied

  1. 在 Harbor 网页上看不到 minio 注册表端点
    找不到任何端点!

那么,你能帮我解决问题吗?

---
  港口管理员密码:“管理员”
  密钥:“添加你的秘密0”
  日志级别:“信息”
  暴露:
    类型:“入口”
    入口:
      主持人:
        核心:“harbor.mydomain.com”
        公证人:“harbor.notary.mydomain.com”
      注释:
        ingress.kubernetes.io/proxy-body-size:“0”
        ingress.kubernetes.io/ssl-redirect:“真”
        nginx.ingress.kubernetes.io/proxy-body-size: "0"
        nginx.ingress.kubernetes.io/ssl-redirect:“真”
        nginx.org/server-snippets: |
          地点 / {
            proxy_hide_header 'X-Forwarded-Proto'
          }

          位置 /v2/ {
            proxy_hide_header 'X-Forwarded-Proto'
          }

          定位服务/ {
            proxy_hide_header 'X-Forwarded-Proto'
          }
    负载均衡器:
      知识产权:“”
    tls:
      启用:假
      密名:“”
  externalURL:“https://harbor.mydomain.com”
  坚持:
    图像图表存储:
      类型:“s3”
      禁用重定向:真
      天蓝色:
        帐户名称: ””
        帐户密钥:“”
        容器: ””
      气相色谱:
        桶: ””
        编码密钥:“”
      s3:
        桶:“码头工人”
        地区:“us-east-1”
        访问密钥:“迷你”
        密钥:“迷你”
        区域端点:“https://minio.mydomain.com”
      开源软件:
        桶: ””
        地区: ””
        访问密钥ID:“”
        访问密钥:“”
      迅速:
        授权人:“https://storage.myprovider.com/v3/auth”
        用户名: ””
        密码: ””
        容器: ””
    启用:真
    持久卷声明:
      注册表:
        storageClass:“nfs-provisioner”
        大小:“1Gi”
        现有声明:“”
      图表博物馆:
        storageClass:“nfs-provisioner”
        大小:“1Gi”
        现有声明:“”
      工作服务:
        storageClass:“nfs-provisioner”
        大小:“1Gi”
        现有声明:“”
      数据库:
        storageClass:“nfs-provisioner”
        大小:“1Gi”
        现有声明:“”
      雷迪斯:
        storageClass:“nfs-provisioner”
        大小:“1Gi”
        现有声明:“”
  工作服务:
    作业记录器:“数据库”
  数据库:
    类型:“内部”
    外部的:
      主持人: ””
      用户名: ””
      密码: ””
      核心数据库:“注册表”
      克莱尔数据库:“克莱尔”
      公证服务器数据库:“公证服务器”
      notarySignerDatabase:“notary_signer”
      sslmode:“禁用”
      端口:“5432”
  雷迪斯:
    类型:“内部”
    外部的:
      主持人: ””
      端口:“6379”
      密码: ””
  克莱尔:
    启用:真
  公证人:
    启用:假
  图表博物馆:
    启用:真
  证书:
    启用:真

标签: nginxkubernetesnginx-ingressminioharbor

解决方案


确保满足所有先决条件

确保您已向Harbor 和 Docker提供证书。

生成 ca.crt、yourdomain.com.crt 和 yourdomain.com.key 文件后,您必须将它们提供给 Harbor 和 Docker,并重新配置 Harbor 以使用它们。最后重启 Docker 引擎。

要启用将图像推送到 docker 注册表,请执行以下命令:

您需要包含 Docker Hub 的命名空间以将其与您的帐户相关联。命名空间与您的 Docker Hub 帐户名称相同。您需要将图像重命名为 YOUR_DOCKERHUB_NAME/docker-whale。

推送前标记图像:

$ docker tag your_image YOUR_DOCKERHUB_NAME/your_image

然后你应该能够推动它。

$ docker push YOUR_DOCKERHUB_NAME/your_image

您还在配置文件中复制nginx.ingress.kubernetes.io/proxy-body-size了注释。

对于 NGINX,当请求中的大小超过客户端请求正文的最大允许大小时,将向客户端返回 413 错误。这个大小可以通过参数client_max_body_size来配置。

要为所有 Ingress 规则全局配置此设置,可以在 NGINX ConfigMap 中设置 proxy-body-size 值。要在 Ingress 规则中使用自定义值,请定义以下注释:

nginx.ingress.kubernetes.io/proxy-body-size: 8m

尝试添加0m

还有环境完整性检查:如果没有 SSL,应该会失败,在数据库中启用外部 ss:

sslmode=require

如果出现更多问题,请检查已安装港口的日志:

$ kubectl logs -n harbor your-harbor-pod

推荐阅读