2016-08-03 96 views
8

我正在嘗試使用Minikube進行本地kubernetes開發。我已經建立了我的搬運工環境中使用所提供的Minikube VM(boot2docker)上運行的泊塢窗守護進程的建議:使用Minikube時無法從私人回購中拖拉碼頭圖像

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 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 --cacert /etc/ssl/ca/ca.pem https://oururl.com:5000/v1/_ping 
+0

您是否試圖在本地計算機上拉取圖像,或者您是否嘗試創建可從虛擬機內部獲取圖像的Kubernetes Pod? – springle

+0

我試圖創建一個需要從私人回購中創建圖像的pod時遇到了問題,因此當VM遇到不能驗證x509的問題時,它試圖拉取圖像證書 –

回答

3

我想出了一個變通的情況與建議,從這些來源:

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

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

我登錄到Minikube虛擬機(minikube ssh),並編輯/usr/local/etc/ssl/certs/ca-certificates.crt文件通過附加我自己的CA證書。

我再重新啓動泊塢窗守護程序,同時仍然在VM中:sudo /etc/init.d/docker restart

,如果我重新啓動Minikube VM,我每次都需要重複這些手動步驟這不是在非常優雅。

作爲一種替代方法,我也嘗試在DOCKER_OPTS環境變量(重新啓動的docker)中設置--insecure-registry myurl.com:5000選項,但這不適用於我。

+1

現在您可以使用 minikube start --insecure-registry ='' 但您需要先運行 minikube刪除 才能獲得全新的羣集。 – KyleHodgetts

0

關於這個Kubernetes documentation是相當不錯的。

取決於您的私人碼頭存儲庫的託管位置,解決方案看起來有點不同。該文檔解釋瞭如何處理每種類型的存儲庫。

如果您希望使用自動方法來處理此身份驗證,您需要使用Kubernetes機密併爲Pod指定imagePullSecrets

+0

感謝您的回覆,但我遇到了在Minikube VM中運行的docker守護程序連接到我們的repo(更不用說建立在頂部的任何Kubernetes功能)的問題。我相信我需要以某種方式讓Minkube VM中的docker守護程序使用我可以提供的ca證書。 –

0

聽起來像你的問題有更多的關於Docker比Kubernetes。 Docker CLI支持多個TLS-related options。既然你已經有了CA證書,這樣的事情應該工作:

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

謝謝你的迴應。我試着執行你提供的命令,但我仍然得到一個「x509:由未知權限簽名的證書」錯誤。我甚至取消了DOCKER_TLS_VERIFY和DOCKER_CERT_PATH,仍然是同樣的錯誤。我只能假設在虛擬機中運行的Docker守護進程存在一些讓這裏變得複雜的事情。 –

1

我一直無法找到證書進入minikube vm。但是,minikube有一個命令行參數可以通過一個不安全的註冊表。

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

然後在註冊表上配置身份驗證,創建一個祕密。如kubernetes docs描述

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 

添加祕密的默認服務帳戶。

1

對於HTTP註冊表這個步驟對我的作品:

1)minikube ssh

2)編輯/var/lib/boot2docker/profile,並添加到$ EXTRA_ARGS --insecure-registry yourdomain.com:5000

3)重新啓動泊塢窗守護sudo /etc/init.d/docker restart

0

你需要編輯/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應用更改。然後,您應該能夠推/拉到您的註冊表。

+0

這個文件不存在,minikube v0.22.2 –