【问题标题】:How to access gcloud private repository on on-premise kubernetes cluster?如何访问本地 kubernetes 集群上的 gcloud 私有存储库?
【发布时间】:2018-10-13 18:26:59
【问题描述】:

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

【问题讨论】:

    标签: kubernetes google-kubernetes-engine google-container-registry kubelet


    【解决方案1】:

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

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

    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 中使用秘密

    imagePullSecrets: - name: gcriosecret

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

    【讨论】:

      【解决方案2】:

      在 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 的秘密后,您可以配置 pod 以使用它从注册表中提取所需的图像,添加 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
      

      【讨论】:

      • 您好,这仅适用于 docker hub 或任何其他存储库。我们只需要谷歌云注册表,我们有本地 kubernetes 集群。
      • 您好,这应该对 Google Container Registry 或您从中提取图像的任何其他私有存储库有效,您需要指定您的 repo url,它看起来像 gcr.io/[your-project-id]
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-13
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      • 1970-01-01
      • 2018-10-19
      • 1970-01-01
      相关资源
      最近更新 更多