使用Minikube时,不能从私人回购中拖出docker图像
我正在尝试使用Minikube进行本地kubernetes开发。 我已经build立了我的docker环境,使用在提供的Minikube VM(boot2docker)中运行的docker守护进程,如下所示:
eval $(minikube docker-env)
它设置了这些环境variables:
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根证书,但在我的尝试中至今还没有成功。
我可以用curl使用我们的根证书来打好存储库:
curl --cacert /etc/ssl/ca/ca.pem https://oururl.com:5000/v1/_ping
我从这些来源的build议中想出了一个解决问题的方法:
https://github.com/docker/machine/issues/1799
https://github.com/docker/machine/issues/1872
我login到Minikube虚拟机( minikube ssh
),并通过附加我自己的ca证书来编辑/usr/local/etc/ssl/certs/ca-certificates.crt
文件。
然后,我仍然在VM中重新启动docker守护程序: sudo /etc/init.d/docker restart
如果我重新启动Minikube虚拟机,这不是很优雅,我需要每次重复这些手动步骤。
作为替代,我也尝试在DOCKER_OPTS
环境variables(restarted DOCKER_OPTS
设置--insecure-registry myurl.com:5000
选项,但是这对我不起作用。
我一直无法find证书进入minikube vm。 但是,minikube有一个命令行参数传入一个不安全的registry。
minikube start --insecure-registry=<HOST>:5000
然后在registry上configuration身份validation,创build一个秘密。
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文档中的描述将秘密添加到默认服务帐户。
对于httpregistry,这个步骤适用于我:
1) minikube ssh
2)编辑/var/lib/boot2docker/profile
并添加到$ EXTRA_ARGS --insecure-registry yourdomain.com:5000
3)重启docker守护进程sudo /etc/init.d/docker restart
关于这个Kubernetes 文档是相当不错的。
根据您的私人docker存储库托pipe的位置,解决scheme看起来有点不同。 文档解释了如何处理每种types的存储库。
如果你想要一个自动的方法来处理这个authentication,你将需要使用一个Kubernetes秘密,并为你的Pod指定imagePullSecrets 。
听起来像你的问题有更多的与Docker比Kubernetes。 Docker CLI支持许多与TLS相关的选项 。 既然你已经有了CA证书,那么应该这样工作:
docker --tlsverify --tlscacert=/etc/ssl/ca/ca.pem pull oururl.com:5000/myimage:v1
Minikube最近增加了一个插件 ,使访问私有容器registry变得容易得多:
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
应用更改。 你应该能够推/拉你的registry。