如何为SCDF配置Harbor镜像仓库,解决自签名证书信任问题
前置准备
首先获取Harbor的自签名CA证书,保存为ca.crt文件,可通过以下命令直接从Harbor服务拉取:
openssl s_client -connect myhost:443 -showcerts < /dev/null | sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' > ca.crt
确认证书内容正确后再进行后续配置。
步骤1:配置SCDF、Skipper服务信任Harbor证书
SCDF和Skipper需要主动请求Harbor API拉取镜像元数据(标签、manifest等),要移除disable-ssl-verification: true参数,必须将Harbor CA证书注入到两个服务的信任列表中:
- 首先创建存储证书的ConfigMap:
microk8s.kubectl create configmap harbor-ca --from-file=ca.crt=./ca.crt
- 修改SCDF和Skipper的Deployment配置,挂载证书并配置Java进程信任:
在spec.template.spec.volumes字段下新增卷配置:
在- name: harbor-ca configMap: name: harbor-caspec.template.spec.containers[0].volumeMounts字段下新增挂载配置:
在- name: harbor-ca mountPath: /etc/harbor/ca.crt subPath: ca.crtspec.template.spec.containers[0].env字段下新增JVM参数配置(SCDF 2.9.1使用Java 11,原生支持PEM格式证书作为信任库):
配置修改完成后重启SCDF和Skipper的Pod。- name: JAVA_OPTS value: "-Djavax.net.ssl.trustStore=/etc/harbor/ca.crt -Djavax.net.ssl.trustStoreType=PEM"
步骤2:配置microk8s节点信任Harbor证书
kubelet拉取镜像时使用节点侧容器运行时的信任证书列表,需要对所有microk8s节点做如下配置:
- 若microk8s使用Docker作为运行时:
在每个节点创建证书目录:mkdir -p /etc/docker/certs.d/myhost/
将ca.crt拷贝到该目录下,重启Docker服务:systemctl restart docker - 若microk8s使用Containerd作为运行时:
将ca.crt内容追加到节点的/etc/ssl/certs/ca-certificates.crt文件末尾,重启microk8s服务:microk8s stop && microk8s start
步骤3:调整SCDF ConfigMap移除SSL禁用参数
删除之前配置中的disable-ssl-verification: true参数,调整后对应配置如下:
spring: cloud: dataflow: container: registry-configurations: harbor: registry-host: myhost authorization-type: dockeroauth2 user: myuser secret: mypwd extra: "registryAuthUri" : 'https://myhost/service/token?service=harbor-registry&scope=repository:{repository}:pull'
修改完成后重启SCDF和Skipper Pod让配置生效。
验证
重新部署流应用,镜像拉取环节不会再报x509证书未知机构错误,SCDF也可正常读取镜像的Docker Label信息。
内容的提问来源于stack exchange,提问作者CEDDM
相关产品推荐
相关产品推荐

