web-dev-qa-db-ja.com

Minikubeを使用している場合、プライベートリポジトリからDockerイメージをプルできません

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
9
Jason White

私はこれらの情報源からの提案で状況の回避策を思いついた:

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ファイルを編集しました。

次に、VM内にいる間にdockerデーモンを再起動しました:Sudo /etc/init.d/docker restart

Minikube VMを再起動すると、毎回これらの手動手順を繰り返す必要があるという点で、これはあまりエレガントではありません。

別の方法として、--insecure-registry myurl.com:5000環境変数(再起動されたdocker)でDOCKER_OPTSオプションを設定しようとしましたが、これは機能しませんでした。

3
Jason White

とにかく、証明書をminikubevmに取り込む方法を見つけることができませんでした。ただし、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 の説明に従って、デフォルトのサービスアカウントにシークレットを追加します。

3
Ben Mathews

Httpレジストリの場合、この手順は私にとってはうまくいきます。

1)minikube ssh

2)編集/var/lib/boot2docker/profileそして$ EXTRA_ARGSに追加します--insecure-registry yourdomain.com:5000

3)dockerデーモンを再起動しますSudo /etc/init.d/docker restart

1
wlredeye

最近Minikubeにアドオンが追加されました プライベートコンテナレジストリへのアクセスがはるかに簡単になります:

minikube addons configure registry-creds
minikube addons enable registry-creds
0
mrts

あなたの質問はKubernetesよりもDockerに関係しているようです。 Docker CLIは、いくつかの TLS関連のオプション をサポートしています。すでにCA証明書を持っているので、次のようなものが機能するはずです。

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

/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を実行してください。これで、レジストリにプッシュ/プルできるようになります。

0
GHETTO.CHiLD

Kubernetes documentation これはかなり良いです。

プライベートDockerリポジトリがホストされている場所に応じて、ソリューションの外観は少し異なります。ドキュメントでは、各タイプのリポジトリを処理する方法について説明しています。

この認証を処理する自動化されたアプローチが必要な場合は、Kubernetesシークレットを使用して、ポッドに imagePullSecrets を指定する必要があります。

0
springle