这是一个有点愚蠢的设置,但我现在要看的是:
nginx这样的公共图像,我可以从码头集线器中提取图像,而不是在本地托管),那么我就不希望受到移动图像的MITM攻击的攻击。我的计划是遵循这个StackOverflow帖子中的示例:生成一个自签名证书,然后使用该证书启动Docker注册中心。然后使用DaemonSet在集群中的所有节点上使此证书可信。
现在您已经完成了设置,下面是我的问题的关键:在我的集群中,可以通过简单的主机名(例如" Docker - registry ")访问我的docker注册表,但是在集群之外,我需要通过节点IP地址或指向节点或负载均衡器的域名访问它。
在生成自我签名证书时,我被要求为证书提供一个CN / FQDN。我输入了“停靠者-注册表”--我计划使用的内部主机名。然后,我尝试在本地访问我的注册表,将图像推送到它:
> docker pull ubuntu
> docker tag ubuntu example.com:5000/my-ubuntu
> docker push example.com:5000/my-ubuntu
The push refers to repository [example.com:5000/my-ubuntu]
Get https://example.com:5000/v2/: x509: certificate is valid for docker-registry, not example.com我可以为example.com而不是docker-registry生成一个证书,但是我担心如果像这样提供外部域而不是内部主机名,那么在集群中配置服务或连接到注册表就会出现问题。
这就是为什么我想知道我的自我签名证书是否适用于,,example.com,和 docker-registry。如果没有,另外两种可接受的解决办法是:
如果这三种选择都不可能的话,那么我就可以放弃从本地机器上推送图像,开始在集群中构建映像的过程--但我希望推迟到以后。我现在学到了很多东西,尽量避免被切碎的东西分散注意力。
发布于 2020-11-01 18:38:53
解决问题的最简单方法可能是使用Docker的不安全注册功能。您在文章中提到的这个问题(这将使您以后面临安全风险)可能不适用,因为该功能通过指定要信任的特定IP地址或主机名来工作。
例如,您可以配置以下内容
{
"insecure-registries" : [ "10.10.10.10:5000" ]
}如果没有TLS,您的Docker守护进程将访问的唯一IP地址是主机和端口号上的IP地址。
如果您不想这样做,那么您需要获得一个可信的TLS证书。您提到的关于每个证书具有多个名称的问题通常由证书中的主语替代名称字段处理。(事实上,Kubernetes相当多地使用了这一特性)。
https://stackoverflow.com/questions/64635307
复制相似问题