「Harbor」- 部署服务 | 高可用部署 | Kubernetes

该笔记将记录:在 Kubernetes Cluster 中,部署 Harbor 的方法,以及相关问题的解决办法。

针对整个安装过程,我们还是遇到若干问题,相关部分将详细记录;

系统架构

Start with Harbor 2.5.3

Harbor docs | Deploying Harbor with High Availability via Helm
harbor-helm/_helpers.tpl at master · goharbor/harbor-helm · GitHub

通过 Nginx Ingress 组件,我们来暴露 HTTP 接口,以提供访问;
通过 cert-manager 组件,来自动申请证书,以提供 HTTPS 访问;

我们习惯于拉取 Chart 的 .tgz 文件,并生成 values.yaml 文件,以进行配置的 Git 管理;

部署过程

添加仓库,并获取 Chart 文件:

# helm repo add harbor https://helm.goharbor.io
# helm repo update

# helm pull harbor/harbor                                                       # CHART 1.9.3, APP 2.5.3
# helm show values ./harbor-1.9.3.tgz > harbor-1.9.3.helm-values.yaml

修改 harbor-1.9.3.helm-values.yaml 文件:

# 针对场景,配置不同参数,这里仅列举我们需要配置的关键参数:

expose.type: ingress

expose.tls.certSource: secret                                                   # 我们使用 cert-manager 申请证书;
expose.tls.secret.secretName: harbor-core-tls
expose.tls.secret.notarySecretName: harbor-notary-tls

expose.ingress.hosts.core:
expose.ingress.hosts.notary:
expose.ingress.annotations: kubernetes.io/ingress.class: nginx
expose.ingress.annotations: cert-manager.io/cluster-issuer: letsencrypt

externalURL:                                                                    # 针对我们的场景,需要与 expose.ingress.hosts.core 相同

persistence.*.storageClass:
persistence.*.size:

harborAdminPassword:

database.type: internal
database.internal.password:

redis.type: external
redis.external.addr:
redis.external.password:

安装(或升级)服务:

# helm --namespace registry-server                                             \
    install registry-server ./harbor-1.9.3.tgz                                 \
    -f harbor-1.9.3.helm-values.yaml                                           \
    --create-namespace

# helm --namespace registry-server                                             \
    upgrade registry-server ./harbor-1.9.3.tgz                                 \
    -f harbor-1.9.3.helm-values.yaml

… pq: unknown authentication response: 10 …

[bitnami/harbor] Unable to use notary and clair with an external PGSQL12 DB · Issue #4574

问题描述:组件产生如下错误信息

# kubectl logs registry-server-harbor-notary-signer-db48665bb-x2tcx
...
{"level":"fatal","msg":"failed to create a new keydbstore: pq: unknown authentication response: 10","time":"2022-07-22T10:37:54Z"}

# kubectl logs registry-server-harbor-notary-server-88fd54dcc-tdb2l
...
{"level":"info","msg":"Using postgres backend","time":"2022-07-22T10:42:43Z"}
{"level":"fatal","msg":"Error starting postgres driver: pq: unknown authentication response: 10","time":"2022-07-22T10:42:43Z"}

环境信息:

  • Harbor CHART 1.9.3, APP 2.5.3

原因分析:
我们 PostgreSQL 14 版本,对于 Harboar 较新;

解决方案:

  • 我们改为使用 Harboar 内置的 PostgreSQL 数据库。
  • 后来,我们尝试使用 PostgreSQL 11 版本,也能成功运行;

Start with Harbor 2.10.0

Chart 1.14.0, App 2.10.0

# 12/08/2024 通过 Helm Chart 将 Harbor 部署到 Kubernetes 集群。最终的目的是为了将 Installer 部署 Harbor 迁移到 Kubernetes 中(鉴于官方未提供直接的升级方法);

… FATAL: password authentication failed for user “postgres” …

… manually delete harbor-database secret before attempting an helm upgrade command, that should skip the issue entirely … that’s because the Chart attempt a lookup of the existing secret …

Start with Harbor 2.11.1

Chart 1.15.1 App 2.11.1

# 11/29/2024 通过 Helm Chart 将 Harbor 部署到 Kubernetes 集群;

repository:
storageClass:
size:
expose:
harborAdminPassword:
externalURL:
updateStrategy: | 我们使用 Recreate 策略,原因在于我们使用快存储,且 Pod 是分散的,否则将发生存储抢占而无法成功运行;

s3aws: PathStyleDomainForbidden: The bucket you are attempting to access must be addressed using COS virtual-styled domain

我们尝试了一些方法,比如,forcepathstyle: false、bucket: “”,等等,都无法解决问题。虽然我们还能够尝试其他方法,但是即便能够解决问题也都并非官方提供的途径,其可能会给以后的升级维护带来隐患。所以,我们现在使用 filesystem 来存储镜像。