如何访问本地 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。
这些是我们遵循的步骤。
- 在 gcloud 中创建一个具有 gcr 权限的服务帐户。
- 为服务帐户创建密钥。
- 添加 kubectl 秘密。
- 在 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可能是一个很好的帮助
我们拥有 运行 内部部署的 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。 这些是我们遵循的步骤。
- 在 gcloud 中创建一个具有 gcr 权限的服务帐户。
- 为服务帐户创建密钥。
- 添加 kubectl 秘密。
- 在 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可能是一个很好的帮助