问题描述
我已经设置了一个私有容器注册表,它已成功与 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 区域来实现。
验证您是否将集群设置为私有。