高度なインストール オプション

このトピックでは、Config Connector を Google Kubernetes Engine(GKE)クラスタにインストールするための 2 つの追加のインストール オプションとして以下を説明します。

  • 手動インストール: 手動のメソッドでインストールすると、アドオンを使用するよりも速く更新できます。このメソッドでは、より多くの構成オプションも使用できます。たとえば、Config Connector Operator の CPU の上限を引き上げることができます。
  • 名前空間モード: このメソッドは Config Connector のインストール拡張機能です。名前空間モードでは、それぞれ独自の Google Cloud ID を持つ複数のプロジェクトを管理できます。

これらのインストール タイプの詳細については、インストール タイプの選択をご覧ください。

Config Connector Operator の手動インストール

以降のセクションでは、Config Connector Operator を手動でインストールする方法について説明します。

始める前に

Config Connector Operator を手動でインストールする前に、次の手順を行います。

Config Connector Operator のインストール

Config Connector は、Kubernetes Operator を使用してインストールを最新の状態にします。この Operator をインストールするには、次の手順を実行します。

  1. 最新の Config Connector Operator の tar ファイルをダウンロードします。

    gsutil cp gs://configconnector-operator/latest/release-bundle.tar.gz release-bundle.tar.gz
    
  2. tar ファイルを解凍します。

    tar zxvf release-bundle.tar.gz
    
  3. クラスタに Config Connector Operator をインストールします。

    kubectl apply -f operator-system/configconnector-operator.yaml
    

ID を作成する

Config Connector は、Identity and Access Management(IAM)サービス アカウントで認証し、GKE の Workload Identity を使用して IAM サービス アカウントを Kubernetes サービス アカウントにバインドすることで、Google Cloud リソースを作成、管理します。

ID を作成するには、次の手順を行います。

  1. IAM サービス アカウントを作成する。既存のサービス アカウントを使用する場合は、そのアカウントを使用してこの手順を省略できます。

    サービス アカウントを作成するには、次のコマンドを使用します。
      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
    SERVICE_ACCOUNT_NAME をサービス アカウントの名前に置き換えます。
  2. サービス アカウントの作成の詳細については、サービス アカウントの作成と管理をご覧ください。

  3. IAM サービス アカウントに、プロジェクトへの昇格した権限を付与します。
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/owner"
    以下を置き換えます。
    • PROJECT_ID: プロジェクト ID。
    • SERVICE_ACCOUNT_NAME: サービス アカウントの名前。
  4. IAM サービス アカウントと、Config Connector が実行する事前定義された Kubernetes サービス アカウントの間の IAM ポリシー バインディングを作成します。
    gcloud iam service-accounts add-iam-policy-binding \
    SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --member="serviceAccount:PROJECT_ID.svc.id.goog[cnrm-system/cnrm-controller-manager]" \
        --role="roles/iam.workloadIdentityUser"
    以下を置き換えます。
    • SERVICE_ACCOUNT_NAME: サービス アカウントの名前。
    • PROJECT_ID: プロジェクト ID。

Config Connector を構成する

インストールを完了するには、ConfigConnector CustomResource の構成ファイルを作成し、kubectl apply コマンドを使用してそれを適用します。Config Connector Operator は、Google Cloud Resource CRD と Config Connector コンポーネントをクラスタにインストールします。

演算子を構成するには、次の手順を行います。

  1. 次の YAML ファイルを configconnector.yaml という名前のファイルにコピーします。
    # configconnector.yaml
    apiVersion: core.cnrm.cloud.google.com/v1beta1
    kind: ConfigConnector
    metadata:
      # the name is restricted to ensure that there is only one
      # ConfigConnector resource installed in your cluster
      name: configconnector.core.cnrm.cloud.google.com
    spec:
     mode: cluster
     googleServiceAccount: "SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com"
    
    以下を置き換えます。
    • SERVICE_ACCOUNT_NAME: サービス アカウントの名前。
    • PROJECT_ID: プロジェクト ID。
  2. kubectl apply を使用してクラスタに構成を適用します。
      kubectl apply -f configconnector.yaml

