我正在尝试使用官方Docker镜像在Kubernetes上部署私有Docker注册表。但是,我在部署时收到一些警告,并且也无法在pod中访问它。
注册表容器的输出:
time="2019-04-12T18:40:21Z" level=warning msg="Ignoring unrecognized environment variable REGISTRY_PORT"
time="2019-04-12T18:40:21Z" level=warning msg="Ignoring unrecognized environment variable REGISTRY_PORT_5000_TCP"
time="2019-04-12T18:40:21Z" level=warning msg="Ignoring unrecognized environment variable REGISTRY_PORT_5000_TCP_ADDR"
time="2019-04-12T18:40:21Z" level=warning msg="Ignoring unrecognized environment variable REGISTRY_PORT_5000_TCP_PORT"
time="2019-04-12T18:40:21Z" level=warning msg="Ignoring unrecognized environment variable REGISTRY_PORT_5000_TCP_PROTO"
time="2019-04-12T18:40:21Z" level=warning msg="Ignoring unrecognized environment variable REGISTRY_SERVICE_HOST"
time="2019-04-12T18:40:21Z" level=warning msg="Ignoring unrecognized environment variable REGISTRY_SERVICE_PORT"
time="2019-04-12T18:40:21.145278902Z" level=warning msg="No HTTP secret provided - generated random secret. This may cause problems with uploads if multiple registries are behind a load-balancer. To provide a shared secret, fill in http.secret in the configuration file or set the REGISTRY_HTTP_SECRET environment variable." go.version=go1.11.2 instance.id=988660e4-d4b9-4d21-a42e-c60c82d00a73 service=registry version=v2.7.1
time="2019-04-12T18:40:21.145343563Z" level=info msg="redis not configured" go.version=go1.11.2 instance.id=988660e4-d4b9-4d21-a42e-c60c82d00a73 service=registry version=v2.7.1
time="2019-04-12T18:40:21.149771291Z" level=info msg="Starting upload purge in 2m0s" go.version=go1.11.2 instance.id=988660e4-d4b9-4d21-a42e-c60c82d00a73 service=registry version=v2.7.1
time="2019-04-12T18:40:21.163063574Z" level=info msg="using inmemory blob descriptor cache" go.version=go1.11.2 instance.id=988660e4-d4b9-4d21-a42e-c60c82d00a73 service=registry version=v2.7.1
time="2019-04-12T18:40:21.163689856Z" level=info msg="listening on [::]:5000" go.version=go1.11.2 instance.id=988660e4-d4b9-4d21-a42e-c60c82d00a73 service=registry version=v2.7.1
在Kubernetes上部署的yaml文件:
104 apiVersion: extensions/v1beta1
105 kind: Deployment
106 metadata:
107 name: registry
108 namespace: docker
109 spec:
110 replicas: 1
111 template:
112 metadata:
113 labels:
114 name: registry
115 spec:
116 containers:
117 - resources:
118 name: registry
119 image: registry:2
120 ports:
121 - containerPort: 5000
122 volumeMounts:
123 - mountPath: /var/lib/registry
124 name: images
140 volumes:
141 - name: images
142 hostPath:
143 path: /mnt/nfs/docker-local-registry/images
150 nodeSelector:
151 name: master
152 ---
153 apiVersion: v1
154 kind: Service
155 metadata:
156 name: registry
157 namespace: docker
158 spec:
159 ports:
160 - port: 5000
161 targetPort: 5000
162 selector:
163 name: registry
即使我忽略这些警告,也无法使用registry.docker:5000/image_name
和registry.docker.svc.cluster.local/image_name
访问pod级别的注册表,因为无法解析主机。我不想公开注册表。我想要的是能够使吊舱从那里拉出图像。
答案 0 :(得分:2)
不确定,我完全了解您的用例,但是如果您要启动基于内部注册表提供的映像的Pod,那么一定要了解,不是Pod,而是集群节点上的dockerd拉图像。内部DNS名称(例如* svc.cluster.local)无法在此处解析。至少在许多K8s环境中都是这种情况。 有人在这里讨论此问题:https://github.com/knative/serving/issues/1996 如果发布您正在使用的Kubernetes提供程序(GKE,EKS等),可能会有所帮助。 解决方案是配置群集节点以解析这些名称,或使用入口在外部公开注册表。
答案 1 :(得分:0)
好像您将注册表映像打包到部署中而不检查要求。使用您的部署,我遇到了同样的错误。经过一段时间尝试正确打包并在docker hub上阅读requirements。该图像需要一些其他设置。您需要存储htpasswd,为HTPASSWD创建证书并为图像创建目录。另外,您将需要指定env var并在容器中创建相应的路径。
REGISTRY_AUTH
REGISTRY_AUTH_HTPASSWD_REALM
REGISTRY_AUTH_HTPASSWD_PATH
REGISTRY_HTTP_TLS_CERTIFICATE
REGISTRY_HTTP_TLS_KEY
这是我使用并成功部署了注册表的tutorial。如果您有问题,请更新问题,我们将尽力提供帮助。同样,这种媒介article可以为您提供一些想法(但是请注意,因为docker compose文件需要进行一些编辑,因为它不能以本文中发布的形式起作用)。