使用 Minikube 时无法从私有仓库中提取 docker 图像

Can not pull docker image from private repo when using Minikube

我正在尝试使用 Minikube 进行本地 kubernetes 开发。我已经按照建议在提供的 Minikube VM (boot2docker) 中设置 docker 环境以使用 docker 守护程序 运行:

eval $(minikube docker-env)

它设置了这些环境变量:

export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/home/jasonwhite/.minikube/certs"

当我尝试从我们的私有 docker 存储库中提取图像时:

docker pull oururl.com:5000/myimage:v1

我收到这个错误:

Error response from daemon: Get https://oururl.com:5000/v1/_ping: x509: certificate signed by unknown authority

看来我需要以某种方式添加受信任的 CA 根证书,但到目前为止我的尝试都没有成功。

我可以使用我们的 ca 根证书通过 curl 访问存储库:

curl --cacert /etc/ssl/ca/ca.pem https://oururl.com:5000/v1/_ping

Kubernetesdocumentation在这上面不错

根据您的私人 docker 存储库的托管位置,解决方案看起来会有些不同。该文档解释了如何处理每种类型的存储库。

如果您想要一种自动方法来处理此身份验证,您将需要使用 Kubernetes 机密并为您的 Pod 指定 imagePullSecrets

听起来您的问题与 Docker 的关系比与 Kubernetes 的关系更大。 Docker CLI 支持多个 TLS-related options。由于您已经拥有 CA 证书,因此应该可以使用以下内容:

docker --tlsverify --tlscacert=/etc/ssl/ca/ca.pem pull oururl.com:5000/myimage:v1

根据这些来源的建议,我想出了一个解决方法:

https://github.com/docker/machine/issues/1799

https://github.com/docker/machine/issues/1872

我登录到 Minikube VM (minikube ssh),并通过附加我自己的 ca 证书来编辑 /usr/local/etc/ssl/certs/ca-certificates.crt 文件。

然后我重新启动了 docker 守护程序,同时仍在 VM 中:sudo /etc/init.d/docker restart

这不是很优雅,因为如果我重新启动 Minikube VM,我每次都需要重复这些手动步骤。

作为替代方案,我还尝试在 DOCKER_OPTS 环境变量中设置 --insecure-registry myurl.com:5000 选项(重新启动 docker),但这对我不起作用。

我一直无法找到将证书放入 minikube 虚拟机的方法。但是,minikube 有一个命令行参数来传递一个不安全的注册表。

minikube start --insecure-registry=<HOST>:5000 

然后在注册表上配置身份验证,创建一个秘密。

kubectl create secret docker-registry tp-registry --docker-server=<REGISTRY>:5000 --docker-username=<USERNAME> --docker-password=<PASSWORD> --docker-email=<EMAIL> --insecure-skip-tls-verify=true

按照 kubernetes docs.

中的说明将密码添加到默认服务帐户

对于 http 注册表,此步骤适用于我:

1) minikube ssh

2) 编辑 /var/lib/boot2docker/profile 并添加到 $EXTRA_ARGS --insecure-registry yourdomain.com:5000

3) 重新启动 docker 守护程序 sudo /etc/init.d/docker restart

An addon was recently added to Minikube 这使得访问私有容器注册表变得更加容易:

minikube addons configure registry-creds
minikube addons enable registry-creds

您需要将 /etc/default/docker 编辑为如下所示:

# Docker Upstart and SysVinit configuration file

#
# THIS FILE DOES NOT APPLY TO SYSTEMD
#
#   Please see the documentation for "systemd drop-ins":
#   https://docs.docker.com/engine/admin/systemd/
#

# Customize location of Docker binary (especially for development testing).
#DOCKERD="/usr/local/bin/dockerd"

# Use DOCKER_OPTS to modify the daemon startup options.
DOCKER_OPTS="--insecure-registry oururl.com:5000"

# If you need Docker to use an HTTP proxy, it can also be specified here.
#export http_proxy="http://127.0.0.1:3128/"

# This is also a handy place to tweak where Docker's temporary files go.
#export DOCKER_TMPDIR="/mnt/bigdrive/docker-tmp"

确保 sudo service docker stopsudo docker start 应用更改。然后您应该能够 push/pull 到您的注册表。

  • 登录帐号minikube

  • vi ~/.minikube/machines/<PROFILE_NAME>/config.json(在我的例子中 vi ~/.minikube/machines/minikube/config.json

  • InsecureRegistry 属性上添加私人仓库(json 路径:HostOptions.EngineOptions.InsecureRegistry

  • minikube start 再次