访问Docker私有仓库应使用https

3
我有一个私人仓库,通过https协议访问。但是Kubernetes + Docker总是尝试使用http协议http://myserver.com:8080而不是https://myserver.com:8080

如何强制使用https协议?

这里是声明Pod的yaml文件片段:

  containers:
    - name: apl
      image: myserver.com:8080/myimage

我的环境详情如下:

  • CentOS 7.3
  • Docker 18.06
  • Kubernetes (Minikube) 1.13.1

Kubernetes日志中的错误信息:

  Normal   Pulling    30s (x4 over 2m2s)  kubelet, minikube  pulling image "docker.mydomain.com:30500/vision-ssh"
  Warning  Failed     30s (x4 over 2m2s)  kubelet, minikube  Failed to pull image "docker.mydomain.com:30500/vision-ssh": rpc error: code = Unknown desc = Error response from daemon: Get http://docker.mydomain.com:30500/v2/: net/http: HTTP/1.x transport connection broken: malformed HTTP response "\x15\x03\x01\x00\x02\x02"
  Warning  Failed     30s (x4 over 2m2s)  kubelet, minikube  Error: ErrImagePull
  Warning  Failed     19s (x6 over 2m2s)  kubelet, minikube  Error: ImagePullBackOff
  Normal   BackOff    4s (x7 over 2m2s)   kubelet, minikube  Back-off pulling image "docker.fccma.com:30500/vision-ssh"

如果我在图像名称中指定协议,它会抱怨:
couldn't parse image reference "https://docker.mydomain.com:30500/vision-ssh": invalid reference format

为了创建镜像仓库,我按照 指南 进行操作。镜像仓库已经被保护(使用 HTTPS 协议,并受到用户密码的保护)。

3个回答

3
在位于 /etc/hosts 文件中,服务器 docker.mydomain.com 被映射为 127.0.0.1。我在 docker 文档中阅读到本地镜像仓库始终被认为是不安全的。
如果我使用一个映射到外部 IP 的名称,那么 Docker 将尝试使用 https

1
你的私有Docker注册表可能没有得到保护。如果它是受保护的私有注册表,它总是使用https,否则它将使用http。
更多细节请参考文档:
Docker uses the https:// protocol to communicate with a registry, unless the registry is allowed to be accessed over an insecure connection. Refer to the insecure registries section for more information.

https://docs.docker.com/engine/reference/commandline/dockerd/#insecure-registries

所以要强制使用https,需要保护您的注册表。有很多文章可以在网络上找到来保护您的注册表。


已经安全了。按照这个指南进行操作。 - david.perez

0

运行https代理服务,面向容器注册表服务。可以考虑使用nginx作为https代理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接