我正在 GKE 上运行一个 K8s 集群,在该集群上部署了 harbor,并且我已将其在特定域上公开可用:“harb.pop.com”。
我创建了一个 kubernetes 部署,它使用此注册表中的映像并按如下方式配置它:
api版本:apps/v1 种类:部署 元数据: 名称:木星 标签: 应用:木星 规格: 副本:1 选择器: 匹配标签: 应用:木星 模板: 元数据: 标签: 应用:木星 规格: #serviceAccountName:构建机器人 容器: - 名称:木星 图片:harb.pop.com/sam-test-project/jupiter-app:latest 端口: - 集装箱端口:80 图像拉取秘密: - 名称:harborloginsecret
此部署使用带有以下密钥的 imagepullsecrets 来通过 Harbor 进行身份验证:
api版本:v1 种类:秘密 元数据: 名称:harborloginsecret 类型: 不透明 数据: 用户名:YWRtaW4=#admin 密码:SGFyYm9yMTIzNDU=#Harbor12345
这是一个管理员帐户,我可以使用它登录公开可用的 Harbor 注册表,并且我可以确认项目和图像存储库中存在图像。但是,当 pod 尝试部署时,我不断收到此错误: 无法提取图像“harb.pop.com/sam-test-project/jupiter-app”:无法提取和解压图像“harb.pop.com/sam-test-project/jupiter-app:latest”:无法解决参考“harb.pop.com/sam-test-project/jupiter-app:latest”:HEAD 请求到 https://harb.pop.com/v2/sam-test-project/jupiter-app 的意外状态/清单/最新:401未经授权
我尝试在 Harbor 中创建一个机器人帐户,并对所有内容都拥有完全权限,但仍然无法正确进行身份验证。鉴于港口后端是 GCS 存储桶,我是否需要添加任何 GCP IAM 权限?或者,当 Pod 部署在与我的 Harbor Pod 不同的命名空间中时,我是否需要向部署授予 GKE 服务帐户?我不知道为什么这不起作用,所以任何帮助将不胜感激
您的秘密类型错误。您需要创建秘密,其类型应为 kubernetes.io/dockerconfigjson
这样做的一种方法是这样的。
kubectl create secret generic harborloginsecret \
--from-file=.dockerconfigjson=<.docker/config.json> \
--type=kubernetes.io/dockerconfigjson