我正在为Jenkins使用Kubernetes插件,从我的私有Docker注册表中提取似乎有问题。
这是一个“不受信任的”(无SSL)港口专用注册表。
当我从注册表中提取另一个Jenkins管道时,我不得不在--insecure-registry http://10.3.31.105 --insecure-registry 10.3.31.105
文件中设置/etc/systemd/system/docker.service.d/docker-options.conf
。
我想知道是否需要做些特殊的事情才能使Kubernetes以类似的方式使用不受信任的注册表?
这是我正在使用的广告连播,也是我收到的错误:
[svc.jenkins@node1 ~]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
message-service-7d9494544d-fvnkl 0/1 ImagePullBackOff 0 1m
[svc.jenkins@node1 ~]$ kubectl logs message-service-7d9494544d-fvnkl
Error from server (BadRequest): container "message-service" in pod "message-service-7d9494544d-fvnkl" is waiting to start: trying and failing to pull image
Jenkins作业成功退出:
Finished Kubernetes deployment
Finished: SUCCESS
答案 0 :(得分:0)
您的工作流程环境缺少Kubernetes secrets。
Kubernetes使用这些秘密 作为由詹金斯执行时提取注册表映像的凭据。 保持注册表不受保护始终是一个坏习惯,因此您应停止提供命令行参数以强制不安全的注册表。 要在管道中使用凭据,您无需执行任何特殊操作, 您就像访问Jenkins中存储的凭证一样访问它们。
我发现这个kubernetes-credentials-provider-plugin很有用,另外一个工作 kubernetes-cd-plugin在这里。
答案 1 :(得分:0)
实际上有点像您在做的事情:
编辑文件/etc/docker/daemon.json
并添加:
{
"insecure-registries" : [ "10.3.31.105:5000" ]
}
建议将守护程序选项放在daemon.json
中,而不仅仅是将它们添加到您的docker daemon服务中。您需要在Kubernetes集群中的每个节点上执行此操作。这将使kubernetes从不受信任的注册表中提取图像。