我正在尝试使用注册表的官方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级别的注册表也不会起作用,因为无法解析主机。我不想暴露注册表。我想要的是能够从那里的豆荚中拉出图像。
发布于 2019-04-13 22:39:17
不确定,我完全理解您的用例,但如果您想要启动一个基于内部注册表提供的镜像的pod,重要的是要了解集群节点上的pod而不是dockerd正在拉取镜像。无法在那里解析内部DNS名称,如*svc.cluster.local。至少在许多K8s环境中是这样的。有些人在这里讨论这个:https://github.com/knative/serving/issues/1996它可能会有帮助,如果你张贴哪个Kubernetes提供商(GKE,EKS等)您正在使用。解决方案是配置集群节点来解析这些名称,或者使用入口在外部公开您的注册表。
发布于 2019-04-18 00:06:21
似乎您在没有检查需求的情况下将注册表映像打包到部署中。在使用您的部署时,我遇到了同样的错误。经过一段时间尝试正确打包并读取docker hub上的requirements。此映像需要一些其他设置。您需要存储您的htpasswd,为HTPASSWD创建证书,并为镜像创建目录。此外,您还需要指定env vars并在容器中创建相应的路径。
REGISTRY_AUTH
REGISTRY_AUTH_HTPASSWD_REALM
REGISTRY_AUTH_HTPASSWD_PATH
REGISTRY_HTTP_TLS_CERTIFICATE
REGISTRY_HTTP_TLS_KEY这是一个我用过并成功部署的注册表tutorial。如果你有问题,请更新问题,我会尽力帮助你。此外,这个中等的article可以给你一些想法(但要注意,docker撰写文件需要一些编辑,因为它不能在文章中发布的形式中工作)。
https://stackoverflow.com/questions/55661067
复制相似问题