注册中心
使用私有注册中心
GCR/ECR/ACR/Docker:minikube 有一个名为 `registry-creds` 的插件,它可以将凭据映射到 minikube 中,以支持从 Google Container Registry (GCR)、Amazon 的 EC2 Container Registry (ECR)、Azure Container Registry (ACR) 和私有 Docker 注册中心拉取镜像。您需要运行 `minikube addons configure registry-creds` 和 `minikube addons enable registry-creds` 来启动并运行。下面是一个示例
$ 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` 来配置身份验证。您可以参考此处的完整文档。
有关私有容器注册中心的更多信息,请参阅此页面。
我们建议您使用 *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 的注册中心。
第一步是启用注册中心插件
minikube addons enable registry
注意:minikube 将生成一个端口并要求您在启用注册中心时使用该端口。该说明与本指南无关。
启用后,注册中心插件会在 minikube 虚拟机上暴露其 5000 端口。
为了使 docker 接受将镜像推送到此注册中心,我们必须将 docker 虚拟机上的 5000 端口重定向到 minikube 机器上的 5000 端口。我们可以(滥用)docker 的网络配置,在 docker 主机上实例化一个容器,并在那里运行 socat
docker run --rm -it --network=host alpine ash -c "apk add socat && socat TCP-LISTEN:5000,reuseaddr,fork TCP:$(minikube ip):5000"
一旦 socat 运行,就可以将镜像推送到 minikube 注册中心
docker tag my/image localhost:5000/myimage
docker push localhost:5000/myimage
镜像推送后,在 kubectl 规范中通过 `localhost:5000/{name}` 引用它。
Windows上的Docker
在 Windows 上配置 minikube 和 docker 的快速指南,使 docker 能够将镜像推送到 minikube 的注册中心。
第一步是启用注册中心插件
minikube addons enable registry
启用后,注册中心插件会在 minikube 虚拟机上暴露其 80 端口。您可以通过以下方式确认
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 虚拟机无法直接看到 minikube 虚拟机的 IP 地址。为了解决这个问题,您需要增加一层重定向。
使用 kubectl port-forward 将您的本地工作站映射到 minikube 虚拟机
kubectl port-forward --namespace kube-system service/registry 5000:80
现在,在您的本地机器上,您应该能够使用 `curl http://localhost:5000/v2/_catalog` 访问 minikube 注册中心
从这一点开始,我们可以(滥用)docker 的网络配置,在 docker 主机上实例化一个容器,并在那里运行 socat,将流向 docker 虚拟机 5000 端口的流量重定向到您的主机工作站的 5000 端口。
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 注册中心
docker tag my/image localhost:5000/myimage
docker push localhost:5000/myimage
镜像推送后,在 kubectl 规范中通过 `localhost:5000/{name}` 引用它。