我正在尝试将 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”协议?
或者需要启用任何服务吗?
或需要任何不同的身份验证?
我按照指示这里但没有成功
这很有趣,但这不是我第一次遇到这种情况......当我将问题提交到 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
我遇到了同样的问题,但使用的是 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 的默认路径。