如何通过本地containerd注册表的Docker标签获取SCDF应用元数据
问题根因与解决方案
核心问题
Connection refused报错的根本原因是:Kubernetes Pod有独立的网络命名空间,SCDF Pod内部访问localhost:32000时,指向的是Pod自身的本地端口,而非microk8s节点上运行的containerd本地注册表端口,自然无法建立连接。
修复步骤
替换注册表访问地址
不要在SCDF配置里使用localhost:32000作为注册表地址:- microk8s内置的本地注册表默认在集群内可通过域名
microk8s-registry.kube-system.svc.cluster.local:5000直接访问,推荐优先用这个集群内域名 - 如果你是手动通过NodePort暴露的32000端口,也可以替换为microk8s节点的内网IP加32000端口使用
开发环境临时测试也可以给SCDF Pod添加
hostNetwork: true配置,让Pod共享节点的网络命名空间,即可直接用localhost访问节点上的服务,但该配置有端口冲突风险,不建议生产使用。- microk8s内置的本地注册表默认在集群内可通过域名
修正SCDF ConfigMap配置
确认你的配置符合SCDF 2.9.1的私有注册表配置规范,参考配置如下:spring: cloud: dataflow: container: registry-configurations: local-registry: registry-host: 实际的注册表集群内地址 registry-port: 对应端口 disable-ssl-verification: true # 开发环境无有效SSL证书时必须开启配置修改后需要重启SCDF Pod生效。
验证网络连通性
SCDF重启完成后,执行命令进入Pod内部验证注册表可达:kubectl exec -it <SCDF Pod名称> -n <SCDF所在命名空间> -- curl <注册表地址>/v2/_catalog正常会返回你本地注册表的镜像列表。
补充运行时配置
确认microk8s的containerd配置已经把你的私有注册表地址加入不安全注册表列表,配置文件路径为/var/snap/microk8s/current/args/containerd-template.toml,修改后需要重启microk8s的containerd服务生效。
内容的提问来源于stack exchange,提问作者CEDDM
相关产品推荐
相关产品推荐