リソースを作成する場所の指定

Config Connector では、プロジェクト、フォルダ、組織別にリソースを編成できます。これは、Google Cloud でリソースを編成するのと同じ方法です。

Config Connector を使用してリソースを作成する前に、リソースを作成する場所を構成する必要があります。Config Connector は、リソースを作成する場所を決定するために、リソース構成または既存の Namespace のアノテーションを使用します。詳細については、リソースの整理をご覧ください。

この目的の Namespace がない場合は、kubectl を使用して Namespace を作成します。
kubectl create namespace NAMESPACE

NAMESPACE を実際の Namespace 名に置き換えます。例: config-connector

タブを選択して、Config Connector がリソースを作成する場所を選びます。

プロジェクト

特定のプロジェクトにリソースを作成するには、次のコマンドを実行します。

    kubectl annotate namespace \
    NAMESPACE cnrm.cloud.google.com/project-id=PROJECT_ID

以下を置き換えます。

  • NAMESPACE は、実際の Namespace 名に置き換えます。
  • PROJECT_ID は、Google Cloud プロジェクト ID に置き換えます。

フォルダ

特定のフォルダにリソースを作成するには、次のコマンドを実行します。

    kubectl annotate namespace \
    NAMESPACE cnrm.cloud.google.com/folder-id=FOLDER_ID

以下を置き換えます。

  • NAMESPACE は、実際の Namespace 名に置き換えます。
  • FOLDER_ID は、Google Cloud フォルダ ID に置き換えます。

組織

特定の組織にリソースを作成するには、次のコマンドを実行します。

    kubectl annotate namespace \
    NAMESPACE cnrm.cloud.google.com/organization-id=ORGANIZATION_ID

以下を置き換えます。

  • NAMESPACE は、実際の Namespace 名に置き換えます。
  • ORGANIZATION_ID は、Google Cloud 組織 ID に置き換えます。

名前空間にアノテーションを付けると、Config Connector は対応するプロジェクト、フォルダー、または組織にリソースを作成します。Config Connector が Kubernetes Namespace を使用する方法の詳細については、Kubernetes Namespace と Google Cloud プロジェクトをご覧ください。

インストールの確認

Config Connector は、すべてのコンポーネントを cnrm-system という名前の Namespace で実行します。Pod の準備ができていることを確認するには、次のコマンドを実行します。

kubectl wait -n cnrm-system \
      --for=condition=Ready pod --all

Config Connector が正しくインストールされている場合、出力は次のようになります。

pod/cnrm-controller-manager-0 condition met

Config-connector のアップグレード

Config Connector Operator の最新バージョンをダウンロードしてインストールするには:

gsutil cp gs://configconnector-operator/latest/release-bundle.tar.gz release-bundle.tar.gz
tar zxvf release-bundle.tar.gz
kubectl apply -f operator-system/configconnector-operator.yaml

Config Connector のアンインストール

kubectl delete を使用して、コントローラ コンポーネントとともに Config Connector CRD を削除します。

kubectl delete ConfigConnector configconnector.core.cnrm.cloud.google.com \
    --wait=true

Config Connector Operator をアンインストールするには、次のコマンドを実行します。

kubectl delete -f operator-system/configconnector-operator.yaml  --wait=true

Namespace モードを使用した Config Connector のインストール

以降のセクションでは、Namespace モードを有効にする方法について説明します。

始める前に

Config Connector を名前空間モードで実行するように構成する前に、Config Connector GKE アドオンまたは手動でインストールされた Config Connector Operator が有効になっていることを確認します。

名前空間モードで実行するように Config Connector を構成する

