[minikube 文档中文翻译] 手册 - 注册表

手册 - 注册表

注册表

如何与注册表交互

使用私有注册表

GCR/ECR/ACR/Docker:minikube 有一个附加组件,registry-creds,它将凭证映射到 minikube 以支持从 Google Container Registry (GCR)、Amazon 的 EC2 Container Registry (ECR)、Azure Container Registry (ACR) 和 Private Docker 注册表中拉取镜像。您需要运行 minikube addons configure registry-credsminikube addons enable registry-creds 才能启动和运行。下面是一个例子:

1
2
3
4
5
6
7
8
9
10
11
$ minikube addons configure registry-creds
Do you want to enable AWS Elastic Container Registry? [y/n]: n

Do you want to enable Google Container Registry? [y/n]: y
-- Enter path to credentials (e.g. /home/user/.config/gcloud/application_default_credentials.json):/home/user/.config/gcloud/application_default_credentials.json

Do you want to enable Docker Registry? [y/n]: n

Do you want to enable Azure Container Registry? [y/n]: n
registry-creds was successfully configured
$ minikube addons enable registry-creds

Google Artifact Registry:minikube 有一个插件 gcp-auth,它将凭据映射到 minikube 以支持从 Google Artifact Registry 中提取镜像。运行 minikube addons enable gcp-auth 来配置身份验证。您可以在此处参考完整的文档Automated Google Cloud Platform Authentication | minikube - https://minikube.sigs.k8s.io/docs/handbook/addons/gcp-auth/

有关私有容器注册表的更多信息,请参阅此页面Pull an Image from a Private Registry | Kubernetes - https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/

我们建议您使用 ImagePullSecrets,但如果您想在 minikube VM 上配置访问权限,您可以将 .dockercfg 放在 /home/docker 目录中或将 config.json 放在 /var/lib/kubelet 目录中。确保使用 sudo systemctl restart kubelet 重新启动您的 kubelet(对于 kubeadm)进程。

启用不安全的注册表

minikube 允许用户配置 docker 引擎的 --insecure-registry 标志。
您可以在 minikube start 命令上使用 --insecure-registry 标志来启用 docker 引擎和监听来自 CIDR 范围的请求的注册表之间的不安全通信。

一个绝妙的技巧是允许在 minikube 中运行的 kubelet 与部署在集群中的 pod 内的注册表通信,而无需使用 TLS 证书支持它们。因为默认服务集群 IP 已知在 10.0.0.1 可用,所以用户可以通过使用 minikube start --insecure-registry "10.0.0.0/24" 创建集群来从集群内部署的注册表中提取镜像。在使用 --insecure-registry 标志开始之前,确保使用 minikube delete 删除集群。

macOS 上的 Docker

在 macOS 上配置 minikube 和 docker 的快速指南,使 docker 能够将镜像推送到 minikube 的注册表。

第一步是启用注册表附加组件:

1
minikube addons enable registry

注意:Minikube 将生成一个端口,并在启用注册表时请求您使用该端口。该说明与本指南无关。
启用后,注册表插件会在 minikube 的虚拟机上公开其端口 5000。
为了让 docker 接受将镜像推送到这个 registry,我们必须将 docker 虚拟机上的 5000 端口重定向到 minikube 机器上的 5000 端口。我们可以(ab)使用 docker 的网络配置在 docker 的主机上实例化一个容器,并在那里运行 socat:

1
docker run --rm -it --network=host alpine ash -c "apk add socat && socat TCP-LISTEN:5000,reuseaddr,fork TCP:$(minikube ip):5000"

一旦 socat 运行,就可以将镜像推送到 minikube 注册表:

1
2
docker tag my/image localhost:5000/myimage
docker push localhost:5000/myimage

在推送镜像后,请在 kubectl specs 中通过 localhost:5000/{name} 引用它。

Windows 上的 Docker

在 Windows 上配置 minikube 和 docker 的快速指南,使 docker 能够将镜像推送到 minikube 的注册表。

第一步是启用注册表附加组件:

1
minikube addons enable registry

启用后,注册表插件会在 minikube 的虚拟机上公开其端口 80。您可以通过以下方式确认:

1
2
3
4
kubectl get service --namespace kube-system
> NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
> kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 54m
> registry ClusterIP 10.98.34.133 <none> 80/TCP,443/TCP 37m

为了让 docker 接受将镜像推送到这个注册表,我们必须将 docker 虚拟机上的端口 5000 重定向到 minikube 注册表服务上的端口 80。不幸的是,docker vm 无法直接看到 minikube vm 的 IP 地址。要解决此问题,您必须再添加一级重定向。

1
kubectl port-forward --namespace kube-system service/registry 5000:80

在您的本地计算机上,您现在应该能够使用 curl http://localhost:5000/v2/_catalog 访问 minikube 注册表。
从这一点开始,我们可以(ab)使用 docker 的网络配置在 docker 的主机上实例化一个容器,并在那里运行 socat 将流向 docker vm 的端口 5000 的流量重定向到主机工作站上的端口 5000。

1
docker run --rm -it --network=host alpine ash -c "apk add socat && socat TCP-LISTEN:5000,reuseaddr,fork TCP:host.docker.internal:5000"

一旦 socat 运行,就可以将镜像从本地工作站推送到 minikube 注册表:

1
2
docker tag my/image localhost:5000/myimage
docker push localhost:5000/myimage

在推送镜像后,请在 kubectl specs 中通过 localhost:5000/{name} 引用它。

Registries | minikube - https://minikube.sigs.k8s.io/docs/handbook/registry/


原文链接

Registries | minikube - https://minikube.sigs.k8s.io/docs/handbook/registry/