我的问题类似于使用 GitLab 的 runner 部署到 Kubernetes 集群,但遗憾的是没有得到解决方案。
我有一个 gitlab 管道作业,部署到名为 的 AKS 集群。该管道在 gitlab 运行器上执行,该运行器部署在名为 的不同 kubernetes 集群上。
使用 Helm Chart 在集群上成功部署 gitlab Agent,同时在集群上成功部署 runner。
但是,由于可能存在权限问题,运行器目前无法部署到集群。我已经创建了服务帐户,但不知何故,部署继续使用创建命名空间时创建的默认服务帐户。
来自管道的错误:
helm upgrade "test-${ENVIRONMENT}" ./helloworld-chart --install -n $NAMESPACE -f "./helloworld-chart/values.yaml"
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /builds/test-deploy-agent-ci.tmp/KUBECONFIG
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /builds/test-deploy-agent-ci.tmp/KUBECONFIG
***Error: query: failed to query with labels: secrets is forbidden: User "system:serviceaccount:test-runner:default" cannot list resource "secrets" in API group "" in the namespace "default"***
问题: 如何为不同集群上的 gitlab 运行程序提供访问权限,以在同时运行 gitlab 代理的不同集群上运行部署?
注意:我创建了一个服务帐户,生成了密钥并生成了一个 config.toml 文件。根据一些谷歌搜索,我应该在 helm 部署期间将此配置文件传递给运行器,但不知道如何执行此操作?
将不胜感激任何线索。
终于想通了。部署过程由 gitlab 代理处理,该代理作为目标 k8s 集群上的容器运行。 解决方案是使用代理上下文。
我在管道脚本中添加了 "kubectl config get-contexts" 来确定我连接到的集群,有趣的是,我没有看到运行者集群,而是看到了 gitlab 上的代理集群。
这是管道执行日志的示例:
$ kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
poc-primary-agent gitlab agent:0000
因此,在您的 .gitlab-ci.yml 中,请务必执行以下操作:
kubectl config use-context poc-primary-agent