名前空間モードを有効にするには、次の手順を実行します。

  1. 次の YAML マニフェストを configconnector.yaml という名前のファイルにコピーします。

    apiVersion: core.cnrm.cloud.google.com/v1beta1
    kind: ConfigConnector
    metadata:
      # the name is restricted to ensure that there is only ConfigConnector resource installed in your cluster
      name: configconnector.core.cnrm.cloud.google.com
    spec:
     mode: namespaced
    
  2. kubectl apply を使用してクラスタに構成を適用します。

    kubectl apply -f configconnector.yaml
    

Namespace のリソースを管理するように Config Connector を構成する

以降のセクションでは、Config Connector をインストールする Google Cloud プロジェクトは、ホスト プロジェクトまたは HOST_PROJECT_ID と呼ばれます。リソースを管理するその他のプロジェクトは、マネージド プロジェクトまたは MANAGED_PROJECT_ID と呼ばれます。Config Connector を使用してクラスタと同じプロジェクトに Google Cloud リソースを作成する場合のみ、これらが同じプロジェクトになることがあります。

名前空間を作成する

Google Cloud リソースの整理に使用する名前空間がすでにある場合は、この手順をスキップできます。

kubectl を使用して、次のコマンドを実行して新しい名前空間を作成します。

kubectl create namespace NAMESPACE

NAMESPACE は名前空間の名前に置き換えます。

ID を作成する

Identity and Access Management(IAM)サービス アカウントを作成し、IAM サービス アカウントを Config Connector の Kubernetes サービス アカウントにバインドします。

  1. IAM サービス アカウントを作成する。新しいサービス アカウントを作成せずに、既存のサービス アカウントを使用することもできます。次のコマンドを実行して、gcloud を使用してサービス アカウントを作成します。

    gcloud iam service-accounts create NAMESPACE_GSA --project HOST_PROJECT_ID
    

    以下を置き換えます。

    • NAMESPACE_GSA は、Namespace にバインドされた Google サービス アカウント(GSA)の名前に置き換えます。
    • HOST_PROJECT_ID は、ホスト プロジェクトの ID で置き換えます。

    サービス アカウントの作成の詳細については、サービス アカウントの作成と管理をご覧ください。

  2. IAM サービス アカウントに、マネージド プロジェクトへの昇格した権限を付与します。

    gcloud projects add-iam-policy-binding MANAGED_PROJECT_ID \
        --member="serviceAccount:NAMESPACE_GSA@HOST_PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/owner"
    

    以下を置き換えます。

    • MANAGED_PROJECT_ID は、マネージド プロジェクトの ID に置き換えます。
    • NAMESPACE_GSA は、名前空間にバインドされた Google サービス アカウントの名前に置き換えます。
    • HOST_PROJECT_ID は、ホスト プロジェクトの ID で置き換えます。
  3. IAM サービス アカウントと Config Connector Kubernetes サービス アカウントの間の IAM ポリシー バインディングを作成します。サービス アカウントをバインドするには、次の gcloud コマンドを実行します。

    gcloud iam service-accounts add-iam-policy-binding \
    NAMESPACE_GSA@HOST_PROJECT_ID.iam.gserviceaccount.com \
        --member="serviceAccount:HOST_PROJECT_ID.svc.id.goog[cnrm-system/cnrm-controller-manager-NAMESPACE]" \
        --role="roles/iam.workloadIdentityUser" \
        --project HOST_PROJECT_ID
    

    以下を置き換えます。

    • HOST_PROJECT_ID は、ホスト プロジェクトの ID で置き換えます。
    • NAMESPACE_GSA は、名前空間にバインドされた Google サービス アカウントの名前に置き換えます。
    • NAMESPACE は、実際の Namespace で置き換えます。
  4. IAM サービス アカウントに、ホスト プロジェクトの Google Cloud のオペレーション スイートへの Prometheus 指標の公開権限を付与します。

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
        --member="serviceAccount:NAMESPACE_GSA@HOST_PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/monitoring.metricWriter"
    

    以下を置き換えます。

    • HOST_PROJECT_ID は、ホスト プロジェクトの ID で置き換えます。
    • NAMESPACE_GSA は、名前空間にバインドされた Google サービス アカウントの名前に置き換えます。

