我们拥有在本地运行的 kubernetes 集群,并且我们拥有 GCR 私有存储库。那么我们如何将该私有存储库访问到我的本地 kubernetes 集群,据我所知,我们可以使用 gcloud-sdk 但不可能在 kubernetes 集群的每个节点上安装 gcloud-sdk。
2 回答
我们曾经在 azure AKS 集群上部署 pod,而图像曾经来自 GCR。这些是我们遵循的步骤。
- 在 gcloud 中创建一个具有 gcr 权限的服务帐户。
- 为服务帐户创建密钥。
- 添加 kubectl 密码。
- 在 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
这个博客可能是一个很好的帮助
在 GKE 或 GCE 上运行的 Kubernetes 集群原生支持访问容器注册表,无需进一步配置。
正如您所提到的,您正在运行一个本地集群,您没有运行任何这些,只使用 GCP 的容器注册表,所以,虽然我没有机会测试这个(我在 Google 之外没有集群Cloud)该过程不应与从私有注册表中提取图像的过程不同。
在您的情况下,您可以使用 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>
在这种情况下,您的注册表服务器可能是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 被创建,然后描述 podkubectl describe pod private-reg
并看到类似于以下内容的事件序列:
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