是否可以全局(或至少每个命名空间),配置kubernetes在连接到私有仓库时始终使用图像拉秘密?有两种用例:
我知道可以在service account basis上执行此操作,但是如果不编写控制器将其添加到每个创建的新服务帐户中,它将会变得有点混乱。
是否有办法全局设置,如果kube试图从注册表X拉出它使用秘密Y?
谢谢
据我所知,通常默认的serviceAccount负责拉动图像。要轻松地将imagePullSecrets添加到serviceAccount,您可以使用patch命令:
kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "mySecret"}]}'
可以在脚本中使用kubectl patch
,该脚本在serviceAccounts上跨所有名称空间插入imagePullSecrets。
如果管理多个命名空间太复杂,您可以查看kubernetes-replicator,它会在命名空间之间同步资源。
解决方案2: This section of the doc解释了如何在节点基础上设置私有注册表:
以下是配置节点以使用私有注册表的建议步骤。在此示例中,在桌面/笔记本电脑上运行这些:
- 为要使用的每组凭据运行
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复制到上面的搜索路径列表之一。例如: for $ in $ nodes;做scp~ / .docker / config.json root @ $ n:/var/lib/kubelet/config.json; DONE
解决方案3: 我发现不需要在部署/ serviceAccount基础上设置imagePullSecret的(非常脏!)方式是:
docker pull myrepo/image:tag
。
2.2。使用像docker-puller这样的脚本或工具来自动化该过程。好吧,我想我不需要解释那是多么丑陋。
PS:如果有帮助,我在kubernetes / kops上发现an issue关于为私有注册表创建全局配置的功能。
两个简单的问题,你在哪里运行你的k8s集群?您的注册表在哪里?这里有一些方法可以解决您的问题:https://kubernetes.io/docs/concepts/containers/images/#using-a-private-registry