Google Cloud Kubernetes 访问私有 Docker Hub 托管的图像

Joh*_*ler 6 containers docker google-cloud-platform kubernetes dockerhub

是否可以将私有镜像从 Docker Hub 拉到 Google Cloud Kubernetes 集群?这是推荐的,还是我需要将我的私有图像也推送到 Google Cloud?

我阅读了文档,但没有发现任何可以清楚地解释我的内容。似乎是可能的,但我不知道是否值得推荐。

VAS*_*VAS 3

使用任何您想要的注册表都没有限制。如果您仅在 pod 规范中使用镜像名称(例如镜像:nginx),镜像将从公共 docker hub 注册表中提取,标签假定为:latest

\n\n

正如 Kubernetes文档中提到的:

\n\n
\n

容器的镜像属性支持与 docker 命令相同的语法,包括私有注册表和标签。私有注册表可能需要密钥才能从中读取图像。

\n\n

使用 Google 容器注册表

\n\n

当在 Google\n 计算引擎 (GCE) 上运行时, Kubernetes 对Google 容器注册表 (GCR)具有本机支持。如果您在 GCE 或 Google\n Kubernetes Engine 上运行集群,只需使用完整映像名称(例如\n gcr.io/my_project/image:tag)。集群中的所有 Pod 都可以读取此注册表中的映像。

\n\n

使用 AWS EC2 容器注册表

\n\n

当节点是 AWS EC2 实例时, Kubernetes 对AWS EC2 容器注册表具有本机支持。\n 只需在 Pod 中使用完整映像名称(例如\n ACCOUNT.dkr.ecr.REGION.amazonaws.com/imagename:tag)\ n 定义。集群中所有可以创建 Pod 的用户都可以运行使用 ECR 注册表中任何映像的 Pod。

\n\n

使用 Azure 容器注册表 (ACR)

\n\n

使用Azure 容器注册表时,您可以使用管理员用户或服务主体进行身份验证。\n 无论哪种情况,身份验证都是通过标准 Docker 身份验证完成的。这些说明假定使用 azure-cli 命令行工具。

\n\n

您首先需要创建注册表并生成凭据,完整的\n 文档可以在Azure 容器注册表\n 文档中找到。

\n\n

配置节点以对私有存储库进行身份验证

\n\n

以下是配置节点以使用私有注册表的建议步骤。在此示例中,在您的台式机/笔记本电脑上运行这些:

\n\n
    \n
  1. 为您要使用的每组凭据运行 docker login [server]。此更新$HOME/.docker/config.json。
  2. \n
  3. 在编辑器中查看$HOME/.docker/config.json以确保它仅包含您要使用的凭据。
  4. \n
  5. 获取节点列表,例如:\n \n
      \n
    • 如果你想要名字:nodes=$(kubectl get nodes -o jsonpath=\'{range.items[*].metadata}{.name} {end}\')
    • \n
    • 如果你想获取IP:nodes=$(kubectl get nodes -o jsonpath=\'{range\n .items[*].status.addresses[?(@.type=="ExternalIP")]}{.address}\n {end}\')
    • \n
  6. \n
  7. 将本地 .docker/config.json 复制到每个节点上 root 的主目录。\n \n
      \n
    • 例如:for n in $nodes; do scp ~/.docker/config.json root@$n:/root/.docker/config.json; done
    • \n
  8. \n
\n
\n\n

用例:

\n\n
\n

有多种用于配置私有注册表的解决方案。\n以下是一些常见用例和建议的解决方案。

\n\n
    \n
  1. 仅运行非专有(例如开源)映像的集群。无需隐藏图像。\n \n
      \n
    • 使用 Docker hub 上的公共映像。\n \n
        \n
      • 无需配置。
      • \n
      • 在 GCE/Google Kubernetes Engine 上,会自动使用本地镜像来提高速度和可用性。
      • \n
    • \n
  2. \n
  3. 集群运行一些专有映像,这些映像对公司外部的人员应隐藏,但对所有集群用户可见。\n \n
      \n
    • 使用托管的私有 Docker 注册表。\n \n
        \n
      • 它可能托管在 Docker Hub 或其他地方。
      • \n
      • .docker/config.json如上所述在每个节点上手动配置。
      • \n
    • \n
    • 或者,在防火墙后面运行具有开放读取访问权限的内部私有注册表。\n \n
        \n
      • 无需 Kubernetes 配置。
      • \n
    • \n
    • 或者,在 GCE/Google Kubernetes Engine 上时,使用项目\xe2\x80\x99s Google 容器注册表。\n \n
        \n
      • 与手动节点配置相比,它更适合集群自动缩放。
      • \n
    • \n
    • 或者,在不方便更改节点配置的集群上,使用imagePullSecrets。
    • \n
  4. \n
  5. 具有专有映像的群集,其中一些需要更严格的访问控制。\n \n
      \n
    • 确保 AlwaysPullImages 准入控制器处于活动状态。否则,所有 Pod 都可能有权访问所有映像。
    • \n
    • 将敏感数据移动到 \xe2\x80\x9cSecret\xe2\x80\x9d 资源中,而不是将其打包在映像中。
    • \n
  6. \n
  7. 多租户群集,其中每个租户都需要自己的专用注册表。\n \n
      \n
    • 确保AlwaysPullImages准入控制器处于活动状态。否则,所有租户的所有 Pod 都可能有权访问所有映像。\n
    • \n
    • 需要授权运行私人注册表。
    • \n
    • 为每个租户生成注册表凭据,放入机密中,并将机密填充到每个租户命名空间。
    • \n
    • 租户将该秘密添加到imagePullSecrets每个名称空间。
    • \n
  8. \n
\n
\n\n

如果您决定使用 私有注册表,请考虑阅读从私有注册表中提取映像文档。

\n