我有一个私有注册表,可以通过https协议进行访问。 但是Kubernetes + Docker始终尝试使用http协议http://myserver.com:8080而不是https://myserver.com:8080。
如何强制使用https协议?
我的yaml
文件中声明了Pod的片段:
containers:
- name: apl
image: myserver.com:8080/myimage
我的环境的详细信息:
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协议并受用户/密码保护)。
答案 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代理