0

我正在尝试将Harbor注册表与SCDF 2.9.1in一起使用microk8s 1.18.20
通过在 SCDF 服务器 Config Map 中添加以下内容,我成功配置了 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 可以部署应用程序?
理想情况下,我也希望删除disable-ssl-verification: trueDocker 标签

4

1 回答 1

0

解决方案很简单:我只需要复制目录中的 Harborca.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 映像的代理,您可以通过在安装期间添加这些属性来一次性配置 SCDF(dockerhub-proxy当然是在配置 Harbor 代理缓存项目之后):

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

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

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

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

如果我理解得很好的话,秘密和附加配置之间的映射是基于秘密中的registry-host和属性进行的docker-server

所有这些都可以使用 Helm 图表(自 v5.0.1 起)和这样的 YAML 一次性完成:

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]
于 2021-12-02T08:59:15.590 回答