我正在尝试使用Minikube进行本地kubernetes开发。我已经设置了docker环境,以便按照建议使用在提供的Minikube VM(boot2docker)中运行的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 root证书使用curl命中存储库:
curl --cacert /etc/ssl/ca/ca.pem https://oururl.com:5000/v1/_ping
答案 0 :(得分:3)
我根据这些来源的建议想出了解决问题的方法:
https://github.com/docker/machine/issues/1799
https://github.com/docker/machine/issues/1872
我登录了Minikube虚拟机(minikube ssh
),并通过附加我自己的ca证书编辑了/usr/local/etc/ssl/certs/ca-certificates.crt
文件。
然后我仍在VM中重新启动了docker守护程序:sudo /etc/init.d/docker restart
这不是很优雅,如果我重新启动Minikube VM,我需要每次都重复这些手动步骤。
作为替代方案,我还尝试在--insecure-registry myurl.com:5000
环境变量(重新启动的docker)中设置DOCKER_OPTS
选项,但这对我没用。
答案 1 :(得分:2)
我无论如何都无法找到将证书送入minikube vm。但是,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
中的说明向默认服务帐户添加密码
答案 2 :(得分:1)
对于http注册表,此步骤适用于我:
1)minikube ssh
2)修改/var/lib/boot2docker/profile
并添加到$ EXTRA_ARGS --insecure-registry yourdomain.com:5000
3)重启docker守护进程sudo /etc/init.d/docker restart
答案 3 :(得分:0)
Kubernetes documentation就此而言非常好。
根据托管私有docker存储库的位置,解决方案看起来会有所不同。该文档说明了如何处理每种类型的存储库。
如果您想要一种自动方法来处理此身份验证,您将需要使用Kubernetes密码并为您的Pod指定imagePullSecrets。
答案 4 :(得分:0)
听起来你的问题与Docker有关,而不是Kubernetes。 Docker CLI支持许多TLS-related options。由于您已经拥有CA证书,因此应该可以使用以下内容:
docker --tlsverify --tlscacert=/etc/ssl/ca/ca.pem pull oururl.com:5000/myimage:v1
答案 5 :(得分:0)
An addon was recently added to Minikube使访问私有容器注册表变得更加容易:
minikube addons configure registry-creds
minikube addons enable registry-creds
答案 6 :(得分:0)
您需要编辑xattr -c NameOfYourApp.app
,如下所示:
/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
应用更改。然后,您应该能够推/拉到您的注册表。