レジストリ ミラーを構成する

レジストリ ミラー

レジストリ ミラーは、gcr.iodocker.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 認証情報を更新するには、次のように操作します。

  1. クラスタ構成ファイルで、エンドポイント、CA 証明書ファイル、pull 認証情報構成ファイルのパスを更新します。

  2. 次のコマンドを実行して、変更を適用します。

    actl clusters baremetal update cluster admin --kubeconfig=ADMIN_KUBECONFIG
    

次のステップ