如何为 SCDF 配置 Harbor?

How to configure Harbor for SCDF?

我正在尝试将 Harbor 注册表与 microk8s 1.18.20 中的 SCDF 2.9.1 一起使用。
通过在 SCDF 服务器配置映射中添加以下内容,我成功配置 SCDF 以检索我的应用程序的 Docker 标签:

spring:
  cloud:
    dataflow:
      container:
        registry-configurations:
          harbor:
            registry-host: myhost
            authorization-type: dockeroauth2
            user: myuser
            secret: mypwd
            disable-ssl-verification: true
            extra:
              "registryAuthUri" : 'https://myhost/service/token?service=harbor-registry&scope=repository:{repository}:pull'

然后为了拉取图像,我用这个命令行创建了一个秘密(在配置我的本地 Docker 守护进程之后):

microk8s.kubectl create secret generic harbor-credentials \
    --from-file=.dockerconfigjson=/home/myuser/.docker/config.json \
    --type=kubernetes.io/dockerconfigjson

并更改 Skipper 和 SCDF Config Map 以将其用于:

spring.cloud.skipper.server.platform.kubernetes.accounts.default.imagePullSecret=harbor-credentials
spring.cloud.dataflow.task.platform.kubernetes.accounts.default.imagePullSecret=harbor-credentials

但是当我尝试在流中部署我的应用程序时,在拉取图像时出现此错误:

Head "https://myhost/v2/scdf/myapp/manifests/latest": x509: certificate signed by unknown authority

我必须如何以及在何处配置 Harbor 自签名证书以便 SCDF/Skipper 可以部署应用程序?
理想情况下,我也希望为 Docker 标签删除 disable-ssl-verification: true

解决方法很简单:我只需要将 Harbor ca.crt 文件(从 Harbor UI 下载)复制到 /ets/ssl/certs 目录。

您也可以直接创建密钥,而无需配置 Docker 守护程序,例如:

microk8s.kubectl create secret docker-registry harbor-credentials \
    --docker-server=hostname \
    --docker-username='user' \
    --docker-password=pwd

此外,如果您想使用 Harbor 作为来自 docker.io 的 OCI 图像的代理,您可以通过在安装期间添加这些属性(在配置 Harbor 代理缓存项目 dockerhub-proxy 之后)一次性配置所有 SCDF当然):

global.imageRegistry = hostname/dockerhub-proxy
global.imagePullSecrets = [harbor-credentials]

在这种情况下,您的用户应该有权拉取您需要的每个 Harbor 项目。
然后将从Harbor中拉取所有镜像,包括kafka、skipper、zookeeper等...

编辑: 我分享了一种通过 K8S secret 配置 Harbor 凭据的更优雅的方法:将 secret 添加为卷,如 this.
容器注册表是自动配置的。如果你需要添加选项,你可以像这样在配置映射中添加它:

spring:
  cloud:
    dataflow:
      container:
        registry-configurations:
          harbor:
            registry-host: myhost
            disable-ssl-verification: true

secret和附加配置的映射是根据secret中的registry-hostdocker-server 属性如果我理解的很好

所有这些都可以使用像这样的 YAML 使用 Helm chart(自 v5.0.1 起)立即完成:

server:
  configuration:
    containerRegistries:
      harbor:
        registry-host: hostname
        disable-ssl-verification: true
  extraVolumes:
    - name: harbor
      secret:
        secretName: harbor-credentials
  extraVolumeMounts:
    - name: harbor
      readOnly: true
      mountPath: /etc/secrets/harbor
global:
  imageRegistry: hostname/dockerhub-proxy
  imagePullSecrets: [harbor-credentials]
deployer:
  imagePullSecrets: [harbor-credentials]