无法使用 OCI 将 Helm Chart 推送到 Google Cloud ArtifactRegistry

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

我正在尝试将 Helm Chart 推送到 Google Cloud OCI 注册表(Artifact Registry),但出现禁止错误:

helm push testapp-1.0.0.tgz oci://europe-north1-docker.pkg.dev/project-id/my-artifact-registry/

错误:授权失败:无法获取匿名令牌: 意外状态:403 Forbidden

看来我已经通过了身份验证,因为当我尝试推送它但没有 “oci://” 它工作正常:

helm chart push europe-north1-docker.pkg.dev/project-id/my-artifact-registry/charts/testapp:1.0.0

推送指的是存储库 [europe-north1-docker.pkg.dev/..]
参考:europe-north1-docker.pkg.dev/...
摘要:2757354aef8af2db48261d52c17c0df35a99d6fccaf016b0e67e167c391b69c7
大小:3.9 KiB
名称:测试应用程序
版本:1.0.0
1.0.0:推送到远程(1层,总共3.9 KiB)

我使用服务帐户 json 密钥登录到 helm 注册表,使用以下命令:

helm registry login -u _json_key_base64 --password <base_64_key> https://europe-north1-docker.pkg.dev

此服务帐户具有以下角色:

角色/artifactregistry.admin
角色/artifactregistry.repoAdmin
角色/artifactregistry.writer
角色/容器.开发人员
角色/存储.admin
角色/storage.objectViewer

是否需要在 GCP 中启用任何特定权限才能使用“OCI”协议?

或者需要启用任何服务吗?

或需要任何不同的身份验证?

我按照指示这里但没有成功

google-cloud-platform kubernetes-helm
3个回答
2
投票

这很有趣,但这不是我第一次遇到这种情况......当我将问题提交到 Stackoverflow 时,我突然想到了什么,我能够找到我的问题!!

无论如何,问题主要在于身份验证,其中登录的 URL 的格式应为:

https://LOCATION-docker.pkg.dev/PROJECT/REPOSITORY

像这样:

helm registry login -u _json_key_base64 --password <base_64_key> \
   https://europe-north1-docker.pkg.dev/project-id/my-artifact-registry

2
投票

我遇到了同样的问题,但使用的是 Cloudbuild。 如果这段代码可以帮助某人,我很高兴。

steps:
  - name: 'alpine/helm:3.9.1'
    id: 'helm package'
    args: ['package', '.']
  - name: 'alpine/helm:3.9.1'
    id: 'helm push'
    env:
      - 'HELM_REGISTRY_CONFIG=../builder/home/.docker/config.json'
    entrypoint: 'sh'
    args:
      - '-c'
      - |
        helm push --debug mylibchart-*.tgz oci://europe-west3-docker.pkg.dev/$PROJECT_ID/helm-registry

基本上,在我们想要推送 *.tgz 的步骤中,我们需要将 env HELM_REGISTRY_CONFIG 设置为等于 docker config.json 的默认路径。


0
投票

这有点愚蠢,但我正在从容器注册表转换到工件注册表,并且我忘记授予我的服务帐户对工件注册表的权限enter image description here,这导致了这个确切的错误。

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