首页 > 解决方案 > 如何在 gitlab ci 中修复 k8s 命名空间权限

问题描述

当我在玩 K8s 部署和 Gitlab CI 时,我的部署陷入了状态ContainerStarting

为了重置它,我删除了 K8s 命名空间,使用kubectl delete namespaces my-namespace.

现在我的 Gitlab 跑步者向我展示

$ ensure_namespace
Checking namespace [MASKED]-docker-3
error: the server doesn't have a resource type "namespace"
error: You must be logged in to the server (Unauthorized)

我认为这与 RBAC 有关,并且很可能 Gitlab 使用一些参数和权限创建了该名称空间(但我不知道确切的时间和方式),由于我的删除,这些现在丢失了。

有人知道如何解决这个问题吗?

标签: kubernetesgitlab-ci

解决方案


就我而言,我必须删除 Gitlab 数据库中的命名空间,因此 gitlab 会读取服务帐户和命名空间:

在 gitlab 机器或任务运行器上输入 PostgreSQL 控制台:

gitlab-rails dbconsole -p

然后选择数据库:

\c gitlabhq_production

下一步是找到被删除的命名空间:

SELECT id, namespace FROM clusters_kubernetes_namespaces;

取命名空间的 id 来删除它:

DELETE FROM clusters_kubernetes_namespaces WHERE id IN (6,7);

现在您可以重新启动管道,并将读取命名空间和服务帐户。


推荐阅读