如何为 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-host
和docker-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]
我正在尝试将 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-host
和docker-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]