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
私はこれらの情報源からの提案で状況の回避策を思いついた:
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
オプションを設定しようとしましたが、これは機能しませんでした。
とにかく、証明書を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 の説明に従って、デフォルトのサービスアカウントにシークレットを追加します。
Httpレジストリの場合、この手順は私にとってはうまくいきます。
1)minikube ssh
2)編集/var/lib/boot2docker/profile
そして$ EXTRA_ARGSに追加します--insecure-registry yourdomain.com:5000
3)dockerデーモンを再起動しますSudo /etc/init.d/docker restart
最近Minikubeにアドオンが追加されました プライベートコンテナレジストリへのアクセスがはるかに簡単になります:
minikube addons configure registry-creds
minikube addons enable registry-creds
あなたの質問はKubernetesよりもDockerに関係しているようです。 Docker CLIは、いくつかの TLS関連のオプション をサポートしています。すでにCA証明書を持っているので、次のようなものが機能するはずです。
docker --tlsverify --tlscacert=/etc/ssl/ca/ca.pem pull oururl.com:5000/myimage:v1
/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
を実行してください。これで、レジストリにプッシュ/プルできるようになります。
Kubernetes documentation これはかなり良いです。
プライベートDockerリポジトリがホストされている場所に応じて、ソリューションの外観は少し異なります。ドキュメントでは、各タイプのリポジトリを処理する方法について説明しています。
この認証を処理する自動化されたアプローチが必要な場合は、Kubernetesシークレットを使用して、ポッドに imagePullSecrets を指定する必要があります。