ConfigConnectorContext を作成する

Google Cloud リソースを作成するには、使用する Namespace に ConfigConnectorContext オブジェクトを追加して、Namespace を監視するように Config Connector を構成する必要があります。

ConfigConnectorContext を作成するには、次の手順を行います。

  1. 次の YAML マニフェストを configconnectorcontext.yaml という名前のファイルにコピーします。

    apiVersion: core.cnrm.cloud.google.com/v1beta1
    kind: ConfigConnectorContext
    metadata:
      # you can only have one ConfigConnectorContext per namespace
      name: configconnectorcontext.core.cnrm.cloud.google.com
      namespace: NAMESPACE
    spec:
      googleServiceAccount: "NAMESPACE_GSA@HOST_PROJECT_ID.iam.gserviceaccount.com"
    

    以下を置き換えます。

    • NAMESPACE は、名前空間の名前に置き換えます。
    • NAMESPACE_GSA は、名前空間にバインドされた Google サービス アカウントの名前に置き換えます。
    • HOST_PROJECT_ID は、ホスト プロジェクトの ID で置き換えます。
  2. kubectl を使用してファイルをクラスタに適用します。

    kubectl apply -f configconnectorcontext.yaml
    
  3. 次のコマンドを実行して、Config Connector Operator が kubectl で Namespace の Kubernetes サービス アカウントを作成したことを確認します。

    kubectl get serviceaccount/cnrm-controller-manager-NAMESPACE  -n cnrm-system
    

    NAMESPACE を実際のバケット名で置き換えます。

  4. 次のコマンドを実行して、kubectl を使用して Namespace で Config Connector コントローラ Pod が実行されていることを確認します。

    kubectl wait -n cnrm-system \
        --for=condition=Ready pod \
        -l cnrm.cloud.google.com/component=cnrm-controller-manager \
        -l cnrm.cloud.google.com/scoped-namespace=NAMESPACE
    

    NAMESPACE を実際のバケット名で置き換えます。

    Config Connector コントローラが実行中の場合は、出力は次のようになります。

    cnrm-controller-manager-abcdefghijk-0 condition met.
    

Namespace のリソースを管理対象から外すように Config Connector を構成する

Config Connector を構成して Namespace を管理対象から外すには、Namespace 内のすべての Config Connector リソースを削除して、Namespace 内の ConfigConnectorContext を削除します。

Namespace 内の Config Connector リソースの削除

ConfigConnectorContext の削除を完了するには、Namespace からすべての Config Connector リソースを削除します。

  1. Namespace 内のすべての Config Connector リソースを検出するには、Config Connector の各カスタム リソース定義ごとに、すべてのリソースを一覧表示します。

    kubectl get crds --selector cnrm.cloud.google.com/managed-by-kcc=true \
    -o=jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}' | xargs -n 1 \
    kubectl get -o jsonpath='{range .items[*]}{" Kind: "}{@.kind}{"Name: "}{@.metadata.name}{"\n"}{end}' \
    --ignore-not-found -n NAMESPACE
    

    NAMESPACE を実際のバケット名で置き換えます。

  2. すべての Config Connector リソースを削除するには、前の手順の出力の各リソースに対して、削除コマンドを発行します。

    kubectl delete -n NAMESPACE KIND NAME
    

    以下を置き換えます。

    • NAMESPACE: Namespace の名前。
    • KIND: 前の手順で検出されたリソースの種類。
    • NAME: 前の手順で検出されたリソースの名前。

ConfigConnectorContext の削除

Config Connector を構成して Namespace 内の Config Connector リソースを管理対象から外すには、Namespace 内の ConfigConnectorContext を削除します。

  kubectl delete -n NAMESPACE ConfigConnectorContext configconnectorcontext.core.cnrm.cloud.google.com

NAMESPACE を実際のバケット名で置き換えます。

ConfigConnectorContext の削除は、Namespace からすべての Config Connector リソースが削除されるまで確定されません。

