|
1
|
| Necevil · 技术社区 · 7 年前 |
|
|
1
3
DR gitlab ci kubernetes integration创建的集群在不修改节点权限(作用域)的情况下,将无法从与容器映像相同的项目中的GCR注册表中提取映像。
不要手动修改权限,而是创建一个新的节点池,该池具有访问所需GCP服务的适当范围。 以下是我用来参考的一些资源:
创建一个适当作用域的节点池通常如下所示
如果您不确定所需作用域的名称是什么,您可以在这里看到作用域和作用域别名的完整列表: https://cloud.google.com/sdk/gcloud/reference/container/node-pools/create 对我来说,我做了gke-default(和我的其他集群一样)和sql-admin。原因是我需要在构建的过程中能够访问云SQL中的SQL数据库,我不想连接到公共IP来实现这一点。 GKE默认范围(供参考)
与上面相比,Gitlab CI创建的群集具有更多的锁定权限(只有这两个: https://www.googleapis.com/auth/logging.write , https://www.googleapis.com/auth/monitoring网站 ): 显然,将集群配置为所需的最小权限是确保实现这一点的方法。一旦你发现了这是什么,并创建了新的适当范围的节点池… 列出节点:
您刚刚创建的(最新的)具有新的设置,而旧的选项是可以从GCR中提取的默认Gitlab集群。 然后:
在这之后,你想排干:
我遇到了这样的问题:我安装了一个gitlab运行程序,这意味着由于用于控制它的本地数据/守护进程集,我无法正常地排出pods。 因为这个原因,一旦我记录了我的节点,我就从kubectl中删除了该节点(不确定这是否会导致问题,但对我来说没问题)。删除节点后,需要删除Gitlab创建的“默认池”节点池。 列出节点池:
查看Gitlab创建的旧范围:
检查您是否有正确的新作用域(刚刚添加的作用域):
如果新节点池具有正确的作用域,则部署现在可以删除默认池:
在我个人的情况下,我仍在努力找出如何允许访问私有网络(即通过私有IP访问云SQL),但我现在可以拉我的图像,所以我已经走到一半了。 我想就是这样,希望它能帮你节省几分钟! |
|
|
2
1
默认情况下,由Gitlab CI的Kubernetes集成创建的集群创建的集群节点是以对Google云服务的最小权限(作用域)创建的。 您可以在集群的GCP控制台仪表板上看到这一点,向下滚动到“权限”部分并查找“存储”:
这本质上意味着在Gitlab CI Kubernetes集成集群中运行的节点将没有从GCR注册表中提取图像所需的默认GCR注册表(只读)权限。 这也意味着(据我所知),即使您授予服务帐户访问GCR注册表的适当权限,它仍然不起作用,不完全确定我是否正确设置了服务帐户,但我相信我做到了。 伟大的。 如何修复权限基本上你有两个选择。第一种方法是创建一个集群(即Gitlab-Kubernetes集成之外),然后按照手册中的“连接到现有集群”说明将Gitlab项目重新连接到该集群,如下所示: https://gitlab.com/help/user/project/clusters/index#adding-an-existing-kubernetes-cluster 第二个选项是修改您的权限,但这更复杂。 |