使用https访问Docker私有注册表

时间:2019-01-29 11:35:09

标签: docker kubernetes

我有一个私有注册表,可以通过https协议进行访问。 但是Kubernetes + Docker始终尝试使用http协议http://myserver.com:8080而不是https://myserver.com:8080

如何强制使用https协议?

我的yaml文件中声明了Pod的片段:

  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

遵循此guide以便创建图像注册表。它已经被保护(HTTPS协议并受用户/密码保护)。

3 个答案:

答案 0 :(得分:2)

/etc/hosts文件中,服务器docker.mydomain.com映射到127.0.0.1。我在docker docs中读到,本地注册表始终被认为是不安全的。 如果我使用映射到外部IP的名称,则Docker会尝试https

答案 1 :(得分: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,请保护您的注册表。网上有很多文章可以保护您的注册表安全。

答案 2 :(得分:0)

在容器注册表服务之前运行https代理服务。将nginx视为https代理