使用helm部署极狐gitlab 16.6.1,自带registry无法推送镜像

部署方式

使用官方helm chart 7.6.1版本部署gitlab,使用外部nginx做TLS卸载,已完成配置,nginx配置无任何问题。

  • gitlab不部署nginx ingress controller,使用k8s集群自带controller。
  • gitlab各服务ingress disable掉tls相关配置。
  • gitlab部署完成能够正常登录。使用root用户创建代码仓库,代码仓库能够正常访问。

问题描述

使用gitlab-runner执行docker login或通过在其他虚机上使用docker login到gitlab regsitry,可以正常登录。但是使用docker push均无法推送镜像,报错unknown blob。
##相关配置
nginx配置

        location / {
            proxy_pass http://public-service-cluster-node;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header  X-Forwarded-Proto $scheme;
            proxy_read_timeout 900;
        }

helm chart https相关配置

  hosts:
    domain: example.cn
    externalIP: null
    gitlab:
      name: jihulab.example.cn
      https: true
    hostSuffix: null
    https: false
    kas:
      name: jihulab-kas.example.cn
      https: true
    minio:
      name: jihulab-minio.example.cn
      https: true
    pages: {}
    registry:
      name: jihulab-registry.example.cn
      https: true
...(省略)
  ingress:
    class: nginx
    annotations: {}
    apiVersion: ''
    configureCertmanager: false
    enabled: true
    path: /
    pathType: Prefix
    provider: nginx
    tls:
      enabled: false

docker push 报错

2071795f387c: Pushing [==================================================>]  418.2kB/418.2kB
046002f6f2ea: Pushing [==================================================>]  351.6MB/351.6MB
9425eace6ed9: Pushing [==================================================>]  3.584kB
9c39e87731b7: Pushing [==================================================>]  3.584kB
f7ed56f3fce3: Pushing [==================================================>]  1.289MB/1.289MB
53c779688d06: Waiting
60a0858edcd5: Waiting
b6ca02dfe5e6: Waiting
unknown blob

问题解决过程

通过排查分析,发现gitlab registry这个子chart的configmap中,提示host不可配置,但是实际需要将此配置成与registry相同的url后,才能成功推送镜像,配置如下:

config.yml
version: 0.1

log:

  fields:

    service: registry

  level: info

http:

  addr: :5000

  host: https://jihulab-registry.example.cn

  # `host` is not configurable

  # `prefix` is not configurable

后查看对应configmap的tempaltes文件,发现并未从values.yaml中引入配置来配置这个http.host。

不知这里是否是bug,官方文档中明确支持在gitlab外使用nginx作为外部负载均衡,并在nginx上配置tls终止。那么同一个chart包中的registry是否也应该支持使用外部nginx作为负载,并在nginx上终止tls。

或者我有其他什么地方配置有问题,望指出。

使用 helm 安装/配置 GitLab