Config Connector のアンインストール

kubectl delete を使用して、コントローラ コンポーネントとともに Config Connector CRD を削除します。

kubectl delete ConfigConnectorContext --all -A –wait=false

kubectl delete ConfigConnector configconnector.core.cnrm.cloud.google.com \
    --wait=true

Config Connector Operator をアンインストールするには、次のコマンドを実行します。

kubectl delete -f operator-system/configconnector-operator.yaml  --wait=true

オペレーター以外のインストールからのアップグレード

Config Connector バージョン 1.33.0 以降では、GKE アドオン、またはオペレーターを使用したインストールのみがサポートされます。

(すべての Config Connector リソースを保持して)オペレーターにアップグレードするには、CRD を除くすべての Config Connector システム コンポーネントを削除してから、オペレーターをインストールする必要があります。

  1. 次のコマンドを実行して、CRD 以外の Config Connector システム コンポーネントを削除します。

    kubectl delete sts,deploy,po,svc,roles,clusterroles,clusterrolebindings --all-namespaces -l cnrm.cloud.google.com/system=true --wait=true
    kubectl delete validatingwebhookconfiguration abandon-on-uninstall.cnrm.cloud.google.com --ignore-not-found --wait=true
    kubectl delete validatingwebhookconfiguration validating-webhook.cnrm.cloud.google.com --ignore-not-found --wait=true
    kubectl delete mutatingwebhookconfiguration mutating-webhook.cnrm.cloud.google.com --ignore-not-found --wait=true
    
  2. Config Connector を GKE アドオンまたはオペレーターを使用してインストールします。

アドオンから手動インストールへの切り替え

アドオンとしてインストールすると、Config Connector のバージョンはインストールされている GKE バージョンに直接関連付けられます。

手動インストールでは、迅速な更新ができますが手動でアップグレードする必要があります。

すべてのリソースを安全に保ちながら切り替えるには、以下を実行します。

  1. ConfigConnector オブジェクトまたは ConfigConnectorContext オブジェクトを削除せずに、アドオンを無効にします。

    gcloud container clusters update CLUSTER_NAME --update-addons ConfigConnector=DISABLED
    

    CLUSTER_NAME は、Config Connector をインストールしたクラスタの名前に置き換えます。

  2. 手順に沿って目的のバージョンの Operator を手動でインストールします

トラブルシューティング

次のセクションでは、Config Connector のインストールに関するトラブルシューティングのヒントを示します。

リソース調整の権限に関するトラブルシューティング

Config Connector がリソースを正常に調整できず、ログにエラー メッセージ The caller does not have permission, forbidden. が含まれている場合は、GKE クラスタまたはノードプールで Workload Identity が有効になっていない可能性があります。

調べるには、次の手順を行います。

  1. 次の Pod 構成を wi-test.yaml として保存します。
    apiVersion: v1
    kind: Pod
    metadata:
      name: workload-identity-test
      namespace: cnrm-system
    spec:
      containers:
      - image: google/cloud-sdk:slim
        name: workload-identity-test
        command: ["sleep","infinity"]
      serviceAccountName: cnrm-controller-manager
    
  2. GKE クラスタに Pod を作成します。
    kubectl apply -f wi-test.yaml
    
  3. Pod でインタラクティブ セッションを開きます。
    kubectl exec -it workload-identity-test \
      --namespace cnrm-system \
      -- /bin/bash
    
  4. ID を一覧表示します。
    gcloud auth list
    
  5. 表示された ID が、リソースにバインドされた Google サービス アカウントと一致していることを確認します。

    ID ではなく、Compute Engine のデフォルトのサービス アカウントが表示されている場合は、GKE クラスタまたはノードプール(あるいは、それらの両方)で Workload Identity が有効になっていません。

  6. インタラクティブ セッションを終了し、GKE クラスタから Pod を削除します。
    kubectl delete pod workload-identity-test \
    --namespace cnrm-system
    

次のステップ