GKE 限定公開クラスタの Container Registry または Artifact Registry の設定

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

このページでは、Google Kubernetes Engine の限定公開クラスタと VPC Service Controls で Container Registry または Artifact Registry を使用するための DNS エントリを構成する方法について説明します。

この手順は、GKE 限定公開クラスタでコンテナ ストレージに Artifact Registry または Container Registry を使用し、pkg.dev または gcr.io レジストリ ドメインの restricted.googleapis.com へのルーティングをまだ構成していない場合にのみ必要です。

サービス境界内のプライベート クラスタは制限付き VIP がなくても Container Registry または Artifact Registry を使用できますが、このような使い方はしないでください。制限付き VIP を使用しない場合、サポートされたサービスからサポートされていないサービスにデータが抽出される可能性があります。

始める前に

サービス境界を作成する前に、新しい限定公開クラスタを設定するか、既存の限定公開クラスタの中から保護するクラスタを選択します。

また、ポート 443 で 199.36.153.4/30 への外向き(下り)を許可する必要があります。通常、VPC ネットワークには、任意の宛先へのすべての外向き(下り)トラフィックを許可する暗黙ルールがあります。ただし、このようなトラフィックを拒否するルールがある場合は、ポート 443 で 199.36.153.4/30 への TCP トラフィックを許可する外向き(下り)ファイアウォール ルールを作成する必要があります。

DNS の構成

サービス境界内で Container Registry または Artifact Registry を使用する GKE 限定公開クラスタをサポートするには、レジストリ アドレスに対するリクエストが、制限付き VIP の restricted.googleapis.com に解決されるように DNS サーバーを構成する必要があります。これを行うには、Cloud DNS の非公開 DNS ゾーンを使用します。

  1. 非公開のマネージド ゾーンを作成します。

    gcloud beta dns managed-zones create ZONE_NAME \
        --visibility=private \
        --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK \
        --description=DESCRIPTION \
        --dns-name=REGISTRY_DOMAIN \
        --project=PROJECT_ID
    

    ここで

    • ZONE_NAME は、作成するゾーンの名前です。例: registryこの名前は、以降のステップでも使用します。

    • PROJECT_ID は、GKE 限定公開クラスタをホストするプロジェクトの ID です。

    • NETWORK は、リクエストのリダイレクト元のクラスタ ネットワークの名前のリストです(省略可)。

    • DESCRIPTION は、人間が読める形式のマネージド ゾーンの説明です。

    • REGISTRY_DOMAIN は、レジストリのドメインです。

      • pkg.dev(Artifact Registry の場合)
      • gcr.io(Container Registry の場合)
  2. トランザクションを開始します。

    gcloud dns record-sets transaction start \
      --zone=ZONE_NAME \
      --project=PROJECT_ID
    

    ここで

    • ZONE_NAME は、最初の手順で作成したゾーンの名前です。

    • PROJECT_ID は、GKE 限定公開クラスタをホストするプロジェクトの ID です。

  3. レジストリの CNAME レコードを追加します。

    gcloud dns record-sets transaction add \
      --name=*.REGISTRY_DOMAIN. \
      --type=CNAME REGISTRY_DOMAIN. \
      --zone=ZONE_NAME \
      --ttl=300 \
      --project=PROJECT_ID
    

    ここで

    • ZONE_NAME は、最初の手順で作成したゾーンの名前です。

    • PROJECT_ID は、GKE 限定公開クラスタをホストするプロジェクトの ID です。

    • REGISTRY_DOMAIN は、レジストリのドメインです。

      • pkg.dev(Artifact Registry の場合)
      • gcr.io(Container Registry の場合)
  4. 制限付き VIP の A レコードを追加します。

    gcloud dns record-sets transaction add \
      --name=REGISTRY_DOMAIN. \
      --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \
      --zone=ZONE_NAME \
      --ttl=300 \
      --project=PROJECT_ID
    

    ここで

    • ZONE_NAME は、最初の手順で作成したゾーンの名前です。

    • PROJECT_ID は、GKE 限定公開クラスタをホストするプロジェクトの ID です。

    • REGISTRY_DOMAIN は、レジストリのドメインです。

      • pkg.dev(Artifact Registry の場合)
      • gcr.io(Container Registry の場合)
  5. トランザクションを実行します。

    gcloud dns record-sets transaction execute \
      --zone=ZONE_NAME \
      --project=PROJECT_ID
    

    ここで

    • ZONE_NAME は、最初の手順で作成したゾーンの名前です。

    • PROJECT_ID は、GKE 限定公開クラスタをホストするプロジェクトの ID です。

サービス境界を構成する

DNS レコードを構成した後、新しいサービス境界を作成するか、既存の境界を更新して、サービス境界で保護するサービスのリストに Container Registry または Artifact Registry サービスを追加します。

その他の注意点:

  • レジストリで使用するほかのサポート対象のサービスを Cloud Build、Container Analysis、Binary Authorization などのサービス境界に追加します。
  • Container Registry の場合は、Cloud Storage もサービス境界に追加する必要があります。

境界の動作を確認する

サービス境界を構成したら、サンプル コンテナをデプロイして構成を確認します。

次のコマンドを使用して限定公開クラスタに Deployment を作成します。

Artifact Registry

kubectl create deployment hello-server --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0

Container Registry

kubectl create deployment hello-server --image=gcr.io/google-samples/hello-app:1.0

次のコマンドで Pod のステータスを確認します。

kubectl get pods

このコマンドは、次の例のようなテーブルを返します。イメージが正常に pull され、正常にデプロイされると、Pod のステータスは RUNNING になります。

NAME                            READY   STATUS    RESTARTS   AGE
hello-server-dbd86c8c4-h5wsf   1/1     Running   0          45s

kubectl describe pod コマンドを使用すると、Deployment の詳細が表示されます。前の例の Pod の場合、コマンドは次のようになります。

kubectl describe pod hello-server-dbd86c8c4-h5wsf