Config Connector、Policy Controller、Config Sync がプリインストールされた Config Controller インスタンスを作成する方法について説明します。また、次の作業を行ってインスタンスの利用方法を学びます。
- Config Connector を使用して Google Cloud リソースを作成、管理する。
- デプロイする前に Policy Controller の制約を作成してポリシーを適用し、ポリシー違反を検出する。
- Google Cloud リソースを含むサンプル リポジトリと同期するように Config Sync を構成して、GitOps を設定する。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- 
      Install the Google Cloud CLI. 
- 
          外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。 
- 
        gcloud CLI を初期化するには、次のコマンドを実行します。 gcloud init
- 
  
  
    Create or select a Google Cloud project. Roles required to select or create a project - Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
- 
      Create a project: To create a project, you need the Project Creator
      (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
 - 
        Create a Google Cloud project: gcloud projects create PROJECT_ID Replace PROJECT_IDwith a name for the Google Cloud project you are creating.
- 
        Select the Google Cloud project that you created: gcloud config set project PROJECT_ID Replace PROJECT_IDwith your Google Cloud project name.
 
- 
  
    Verify that billing is enabled for your Google Cloud project. 
- 
  
  
    
      Enable the KRM, GKE, Resource Manager, and Service Usage APIs: Roles required to enable APIs To enable APIs, you need the Service Usage Admin IAM role ( roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable krmapihosting.googleapis.com container.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com 
- 
      Install the Google Cloud CLI. 
- 
          外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。 
- 
        gcloud CLI を初期化するには、次のコマンドを実行します。 gcloud init
- 
  
  
    Create or select a Google Cloud project. Roles required to select or create a project - Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
- 
      Create a project: To create a project, you need the Project Creator
      (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
 - 
        Create a Google Cloud project: gcloud projects create PROJECT_ID Replace PROJECT_IDwith a name for the Google Cloud project you are creating.
- 
        Select the Google Cloud project that you created: gcloud config set project PROJECT_ID Replace PROJECT_IDwith your Google Cloud project name.
 
- 
  
    Verify that billing is enabled for your Google Cloud project. 
- 
  
  
    
      Enable the KRM, GKE, Resource Manager, and Service Usage APIs: Roles required to enable APIs To enable APIs, you need the Service Usage Admin IAM role ( roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable krmapihosting.googleapis.com container.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com 
- ターミナルで Autopilot Config Controller インスタンスを作成します。 - gcloud anthos config controller create cc-example \ --location=us-central1 \ --full-management- この操作は、完了まで最大で 15 分ほどかかります。 - 次のような出力が表示されます。 - Created instance [cc-example]. Fetching cluster endpoint and auth data. kubeconfig entry generated for krmapihost-cc-example.
- Config Controller インスタンスの一覧を表示して、インスタンスが作成されたことを確認します。 - gcloud anthos config controller list --location=us-central1- 次のような出力が表示されます。 - NAME LOCATION STATE cc-example us-central1 RUNNING
- サービス アカウントのメールアドレスを格納する環境変数を設定します。 - export SA_EMAIL="$(kubectl get ConfigConnectorContext -n config-control \ -o jsonpath='{.items[0].spec.googleServiceAccount}' 2> /dev/null)"
- ポリシー バインディングを作成します。 - gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:${SA_EMAIL}" \ --role "roles/owner" \ --project PROJECT_ID- PROJECT_IDは、実際のプロジェクト ID に置き換えます。- 出力は次のようになります。 - Updated IAM policy for project [PROJECT_ID]. auditConfigs: - auditLogConfigs: - logType: ADMIN_READ - logType: DATA_READ - logType: DATA_WRITE service: gkehub.googleapis.com # Remainder of output omitted
- Config Connector を使用して Pub/Sub API を有効にします。 - 任意のテキスト エディタで - enable-pubsub.yamlという名前のファイルを作成し、そのファイルに次の YAML をコピーします。- # enable-pubsub.yaml apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1 kind: Service metadata: name: pubsub.googleapis.com namespace: config-control spec: projectRef: external: projects/PROJECT_ID- PROJECT_IDは、実際のプロジェクト ID に置き換えます。
- Pub/Sub API を有効にするには、マニフェストをクラスタに適用します。 - kubectl apply -f enable-pubsub.yaml- この API の有効化には数分かかることがあります。 
 
- Config Connector を使用して Pub/Sub トピックを作成します。 - pubsub-topic.yamlという名前のファイルを作成して、次の YAML をコピーします。- # pubsub-topic.yaml apiVersion: pubsub.cnrm.cloud.google.com/v1beta1 kind: PubSubTopic metadata: annotations: cnrm.cloud.google.com/project-id: PROJECT_ID labels: label-one: "value-one" name: example-topic namespace: config-control
- Pub/Sub トピックを作成します。 - kubectl apply -f pubsub-topic.yaml
 
- Pub/Sub トピックの一覧を表示して、Config Controller によって Google Cloudにリソースが作成されていることを確認します。 - gcloud pubsub topics list- 出力は次のようになります。 - --- name: projects/PROJECT_ID/topics/start-instance-event --- labels: label-one: value-one managed-by-cnrm: 'true' name: projects/PROJECT_ID/topics/example-topic
- bucket-constraint.yamlという名前のファイルを作成して、次の YAML をコピーします。- # bucket-constraint.yaml apiVersion: constraints.gatekeeper.sh/v1beta1 kind: GCPStorageLocationConstraintV1 metadata: name: storage-only-in-us-central1 spec: match: kinds: - apiGroups: - storage.cnrm.cloud.google.com kinds: - StorageBucket parameters: locations: - us-central1
- 制約を作成します。 - kubectl apply -f bucket-constraint.yaml- 次のような出力が表示されます。 - gcpstoragelocationconstraintv1.constraints.gatekeeper.sh/storage-only-in-us-central1 created`
- 制約が機能していることを確認するには、Config Connector を使用して - asia-southeast1に StorageBucket リソースを作成します。- asia-storage-bucket.yamlという名前のファイルを作成して、次の YAML をコピーします。- # asia-storage-bucket.yaml apiVersion: storage.cnrm.cloud.google.com/v1beta1 kind: StorageBucket metadata: name: bucket-in-disallowed-location namespace: config-control spec: location: asia-southeast1
- Cloud Storage バケットを作成してみましょう。 - kubectl apply -f asia-storage-bucket.yaml- 次のような出力が表示されます。 - Error from server (Forbidden): error when creating "STDIN": admission webhook "validation.gatekeeper.sh" denied the request: [storage-only-in-us-central1] Cloud Storage bucket <bucket-in-disallowed-location> uses a disallowed location <asia-southeast1>, allowed locations are ["us-central1"]
 
- GitHub と同期するには Cloud NAT を設定します。これは、Config Controller インスタンスが限定公開 GKE クラスタによってバックアップされ、限定公開クラスタノードに外部へのインターネット アクセスがないため、必要になります。 - Cloud NAT ルーターを作成します。このルーターは、NAT ゲートウェイを設定するために必要です。 - gcloud compute routers create cc-nat-router \ --network default \ --region us-central1- 出力は次のようになります。 - Creating router [cc-nat-router]...done. NAME REGION NETWORK cc-nat-router us-central1 default
- 前の手順で作成したルーターに NAT ゲートウェイを設定します。 - gcloud compute routers nats create cc-nat-config \ --router-region us-central1 \ --router cc-nat-router \ --nat-all-subnet-ip-ranges \ --auto-allocate-nat-external-ips- 次のような出力が表示されます。 - Creating NAT [cc-nat-config] in router [cc-nat-router]...done.
 
- サンプル リポジトリと同期するように Config Controller インスタンスを構成するには、 - cc-rootsync.yamlという名前のファイルを作成して、そのファイルに次の YAML をコピーします。- # cc-rootsync.yaml apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: root-sync namespace: config-management-system spec: sourceFormat: unstructured git: repo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples branch: main dir: config-controller-quickstart auth: none
- 構成を適用します。 - kubectl apply -f cc-rootsync.yaml- インスタンスがリポジトリと同期した後、Config Sync は Pub/Sub トピックを作成し、Config Controller インスタンスに適用します。 
- Config Sync が Git リポジトリを Config Controller インスタンスに同期させていることを確認します。 - nomos status --contexts gke_PROJECT_ID_us-central1_krmapihost-cc-example- 出力は次のようになります。 - *gke_PROJECT_ID_us-central1_krmapihost-cc-example -------------------- <root>:root-sync https://github.com/GoogleCloudPlatform/anthos-config-management-samples/config-controller-quickstart@main SYNCED @ 2023-01-10 18:31:02 +0000 UTC 715b4295d3eac07b057cce2543275c1ee104cad8 Managed resources: NAMESPACE NAME STATUS SOURCEHASH config-control pubsubtopic.pubsub.cnrm.cloud.google.com/pubsub-topic-sample-sync Current 715b429 config-control service.serviceusage.cnrm.cloud.google.com/pubsub.googleapis.com Current 715b429- この出力が表示されない場合は、数分待ってからもう一度試してください。 
- Config Controller がリソースを作成していることを確認します。 - gcloud pubsub topics list- 出力は次のようになります。 - name: projects/PROJECT_ID/topics/start-instance-event --- labels: managed-by-cnrm: 'true' name: projects/PROJECT_ID/topics/sample-topic --- labels: managed-by-cnrm: 'true' name: projects/PROJECT_ID/topics/pubsub-topic-sample-sync --- labels: label-one: value-one managed-by-cnrm: 'true' name: projects/PROJECT_ID/topics/example-topic- この出力には、Config Controller インスタンスの作成セクションで作成した Pub/Sub と、インスタンスを GitHub リポジトリに同期して作成した Pub/Sub が含まれています。 
- Config Connector - PubSubTopicリソースを削除します。- kubectl delete -f pubsub-topic.yaml
- Policy Controller の制約を削除します。 - kubectl delete -f bucket-constraint.yaml
- NAT ルーターを削除します。 - gcloud compute routers delete cc-nat-router \ --project=PROJECT_ID \ --region=us-central1- プロンプトが表示されたら、 - yキーを押します。
- Config Sync が作成した Pub/Sub リソースを削除します。 - kubectl delete PubSubTopic pubsub-topic-sample-sync -n config-control
- RootSync リソースを削除します。 - kubectl delete rootsync root-sync -n config-management-system
- 任意のテキスト エディタを使用して、作成した YAML ファイルをすべて削除します。 - enable-pubsub.yaml
- pubsub-topic.yaml
- bucket-constraint.yaml
- asia-storage-bucket.yaml
- cc-rootsync.yaml
 
- Config Controller インスタンスを削除します。 - gcloud anthos config controller delete --location=us-central1 cc-example- プロンプトが表示されたら、 - yキーを押します。
- Config Controller の設定方法を確認する。
- Config Controller の詳細を確認する。
Config Controller インスタンスを作成する
Config Controller に必要な権限を付与する
このセクションでは、 Google Cloudリソースを管理する権限を Config Controller に付与します。
Config Controller インスタンスを使用する
以降のセクションでは、Config Controller インスタンスの使用方法について説明します。
Config Connector で Google Cloud リソースを作成する
Config Controller インスタンスでは、Config Connector を活用して、Kubernetes ツールと API を使用する多くの Google Cloud サービスとリソースを管理できます。このセクションでは、Config Controller を使用して PubSubTopic リソースを作成します。
Config Connector で Pub/Sub トピックを作成手順は次のとおりです。
Policy Controller でポリシーを適用する
Config Controller インスタンスでは、Policy Controller と Policy Controller の制約を使用できます。Policy Controller の一部として、Config Controller は制約テンプレート ライブラリを自動的にインストールします。このライブラリのテンプレートを使用して、Config Controller インスタンスに共通のセキュリティ管理とコンプライアンス管理を適用できます。
このセクションでは、GCPStorageLocationConstraintV1 制約テンプレートを使用して制約を作成します。このテンプレートを使用すると、Cloud Storage バケットが作成されるロケーションを制限できます。このテンプレートを使用して作成する制約では、ロケーションを us-central1 に制限します。この制約を使用して、優れた費用対効果を提供するリージョンにバケットが作成されるようにします。
制約を作成するには:
Config Sync で GitOps を設定する
Config Sync は、Git リポジトリ、OCI イメージ、Helm リポジトリに保存されている構成ファイル、ポリシー、Google Cloud リソースに Config Controller インスタンスを同期できる GitOps サービスです。Config Sync は Config Controller の状態をソースの構成ファイルに合わせて継続的に調整するため、一貫性のあるインスタンス構成を実現できます。
このセクションでは、Config Controller インスタンスを公開 GitHub リポジトリに同期させます。このリポジトリには別の PubSubTopic リソースが含まれています。このリポジトリからインスタンスを同期すると、リソースが自動的に作成され、インスタンスに適用されます。GitOps ワークフローを使用する場合は、リソースを直接適用するのではなく、Config Sync を使用してリソースを作成することすることもできます。
クリーンアップ
このチュートリアルで使用したリソースについて、 Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトの削除
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID