![](/img/trans.png)
[英]Unable to pull docker image from local registry for Kubernetes deployment
[英]Kubernetes: Pull images from internal registry with on-premise deployment
tl; dr如果来自同一k8s群集上托管的私有Docker注册表的镜像没有单独的DNS条目,该如何在Kubernetes Pod
引用该映像?
在本地Kubernetes部署中,我已使用带有自签名证书的稳定/ docker-registry舵图设置了私有Docker注册表。 这是前提,我无法设置DNS记录来为注册表提供自己的URL。 我希望将这些清单用作模板,所以我不想对任何特定于环境的配置进行硬编码。
Docker注册表服务的类型为ClusterIP
,如下所示:
apiVersion: v1
kind: Service
metadata:
name: docker-registry
labels:
app: docker-registry
spec:
type: ClusterIP
ports:
- port: 443
protocol: TCP
name: registry
targetPort: 5000
selector:
app: docker-registry
如果我已手动将映像推送到此注册表(或将来通过Jenkins构建管道),我将如何在Pod
规范中引用该映像?
我努力了:
containers:
- name: my-image
image: docker-registry.devops.svc.cluster.local/my-image:latest
imagePullPolicy: IfNotPresent
但是我收到有关节点主机无法解析docker-registry.devops.svc.cluster.local
。 我认为k8s节点上的Docker守护程序无法解析该URL,因为它是内部k8s DNS记录。
Warning Failed 20s (x2 over 34s) kubelet, ciabdev01-node3
Failed to pull image "docker-registry.devops.svc.cluster.local/hadoop-datanode:2.7.3":
rpc error: code = Unknown desc = Error response from daemon: Get https://docker-registry.devops.svc.cluster.local/v2/: dial tcp: lookup docker-registry.devops.svc.cluster.local: no such host
Warning Failed 20s (x2 over 34s) kubelet, node3 Error: ErrImagePull
那么,在这种内部部署方案中,我将如何引用内部托管的Docker注册表上的映像?
我唯一的选择是使用NodePort
类型的服务,在Pod
规范中引用节点的主机名之一,然后配置每个节点的docker守护程序以忽略自签名证书吗?
Docker使用节点上配置的DNS设置,默认情况下,它看不到Kubernetes集群中声明的DNS名称。
您可以尝试使用以下解决方案之一:
将“ docker-registry”服务描述中ClusterIP
字段中的IP地址用作docker注册表名称。 在重新创建服务之前,该地址是静态的。 另外,您可以将此IP地址添加到每个节点上的/etc/hosts
。
例如,您可以将my-docker-registry 10.11.12.13
行my-docker-registry 10.11.12.13
到/etc/hosts
文件。 因此,您可以将10.11.12.13:5000
说明中的image
字段使用10.11.12.13:5000
或my-docker-registry:5000
作为docker注册表名称。
使用type: NodePort
在集群外部公开“ docker-registry”服务。 将localhost:<exposed_port>
描述中的image
字段使用localhost:<exposed_port>
或<one_of_nodes_name>:<exposed_port>
作为<one_of_nodes_name>:<exposed_port>
注册表名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.