使用任何您想要的注册表没有任何限制。如果您只是在pod规范中使用图像名称(例如,image:nginx),则图像将从公共docker hub注册表中提取,标记为:latest
正如Kubernetes中所提到的 文件 :
容器的image属性支持与语法相同的语法 docker命令,包括私有注册表和标记。私人的 注册管理机构可能需要密钥才能从中读取图像。 使用Google Container Registry Kubernetes原生支持 谷歌集装箱登记处(GCR) ,在Google上运行时 计算引擎(GCE)。如果您在GCE或Google上运行群集 Kubernetes Engine,只需使用完整的图像名称(例如 gcr.io/my_project/image:tag)。群集中的所有pod都将读取 访问此注册表中的图像。 使用AWS EC2 Container Registry Kubernetes原生支持 AWS EC2容器注册表 ,当节点是AWS EC2实例时。 只需使用完整的图像名称(例如 Pod中的ACCOUNT.dkr.ecr.REGION.amazonaws.com/imagename:tag) 定义。可以创建pod的群集的所有用户都可以 运行使用ECR注册表中任何图像的pod。 使用Azure容器注册表(ACR) 使用时 Azure容器注册表 您可以使用admin用户或a进行身份验证 服务负责人。在任何一种情况下,验证都是通过标准完成的 Docker身份验证。这些指令假定使用azure-cli命令 线工具。 您首先需要创建一个注册表并生成凭据,然后完成 有关这方面的文档可以在 Azure容器注册表 文件 。 配置节点以对专用存储库进行身份验证 以下是配置节点以使用私有节点的建议步骤 注册表中。在此示例中,在桌面/笔记本电脑上运行这些: 为要使用的每组凭据运行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 醇>
容器的image属性支持与语法相同的语法 docker命令,包括私有注册表和标记。私人的 注册管理机构可能需要密钥才能从中读取图像。
Kubernetes原生支持 谷歌集装箱登记处(GCR) ,在Google上运行时 计算引擎(GCE)。如果您在GCE或Google上运行群集 Kubernetes Engine,只需使用完整的图像名称(例如 gcr.io/my_project/image:tag)。群集中的所有pod都将读取 访问此注册表中的图像。
Kubernetes原生支持 AWS EC2容器注册表 ,当节点是AWS EC2实例时。 只需使用完整的图像名称(例如 Pod中的ACCOUNT.dkr.ecr.REGION.amazonaws.com/imagename:tag) 定义。可以创建pod的群集的所有用户都可以 运行使用ECR注册表中任何图像的pod。
使用时 Azure容器注册表 您可以使用admin用户或a进行身份验证 服务负责人。在任何一种情况下,验证都是通过标准完成的 Docker身份验证。这些指令假定使用azure-cli命令 线工具。
您首先需要创建一个注册表并生成凭据,然后完成 有关这方面的文档可以在 Azure容器注册表 文件 。
以下是配置节点以使用私有节点的建议步骤 注册表中。在此示例中,在桌面/笔记本电脑上运行这些:
$HOME/.docker/config.json
nodes=$(kubectl get nodes -o jsonpath='{range.items[*].metadata}{.name} {end}')
nodes=$(kubectl get nodes -o jsonpath='{range .items[*].status.addresses[?(@.type=="ExternalIP")]}{.address} {end}')
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 每个命名空间。 醇>
有许多配置私有注册表的解决方案。 以下是一些常见用例和建议的解决方案。
.docker/config.json
AlwaysPullImages
imagePullSecrets
考虑阅读 从私人注册表中提取图像 如果您决定使用私人注册表,请记录。
有三种类型的注册管理机构:
正如您所说,在公共注册表中,例如Docker Hub,您可以拥有私有映像。
私有和受限制的注册管理机构显然更安全,因为其中一个甚至没有暴露于互联网(理想情况下),另一个需要凭据。
我猜你可以用它们中的任何一个达到可接受的安全级别。所以,这是选择的问题。如果您觉得您的应用程序很重要,并且您不想冒任何风险,那么您应该在GCR或私有注册表中使用它。
如果您觉得它很重要,但并不重要,您可以将它放在任何公共存储库中,使其成为私有的。这将提供一层安全性。