使用标签查询失败:禁止秘密:用户“system:serviceaccount:gitlab-runner:default”无法列出 API 组“”中的资源“秘密”

问题描述 投票:0回答:1

我正在尝试通过 gitlab CI/CD 管道将我的 Web 应用程序部署到 Rancher kubernetes 集群中。为此,我使用下面的 helm 命令。

注意:我只在这里添加了相关作业,而不是完整的 .gitlab-ci.yaml 文件。

.deploy:
  stage: deploy
  variables:
    IMAGE_TAG: $CI_COMMIT_SHA
    NAMESPACE: webapp-${ENV}
  script:
    - >
      helm upgrade --install -n ${NAMESPACE} --create-namespace webapp ./helm -f helm/values.yaml --wait
      --set backend.image="${CI_REGISTRY_IMAGE}/backend"
      --set backend.tag="${IMAGE_TAG}"
      --set frontend.image="${CI_REGISTRY_IMAGE}/frontend"
      --set frontend.tag="${IMAGE_TAG}"

.helm-apply:
  stage: deploy
  image: 
      name: alpine/helm:3.13.3
      entrypoint: [""]
  before_script:
    - mkdir -p ~/.kube/
    - echo "$KUBECONFIG_B64" | base64 -d > ~/.kube/config
    - chmod 600 -R ~/.kube
  tags:
    - docker

helm-lint-dev:
  extends: 
    - .shared-helm-lint
  needs:
    - build:branch

helm-template-dev:
  extends: 
    - .shared-helm-template
  needs:
    - build:branch

deploy-helm-dev:
  extends: 
    - .dev
    - .helm-apply
    - .deploy
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != 'schedule'
    - when: manual
  needs:
    - helm-lint-dev
    - helm-template-dev

运行 gitlab 管道后,我收到错误

错误:查询:无法使用标签查询:禁止秘密:用户“system:serviceaccount:gitlab-runner:default”无法在命名空间“webapp-dev”中的API组“”中列出资源“秘密”

我已经定义了 gitlab CI/CD 变量中的所有变量,包括 Kubeconfig 文件的 base64 编码版本。

注意:当我使用 minikube 在本地测试时,一切正常。所以我猜 helm 图表和 kubeconfig 文件以及 rancher 集群中都没有问题。

对此错误以及如何修复有什么想法吗?预先感谢。

gitlab gitlab-ci kubernetes-helm
1个回答
0
投票

我不知道 kubeconfig 文件里面有什么,但从你的错误来看,我猜它的凭证是

gitlab-runner
serviceAccount

如果您从 gitlab 运行程序变量和变量文件中向您的 helm 版本提供所有变量,这并不重要。 Helm 仍然需要访问目标命名空间上的 Secret,因为它正在 Secret 中记录 Helm 发布的历史记录。所以至少,它必须能够列出秘密(我相信可以检查历史记录)并创建秘密(以保存每个版本/升级)。

将这些权限添加到您的 gitlab-runner 服务帐户并再次检查。

© www.soinside.com 2019 - 2024. All rights reserved.