GKE 从 GCP 内的私有存储库中提取图像

问题描述

我已经设置了一个私有容器注册表,它已成功与 bitbucket 集成。但是,我无法从 GKE 集群中提取图像。

我创建了一个角色为“Project Viewer”的服务帐户,以及该帐户的 json 密钥。然后我在运行的集群/命名空间中创建了秘密

kubectl create secret docker-registry gcr-json-key \
 --docker-server=gcr.io \
 --docker-username=_json_key \
 --docker-password="$(cat ~/code/bitbucket/miappsrl/miappnodeapi/secrets/registry/miapp-staging-e94050365be1.json)" \
 [email protected]

在我添加的部署文件

...
      imagePullSecrets:
    - name: gcr-json-key
...

但是当我应用部署时我得到

 ImagePullBackOff

当我执行 kubectl describe pod <pod_name> 时,我看到

Failed to pull image "gcr.io/miapp-staging/miappnodeapi": rpc error: code = UnkNown desc = Error response from daemon: Get https://gcr.io/v2/: dial tcp: lookup gcr.io on 169.254.169.254:53: no such host

我不知道我错过了什么,我知道它可以解析集群内的 dns,但不确定我应该添加什么

解决方法

如果 GKE 集群设置为私有,您需要设置 DNS 以访问容器注册表,从 documentation

要支持在服务边界内使用 Container Registry 或 Artifact Registry 的 GKE 私有集群,您首先需要配置您的 DNS 服务器,以便对注册表地址的请求解析为受限制的 VIP 受限制的 googleapis.com。您可以使用 Cloud DNS 私有 DNS 区域来实现。

验证您是否将集群设置为私有。