ワーカーノードが非公開レジストリを使用できるように Google Distributed Cloud クラスタを構成できます。ノードレベルの限定公開レジストリは、ワークロードを使用してイメージの pull とそれに関連するセキュリティをより細かく制御できるようにすることを目的としています。このドキュメントで説明するように、非公開レジストリを使用してクラスタを構成すると、Google Distributed Cloud は containerd 構成を適宜更新します。クラスタが構成されると、Pod 仕様で imagePullSecrets
を指定する必要なく、適格なノード上のすべての Pod がレジストリを使用できるようになります。
この機能は、クラスタのライフサイクルの任意の時点で有効または無効にできます。
次のリストに、この機能のリリース ステージ(バージョンごと)を示します。
- 1.30: GA
- 1.29: プレビュー
- 1.28: 提供なし
前提条件
1.30
この GA 機能を使用するには、クラスタが次の要件を満たしている必要があります。
- クラスタのバージョンは 1.30 である必要があります。
- ノードプールのバージョンは 1.29 以降である必要があります(1.30 クラスタにはバージョン 1.28 のノードプールを含めることができますが、この機能はバージョン 1.29 以降のノードプールでのみ機能します)。
この機能は、次の表に示すように、ワーカー ノードプールを使用するユーザー クラスタと自己管理(ハイブリッドおよびスタンドアロン)クラスタに使用されます。
デプロイモデル サポートされるクラスタタイプ 管理クラスタとユーザー クラスタのデプロイ 管理クラスタ
ユーザー クラスタ 1
ユーザー クラスタ 2
ハイブリッド クラスタ デプロイ ハイブリッド クラスタ
ユーザー クラスタ 1
ユーザー クラスタ 2
スタンドアロン クラスタ デプロイ スタンドアロン クラスタ
1.29
このプレビュー機能を使用するには、クラスタが次の要件を満たしている必要があります。
- クラスタのバージョンは 1.29 である必要があります。
- ノードプールのバージョンは 1.29 である必要があります(すべてのノードプールがバージョン 1.29 である必要はありませんが、この機能はバージョン 1.29 のノードプールでのみ機能します)。
- クラスタには、プレビュー機能のアノテーション
preview.baremetal.cluster.gke.io/private-registry: "enable"
が必要です。 この機能は、次の表に示すように、ワーカー ノードプールを使用するユーザー クラスタと自己管理(ハイブリッドおよびスタンドアロン)クラスタに使用されます。
デプロイモデル サポートされるクラスタタイプ 管理クラスタとユーザー クラスタのデプロイ 管理クラスタ
ユーザー クラスタ 1
ユーザー クラスタ 2
ハイブリッド クラスタ デプロイ ハイブリッド クラスタ
ユーザー クラスタ 1
ユーザー クラスタ 2
スタンドアロン クラスタ デプロイ スタンドアロン クラスタ
非公開レジストリ用の自己管理クラスタを構成する
ノードレベルの非公開レジストリを使用するようにスタンドアロン クラスタまたはハイブリッド クラスタを構成するには:
クラスタ構成ファイルを編集して、認証情報セクションに
privateRegistries
ブロックを追加します。--- gcrKeyPath: baremetal/gcr.json sshPrivateKeyPath: .ssh/id_rsa ... privateRegistries: - host: REGISTRY_HOST caCertPath: CA_CERT_PATH pullCredentialConfigPath: CREDENTIALS_FILE_PATH ... --- apiVersion: v1 kind: Namespace metadata: name: cluster-hybrid-basic --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: hybrid-basic namespace: cluster-hybrid-basic annotations: preview.baremetal.cluster.gke.io/private-registry: "enable" # Version 1.29 clusters only ... spec: type: hybrid ...
次のように置き換えます。
REGISTRY_HOST
: 非公開レジストリとポートのドメイン名または IP アドレス。例:10.200.0.2:5007
。CA_CERT_PATH
: CA 証明書ファイル(サーバールート CA)のパス。例:/root/cert.pem
。非公開レジストリでプライベート TLS 証明書が不要な場合、このフィールドは省略できます。CREDENTIALS_FILE_PATH
: 非公開レジストリにアクセスするための認証情報を含むファイルのパス。例:/root/.docker/config.json
。非公開レジストリ サーバーで認証に認証情報が必要ない場合は、このフィールドを省略できます。
変更をクラスタに適用します。
bmctl update cluster -c CLUSTER_NAME --kubeconfig=CLUSTER_KUBECONFIG
次のように置き換えます。
CLUSTER_NAME
: 更新するクラスタの名前。CLUSTER_KUBECONFIG
: セルフマネージド(ハイブリッドまたはスタンドアロン)クラスタの kubeconfig ファイルのパス。
非公開レジストリ用のユーザー クラスタを構成する
ユーザー クラスタの場合、非公開レジストリの構成は Cluster リソース仕様で指定します。ユーザー クラスタの場合は、非公開レジストリの認証情報を Secret に保存する必要があります。
レジストリ認証情報の
kubernetes.io/dockerconfigjson
タイプの Kubernetes Secret を作成します。Secret のスコープを特定の Namespace に限定する場合は、次のコマンドに
--namespace
フラグを追加して、Namespace の名前を指定します。kubectl create secret docker-registry CREDS_SECRET_NAME \ --from-file=.dockerconfigjson=CREDENTIALS_FILE_PATH \ --kubeconfig=ADMIN_KUBECONFIG
次のように置き換えます。
CREDS_SECRET_NAME
: Secret の名前。CREDENTIALS_FILE_PATH
: Docker 構成ファイルのパス。例:/root/.docker/config.json
Secret は次のようになります。
apiVersion: v1 data: .dockerconfigjson: ewoJImF1dGhzIjogewoJ...clpYSXdNak14IgoJCX0KCX0KfQ== kind: Secret metadata: creationTimestamp: "2024-04-28T22:06:06Z" name: private-registry-secret namespace: default resourceVersion: "5055821" ... annotations: ... baremetal.cluster.gke.io/mark-source: "true" type: kubernetes.io/dockerconfigjson
Secret がクラスタと同じ Namespace にない場合、前述の例のようにアノテーション
baremetal.cluster.gke.io/mark-source: "true"
を追加します。必要に応じて、レジストリの CA 証明書を Secret に保存します。
Secret は次のようになります。
apiVersion: v1 kind: Secret metadata: annotations: baremetal.cluster.gke.io/mark-source: "true" name: ca-9dd74fd308bac6df562c7a7b220590b5 namespace: some-namespace type: Opaque data: ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR2RENDQXFTZ0F3SUJBZ0lVQi 3UGxjUzVFVk8vS0xuYjZiMHRhRFVleXJvd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2ZqRUxNQWtHQ ... QnpPTkxTRFZJVk5LMm9YV1JvNEpJY0ZoNFZ4MWRMRHpqMldEaHhrUEljWEhLdGR3dk5iS2tocU LUVORCBDRVJUSUZJQ0FURS0tLS0tCg== ```
ユーザー クラスタの構成ファイルを編集して、非公開レジストリを有効にして構成します。
バージョン 1.29 のクラスタでのみ、プレビュー機能のアノテーション
preview.baremetal.cluster.gke.io/private-registry: "enable"
を追加して機能を有効にします。バージョン 1.30 以降のクラスタでは、限定公開レジストリ機能がデフォルトで有効になっています。apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: user-basic namespace: cluster-user-basic resourceVersion: "766027" annotations: ... preview.baremetal.cluster.gke.io/private-registry: "enable" ...
ユーザー クラスタの構成ファイルで、
nodeConfig
セクションにprivateRegistries
ブロックを追加します。apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: user-basic ... spec: bypassPreflightCheck: false ... nodeConfig: containerRuntime: containerd podDensity: maxPodsPerNode: 250 privateRegistries: - caCertSecretRef: name: CA_CERT_SECRET_NAME namespace: CA_CERT_SECRET_NAMESPACE host: REGISTRY_HOST pullCredentialSecretRef: name: CREDS_SECRET_NAME namespace: CREDS_SECRET_NAMESPACE
次のように置き換えます。
CA_CERT_SECRET_NAME
: CA 証明書を保存するために作成した Secret の名前。この Secret を作成していない場合は、caCertSecretRef
ブロックを削除します。CA_CERT_SECRET_NAMESPACE
: CA 証明書 Secret の Namespace の名前(作成した場合)。REGISTRY_HOST
: 非公開レジストリとポートのドメイン名または IP アドレス。例:10.200.0.2:5007
。CREDS_SECRET_NAME
: レジストリ認証情報のkubernetes.io/dockerconfigjson
タイプの Secret の名前。CREDS_SECRET_NAMESPACE
: レジストリ認証情報の Secret の名前空間名。
変更をクラスタに適用します。
bmctl update cluster -c USER_CLUSTER_NAME --kubeconfig=ADMIN_KUBECONFIG
次のように置き換えます。
USER_CLUSTER_NAME
: 更新するクラスタの名前。ADMIN_KUBECONFIG
: 管理クラスタの kubeconfig ファイルのパス。