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

时间:2018-06-12 22:35:44

标签: docker kubernetes google-cloud-platform containers dockerhub

是否有可能将私有映像从Docker Hub提取到Google Cloud Kubernetes群集? 这是推荐的,还是我需要将我的私有图片也推送到Google Cloud?

我阅读了文档,但我发现没有什么可以解释清楚这一点。似乎有可能,但我不知道是否推荐它。

2 个答案:

答案 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

中找到      

配置节点以验证私有存储库

     

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

     
      
  1. 为您要使用的每组凭据运行docker login [server]。这会更新$HOME/.docker/config.json
  2.   
  3. 在编辑器中查看$HOME/.docker/config.json,确保其中只包含您要使用的凭据。
  4.   
  5. 获取节点列表,例如:      
        
    • 如果您想要名称: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}')
    •   
  6.   
  7. 将本地.docker / config.json复制到每个节点上root的主目录。      
        
    • 例如:for n in $nodes; do scp ~/.docker/config.json root@$n:/root/.docker/config.json; done
    •   
  8.   

用例:

  

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

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

如果您决定使用私有注册表,请考虑阅读Pull an Image from a Private Registry文档。

答案 1 :(得分:0)

有三种类型的注册管理机构:

  1. 公共(Docker Hub,Docker Cloud,Quay等)
  2. Private:这将是在本地网络上运行的注册表。一个例子是运行带有注册表图像的docker容器。
  3. 受限制:这是一个需要一些凭据才能验证的注册表。谷歌容器注册表(GCR)就是一个例子。
  4. 正如您所说,在Docker Hub等公共注册表中,您可以拥有私有映像。

    私人和受限制的注册管理机构显然更安全,因为其中一个甚至没有暴露于互联网(理想情况下),另一个需要凭证。

    我猜你可以用任何一个达到可接受的安全级别。所以,这是选择的问题。如果您觉得您的申请很重要,并且您不想承担任何风险,那么您应该将其置于GCR或私人注册管理机构中。

    如果您觉得它很重要,但并不重要,那么您可以在任何公共存储库中使用它,将其设置为私有。这将提供一层安全保障。