ワーカーノードが限定公開レジストリを使用できるように Google Distributed Cloud クラスタを構成できます。ノードレベルの限定公開レジストリは、ワークロードを使用してイメージの pull とそれに関連するセキュリティをより細かく制御できるようにすることを目的としています。このドキュメントで説明するように、限定公開レジストリがあるクラスタを構成すると、Google Distributed Cloud はそれに応じて containerd 構成を更新します。クラスタが構成されると、修飾ノード上のすべての Pod で、Pod 仕様で imagePullSecrets
を指定することなくレジストリを使用できるようになります。
この機能は、クラスタのライフサイクルの任意の時点で有効または無効にできます。
前提条件
このプレビュー機能を使用するには、クラスタが次の要件を満たしている必要があります。
- この機能は、ユーザー クラスタと、ワーカー ノードプールがある自己管理(ハイブリッドおよびスタンドアロン)クラスタを対象としています。
- クラスタのバージョンは 1.29 にする必要があります。
- ノードプールのバージョンは 1.29 にする必要があります(すべてのノードプールをバージョン 1.29 にする必要はありませんが、この機能はバージョン 1.29 のノードプールでのみ機能します)。
- クラスタには
preview.baremetal.cluster.gke.io/private-registry: "enable"
プレビュー機能アノテーションが必要です。
限定公開レジストリ用の自己管理クラスタを構成する
ノードレベルの限定公開レジストリを使用するようにスタンドアロン クラスタまたはハイブリッド クラスタを構成するには:
クラスタ構成ファイルを編集して、認証情報セクションに
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" ... 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
フラグを追加して、名前空間の名前を指定します。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 がクラスタと同じ名前空間にない場合は、前の例に示すように、アノテーション
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== ```
ユーザー クラスタの構成ファイルを編集して、限定公開レジストリを有効にして構成します。
プレビュー中の限定公開レジストリを有効にするには、アノテーション
preview.baremetal.cluster.gke.io/private-registry: "enable"
を追加します。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 の名前空間の名前(作成した場合)。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 ファイルのパス。