如何访问本地 kubernetes 集群上的 gcloud 私有存储库?

How to access gcloud private repository on on-premise kubernetes cluster?

我们拥有 运行 内部部署的 kubernetes 集群,并且我们拥有 GCR 私有存储库。那么我们如何访问该私有存储库到我的本地 kubernetes 集群,据我所知,我们可以使用 gcloud-sdk,但不可能在 kubernetes 集群的每个节点上安装 gcloud-sdk。

GKE 或 GCE 上的 Kubernetes 集群 运行 有 native support for accessing the container registry,不需要进一步配置。

正如您提到的,您是 运行 一个本地集群,但您不是 运行 这些中的任何一个,并且只使用来自 GCP 的容器注册表,所以,虽然我没有机会测试这个(我在 Google Cloud 之外没有集群)这个过程应该与 pulling an image from a private registry.

的过程没有什么不同

在您的情况下,您可以使用 gcr.io 注册表的身份验证凭据创建一个秘密,如下所示:

kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>

your-registry-server 在这种情况下可能是 https://gcr.io/[your-project-id]

当您创建了名为 regcred 的秘密后,您可以配置 pods 以使用它从注册表中添加一个 imagePullSecrets 来使用它来拉取所需的图像,如下所示:

apiVersion: v1
kind: Pod
metadata:
  name: private-reg
spec:
  containers:
  - name: private-reg-container
    image: [The image you want to pull]
  imagePullSecrets:
  - name: regcred

然后你可以通过部署这个pod来测试镜像是否被正确拉取:

kubectl create -f [your pod yaml]

等待 pod 创建,然后用 kubectl describe pod private-reg 描述 pod 并看到类似于以下的事件序列:

Events:
  Type    Reason                 Age   From                                                Message
  ----    ------                 ----  ----                                                -------
  Normal  Scheduled              4m    default-scheduler                                   Successfully assigned private-reg to gke-cluster-22-default-pool-e7830b6c-pxmt
  Normal  Pulling                4m    kubelet, gke-cluster-22-default-pool-e7830b6c-pxmt  pulling image "gcr.io/XXX/XXX:latest"
  Normal  Pulled                 3m    kubelet, gke-cluster-22-default-pool-e7830b6c-pxmt  Successfully pulled image ""gcr.io/XXX/XXX:latest"
  Normal  Created                3m    kubelet, gke-cluster-22-default-pool-e7830b6c-pxmt  Created container
  Normal  Started                3m    kubelet, gke-cluster-22-default-pool-e7830b6c-pxmt  Started container

我们曾经在 azure AKS 集群上部署 pods,图像过去来自 GCR。 这些是我们遵循的步骤。

  1. 在 gcloud 中创建一个具有 gcr 权限的服务帐户。
  2. 为服务帐户创建密钥。
  3. 添加 kubectl 秘密。
  4. 在 yaml 中使用 secret

gcloud iam service-accounts keys create gcr-docker-cred.json --iam-account=service-account-name@project-id.iam.gserviceaccount.com

添加 kubectl 秘密。

kubectl create secret docker-registry gcriosecret --docker-server=https://gcr.io --docker-username=_json_key --docker-email=user@example.com --docker-password="$(cat gcr-docker-cred.json)"

在 yaml 中使用 secret

imagePullSecrets: - name: gcriosecret

这个blog可能是一个很好的帮助