レジストリ ミラー
レジストリ ミラーは、gcr.io
と docker.io
のイメージをミラーリングするように指定されています。たとえば、イメージ gcr.io/kubernetes-e2e-test-images/nautilus:1.0
を pull しようとした場合には、レジストリ サービスがこのイメージを厳密に同じパス(例: 172.18.0.20:5000/kubernetes-e2e-test-images/nautilus:1.0
)に保有している場合にのみ、操作を行うことができます。gcr.io
以外のイメージはすべて通常どおり動作します。たとえば、引き続き k8s.gcr.io/pause:3.1
を pull できます。
レジストリ ミラーを使用することでトラフィックを節約できます。また、クラスタを gcr.io
の停止から保護する必要がある場合に、gcr.io
の代わりに使用できます。また、独自の脆弱性スキャンを行えるようにもなります。
始める前に
- ネットワークに Container Registry サーバーが設定されている必要があります。
- レジストリ サーバーでプライベート TLS 証明書を実行する場合は、認証局(CA)ファイルが必要です。
- レジストリ サーバーで認証が必要な場合は、適切なログイン認証情報または Docker 構成ファイルが必要です。
コンテナ イメージをレジストリ サーバーにアップロードする
次のコマンドを実行して、イメージをイメージ パッケージからレジストリ サーバーにアップロードします。
actl images push \
--private-registry=PRIVATE_REGISTRY \
--images ~/anthos-baremetal-private-mode
以下を置き換えます。
PRIVATE_REGISTRY
は、非公開レジストリのアドレス(とポート)とサブプロジェクト(172.18.0.20:5000/test-namespace
など)に置き換えます。プロンプトが表示されたら、ユーザー名とパスワードを入力するか、Docker 構成ファイルを選択します。レジストリ サーバーで認証情報が必要ない場合は、
--no-registry-credential
を指定します。
actl images push
コマンドについて詳しくは、以下を実行してください。
actl images push --help
独自の名前空間を使用する
レジストリ サーバーでルート名前空間ではなく独自の名前空間を使用する必要がある場合は、限定公開レジストリの API エンドポイントを registryMirrors.endpoint
に指定すると、containerd
がこのサブ名前空間から pull できるようになります。エンドポイントは通常、<REGISTRY_IP:PORT>/v2/<NAMESPACE>
の形式になります。詳細については、非公開レジストリのユーザーガイドをご覧ください。
たとえば、172.18.0.20:5000/test-namespace/
へのアクセス権のみを付与されている場合は、次のコマンドを使用して、名前空間 test-namespace
の下にあるすべての画像をアップロードできます。
actl images push \
--images= ~/anthos-baremetal-private-mode \
--private-registry=172.18.0.20:5000/test-namespace
次に、クラスタの YAML ファイルに次のように入力して、containerd
がサブ名前空間から pull するように設定できます。
registryMirrors:
- endpoint: https://172.18.0.20:5000/v2/test-namespace
レジストリ ミラーからクラスタを作成する
以下は、gcr.io
の代わりに独自のレジストリ ミラー サーバーを使用するクラスタ構成ファイルの例です。
レジストリでプライベート TLS 証明書が不要な場合は、caCertPath
フィールドを空白のままにできます。
レジストリ サーバーで認証 Docker 構成ファイルが不要な場合は、pullCredentialConfigPath
フィールドを空白のままにできます。
クラスタ構成の詳細については、クラスタ構成ファイルをご覧ください。
# Sample cluster config with registry mirror:
---
sshPrivateKeyPath: /root/ssh-key/id_rsa
registryMirrors:
- endpoint: https://172.18.0.20:5000/v2/test-namespace
caCertPath: /root/ca.crt
pullCredentialConfigPath: /root/.docker/config.json
---
apiVersion: v1
kind: Namespace
metadata:
name: cluster-admin
---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: admin
namespace: cluster-admin
spec:
nodeConfig:
containerRuntime: containerd
...
このクラスタ内のすべてのノードは、gcr.io
(および docker.io
)ではなく、このレジストリ ミラー 172.18.0.20:5000
を使用します。
gcr.io
にフェイルオーバーする
クラスタがレジストリ ミラーから pull できない場合、自動的に gcr.io
にフェイルオーバーします。そのため、クラスタ構成ファイルで privateRegistryConfigPath
の値を指定することをおすすめします。値が指定されていないと、レジストリ ミラーが失敗した場合に、クラスタは gcr.io
から pull できなくなります。
# Sample cluster config with registry mirror:
---
privateRegistryConfigPath: /root/.docker/config.json
registryMirrors:
- endpoint: https://172.18.0.20:5000
caCertPath: /root/ca.crt
pullCredentialConfigPath: /root/.docker/config.json
pull フェイルオーバー機能が不要な場合は、プロキシ許可リストへの privateRegistryConfigPath
の追加、または gcr.io
(および docker.io
)の追加は必要はありません。
レジストリ ミラー エンドポイント、証明書、pull 認証情報を更新する
レジストリ ミラー エンドポイント、証明書、または pull 認証情報を更新するには、次のように操作します。
クラスタ構成ファイルで、エンドポイント、CA 証明書ファイル、pull 認証情報構成ファイルのパスを更新します。
次のコマンドを実行して、変更を適用します。
actl clusters baremetal update cluster admin --kubeconfig=ADMIN_KUBECONFIG