是否有可能将私有映像从Docker Hub提取到Google Cloud Kubernetes群集? 这是推荐的,还是我需要将我的私有图片也推送到Google Cloud?
我阅读了文档,但我发现没有什么可以解释清楚这一点。似乎有可能,但我不知道是否推荐它。
答案 0 :(得分:2)
使用您想要的任何注册表没有任何限制。如果您只是在pod规范中使用图像名称(例如,image:nginx),则图像将从公共docker hub注册表中提取,标记为:latest
如Kubernetes documentation所述:
容器的image属性支持与语法相同的语法 docker命令,包括私有注册表和标记。私人的 注册管理机构可能需要密钥才能从中读取图像。
使用Google容器注册表
Kubernetes在Google上运行时对Google Container Registry (GCR)提供原生支持 计算引擎(GCE)。如果您在GCE或Google上运行群集 Kubernetes Engine,只需使用完整的图像名称(例如 gcr.io/my_project/image:tag)。群集中的所有pod都将读取 访问此注册表中的图像。
使用AWS EC2容器注册表
当节点是AWS EC2实例时,Kubernetes对AWS EC2 Container Registry具有本机支持。 只需使用完整的图像名称(例如 Pod中的ACCOUNT.dkr.ecr.REGION.amazonaws.com/imagename:tag) 定义。可以创建pod的群集的所有用户都可以 运行使用ECR注册表中任何图像的pod。
使用Azure容器注册表(ACR)
使用Azure Container Registry时,您可以使用管理员用户或管理员身份验证 服务负责人。在任何一种情况下,验证都是通过标准完成的 Docker身份验证。这些指令假定使用azure-cli命令 线工具。
首先需要创建一个注册表并生成凭据,然后完成 有关此文档的文档可以在Azure container registry documentation。
中找到配置节点以验证私有存储库
以下是配置节点以使用私有节点的建议步骤 注册表中。在此示例中,在桌面/笔记本电脑上运行这些:
- 为您要使用的每组凭据运行docker login [server]。这会更新
$HOME/.docker/config.json
。- 在编辑器中查看
$HOME/.docker/config.json
,确保其中只包含您要使用的凭据。- 获取节点列表,例如:
- 如果您想要名称:
nodes=$(kubectl get nodes -o jsonpath='{range.items[*].metadata}{.name} {end}')
- 如果您想获取IP:
nodes=$(kubectl get nodes -o jsonpath='{range .items[*].status.addresses[?(@.type=="ExternalIP")]}{.address} {end}')
- 将本地.docker / config.json复制到每个节点上root的主目录。
醇>
- 例如:
for n in $nodes; do scp ~/.docker/config.json root@$n:/root/.docker/config.json; done
有许多配置私有注册表的解决方案。 以下是一些常见用例和建议的解决方案。
- 群集仅运行非专有(例如开源)图像。无需隐藏图像。
- 在Docker集线器上使用公共映像。
- 无需配置。
- 在GCE / Google Kubernetes Engine上,自动使用本地镜像来提高速度和可用性。
- 群集运行一些专有图像,这些图像应隐藏给公司外部的人员,但对所有群集用户可见。
- 使用托管的私有Docker注册表。
- 它可能托管在Docker Hub或其他地方。
- 如上所述在每个节点上手动配置
.docker/config.json
。- 或者,在防火墙后面使用开放读取访问权限运行内部私有注册表。
- 不需要Kubernetes配置。
- 或者,在使用GCE / Google Kubernetes Engine时,请使用该项目的Google Container Registry。
- 使用群集自动扩展比使用手动节点配置更好。
- 或者,在更改节点配置不方便的群集上,使用 imagePullSecrets 。
- 具有专有图像的群集,其中一些需要更严格的访问控制。
- 确保AlwaysPullImages准入控制器处于活动状态。否则,所有Pod都可能访问所有图像。
- 将敏感数据移至“秘密”资源,而不是将其打包在图像中。
- 多租户群集,其中每个租户都需要拥有私有注册表。
醇>
- 确保
AlwaysPullImages
许可控制器处于活动状态。否则,所有租户的所有Pod都可能访问所有租户 图像。- 运行需要授权的私人注册表。
- 为每个租户生成注册表凭据,保密,并为每个租户命名空间填充机密。
- 租户将该秘密添加到每个命名空间的
imagePullSecrets
。
如果您决定使用私有注册表,请考虑阅读Pull an Image from a Private Registry文档。
答案 1 :(得分:0)
有三种类型的注册管理机构:
正如您所说,在Docker Hub等公共注册表中,您可以拥有私有映像。
私人和受限制的注册管理机构显然更安全,因为其中一个甚至没有暴露于互联网(理想情况下),另一个需要凭证。
我猜你可以用任何一个达到可接受的安全级别。所以,这是选择的问题。如果您觉得您的申请很重要,并且您不想承担任何风险,那么您应该将其置于GCR或私人注册管理机构中。
如果您觉得它很重要,但并不重要,那么您可以在任何公共存储库中使用它,将其设置为私有。这将提供一层安全保障。