使用 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 stop
和 sudo 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
再次
我正在尝试使用 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 stop
和 sudo 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
再次