gpt4 book ai didi

docker - 自签名证书能否保护多个 CN/FQDN?

转载 作者:行者123 更新时间:2023-12-02 20:40:22 26 4
gpt4 key购买 nike

这是一个有点愚蠢的设置,但这是我现在正在查看的内容:

  • 我正在学习 Kubernetes
  • 我想将自定义代码推送到我的 Kubernetes 集群,这意味着代码必须作为 Docker 镜像提供,可从 获得一些 Docker 存储库(默认为 Docker Hub)
  • 虽然我愿意在必要时为 Docker Hub 付费(尽管我宁愿避免),但我担心将我的自定义代码放在第三方服务上。 Sudden rate limits , security breaches , sudden ToS changes
  • 为此,我正在我的 Kubernetes 集群中运行我自己的 Docker 注册表
  • 我不想将 Kubernetes 节点上运行的 Docker 客户端配置为信任不安全 (HTTP) Docker 注册表。如果我确实选择从外部注册表中提取任何图像(例如,像 nginx 这样的公共(public)图像,我可能会从 Docker Hub 中提取而不是在本地托管),那么我不想在交换图像
  • 时容易受到 MITM 攻击
  • 最终,我将在集群中拥有一个构建工具(Jenkins 或其他),从 git 中提取我的代码,构建镜像,并将其推送到我的内部注册表。然后从注册表中提取的所有节点都存在于集群中。由于注册中心从不需要从集群外的源接收图像或将它们传递到集群外的源,因此注册中心不需要 NodePort 服务,而是可以作为 ClusterIP 服务.... 最终
  • 在我准备好最终设置之前,我会在本地机器上构建图像并希望将它们推送到注册表(来自互联网)
  • 因为我不打算让外部世界(最终)可以访问注册表,所以我不能使用 Let's Encrypt 为其生成有效证书(即使我让我的 Docker 注册表对外部世界可用,I can't use Let's Encrypt, anyway无需编写一些额外的代码来使用 certbot 或其他东西)

  • 我的计划是按照 this StackOverflow post 中的示例进行操作。 :生成自签名证书,然后使用该证书启动 Docker 注册表。然后使用 DaemonSet 使该证书在集群中的所有节点上都受信任。
    现在您已经完成了设置,这就是我的问题的症结所在:在我的集群中,我的 Docker 注册表可以通过一个简单的主机名(例如“docker-registry”)访问,但在我的集群之外,我需要通过一个指向节点或负载均衡器的节点 IP 地址或域名。
    在生成我的自签名证书时,我被要求为证书提供 CN/FQDN。我输入了“docker-registry”——我计划使用的内部主机名。然后我尝试在本地访问我的注册表以将图像推送到它:
    > 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 .如果不是,另外两个可接受的解决方案是:
  • 我可以告诉 Docker 客户端不要验证主机名,而只是隐式信任证书吗?
  • 我可以告诉 Docker 注册表提供两个 之一吗?不同证书基于用来访问它的主机名吗?

  • 如果这三个选项都不可行,那么我总是可以放弃从本地机器推送图像并开始在集群中构建图像的过程——但我希望把它推迟到以后。我现在学到了很多东西,并试图避免被无关紧要的事情分心。

    最佳答案

    解决问题的最简单方法可能是使用 Docker 的不安全注册表功能。您在帖子中提到的对此的担忧(它会在以后让您面临安全风险)可能不会适用,因为该功能通过指定要信任的特定 IP 地址或主机名来工作。
    例如,您可以配置类似

    {
    "insecure-registries" : [ "10.10.10.10:5000" ]
    }
    并且您的 Docker 守护程序在没有 TLS 的情况下将访问的唯一 IP 地址是该主机和端口号的 IP 地址。
    如果您不想这样做,那么您需要获得一个受信任的 TLS 证书。您提到的关于每个证书有多个名称的问题通常由 Subject Alternative Name 处理。证书中的字段。 (实际上 Kubernetes 使用了很多这个特性)。

    关于docker - 自签名证书能否保护多个 CN/FQDN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64635307/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com