Apigee ハイブリッド用に Apigee Operator for Kubernetes をインストールする

このページは ApigeeApigee ハイブリッドに適用されます。

Apigee Edge のドキュメントを表示する。

このページでは、Apigee ハイブリッド用の Apigee Operator for Kubernetes をインストールして構成するために必要な手順について説明します。Apigee Operator for Kubernetes を使用する利点については、 Apigee Operator for Kubernetes の概要をご覧ください。

Apigee ハイブリッドを使用していない場合は、Apigee Operator for Kubernetes をインストールするを参照して、Apigee 用の Apigee Operator for Kubernetes をインストールします。

始める前に

始める前に、以下のものが揃っていることを確認してください。

必要なロール

Apigee Operator for Kubernetes のインストールと使用に必要なリソースを設定するために必要な権限については、組織で次の IAM ロールを付与するよう管理者に依頼してください。

  • サービス アカウントを作成して管理する: サービス アカウント管理者(roles/iam.serviceAccountAdmin
  • Apigee リソースを作成して管理する: Apigee 管理者(roles/apigee.admin

ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

必要な設定タスク

Kubernetes 用 Apigee Operator をインストールする前に、次のタスクを完了して、この機能を使用するのに必要なリソースを設定します。

  1. バージョン 1.15.0 以降を使用して Apigee ハイブリッドをインストールします。Apigee ハイブリッドのインストール手順については、全体像をご覧ください。
  2. Google Cloud、Azure、Amazon など、Istio Gateway をサポートするクラウド プロバイダに Kubernetes クラスタを作成します。
  3. K8s クラスタに Istio Gateway をインストールします。
    • GKE のクラスタの場合:
      kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.1.0/standard-install.yaml
      curl -L https://istio.io/downloadIstio | sh -
      cd 1.6.11-asm.1
      export PATH=$PWD/bin:$PATH
      istioctl install --set profile=minimal --set values.global.platform=gke -y
      
    • 他のプロバイダのクラスタの場合:
      kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.1.0/standard-install.yaml
      curl -L https://istio.io/downloadIstio | sh -
      cd 1.6.11-asm.1
      export PATH=$PWD/bin:$PATH
      istioctl install --set profile=minimal -y
      
  4. Istio Gateway を Kubernetes クラスタにデプロイします。
    1. 次の内容を含む gateway.yaml というファイルを作成して、次の内容で Istio Gateway をデプロイします。
      #gateway.yaml
      apiVersion: gateway.networking.k8s.io/v1
      kind: Gateway
      metadata:
        name: istio-gateway
        namespace: default
        annotations:
          service.beta.kubernetes.io/port_80_health-probe_protocol: tcp
      spec:
        gatewayClassName: istio
        listeners:
        - name: default
          hostname: "*.httpbin.com"
          port: 80
          protocol: HTTP
          allowedRoutes:
            namespaces:
              from: All
      
    2. 次のコマンドを使用して、ファイルをクラスタに適用します。
      kubectl apply -f gateway.yaml
      

Istio Gateway の設定を確認する(省略可)

このガイドでは、デプロイしたゲートウェイをテストするために、デフォルトの Namespace にサンプル httpbin アプリケーションをデプロイすることをおすすめします。

  1. バックエンド アプリケーションを Kubernetes クラスタにデプロイして、Gateway をテストします。
    1. 次の内容のファイルを target.yaml という名前で新規に作成します。
      kubectl apply -f - <<EOF
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: httpbin
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: httpbin
        labels:
          app: httpbin
          service: httpbin
      spec:
        ports:
        - name: http
          port: 8000
          targetPort: 8080
        selector:
          app: httpbin
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: httpbin
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: httpbin
            version: v1
        template:
          metadata:
            labels:
              app: httpbin
              version: v1
          spec:
            serviceAccountName: httpbin
            containers:
            - image: docker.io/mccutchen/go-httpbin:v2.15.0
              imagePullPolicy: IfNotPresent
              name: httpbin
              ports:
              - containerPort: 8080
      EOF
      
    2. HTTPRoute リソースをクラスタにデプロイして、Gateway からバックエンド サービスへのトラフィックをマッピングします。

      このガイドでは、HTTPRoute を作成するの手順に沿って、外部ゲートウェイと HTTPRoute をデプロイすることをおすすめします。

      HTTPRoute リソースの詳細については、HTTPRoute をデプロイする(内部ゲートウェイの場合)または HTTPRoute を作成する(外部ゲートウェイの場合)をご覧ください。

      1. 次の YAML 構成を使用して、HTTPRoute を作成するの手順に沿って HTTPRoute を作成します。
        apiVersion: gateway.networking.k8s.io/v1
        kind: HTTPRoute
        metadata:
          name: http-bin-route
          namespace: default
        spec:
          parentRefs:
          - name: istio-gateway
            namespace: default
          hostnames: ["example.httpbin.com"]
          rules:
          - matches:
            - path:
                type: PathPrefix
                value: /get
            backendRefs:
            - name: httpbin
              port: 8000
        
      2. ファイルをクラスタに適用します。
        kubectl apply -f httproute.yaml
        
    3. GKE Gateway の設定を確認して、想定どおりに動作していることを確認します。
      1. 次のコマンドを使用して、Gateway の詳細を取得します。
        kubectl get gateway global-ext-lb1
        

        出力は次のようになります。

        NAME            CLASS   ADDRESS        PROGRAMMED   AGE
        istio-gateway   istio   34.54.193.72   True         11d
        

        IP アドレスがゲートウェイに割り当てられ、PROGRAMMED の値が True であることを確認します。

      2. ゲートウェイを記述して、ルートが接続されていることを確認します。
        kubectl describe gateway istio-gateway
        

        出力は次のようになります。

        ...
          Listeners:
            Attached Routes: 1
            Conditions:
              Last Transition Time:  2024-10-03T03:10:17Z
        ...
        

        [Attached Routes] の値が 1 になっていることを確認します。これは、ルートが接続されていることを示します。

      3. Gateway にリクエストを送信する
        curl http://GATEWAY_IP_ADDRESS/get \
          -H "Host: example.httpbin.com"
        

        ここで、GATEWAY_IP_ADDRESS は Gateway の IP アドレスです。Gateway の IP アドレスは、次のコマンドを使用して取得できます。ここで、GATEWAY_NAME は Gateway の名前です。

        kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses.value}"
        

        次に例を示します。

        curl http://34.54.193.72/get -H "Host: example.httpbin.com"
        

        レスポンスは次のようになります。

        {
            "args": {},
            "headers": {
              "Accept": "*/*",
              "Host": "http://example.httpbin.com",
              "User-Agent": "curl/8.7.1",
              "X-Cloud-Trace-Context": "2bb8a80e29e80662ff9cb89971c447d9/13083106619927322701"
            },
            "origin": "67.164.1.10,34.54.193.72",
            "url": "http://example.httpbin.com/get"
        }
        

    Apigee Operator for Kubernetes をインストールする

    この手順では、Apigee Operator for Kubernetes をインストールして構成するために必要な手順について説明します。

    Apigee Operator for Kubernetes をインストールして構成する

    以降のセクションでは、Apigee Operator for Kubernetes のインストールと構成に必要な手順について説明します。

    1. 環境変数を設定する
    2. APIM サービス アカウントを作成して構成します
    3. Kubernetes 用の Apigee Operator をインストールします。
    4. Apigee ハイブリッド環境を作成します。
    5. Helm を使用して Apigee ハイブリッド環境をインストールします。

    環境変数を設定する

    Apigee インスタンスを含む Google Cloud プロジェクトで、次のコマンドを使用して環境変数を設定します。

    export PROJECT_ID=PROJECT_ID
    export APIGEE_ORG=APIGEE_ORG
    

    ここで

    • PROJECT_ID: Apigee ハイブリッド インスタンスを含むプロジェクトの ID。
    • APIGEE_ORG は Apigee ハイブリッド インスタンスの組織名です。

    次のコマンドを使用して、環境変数が正しく設定されていることを確認します。

    echo $PROJECT_ID $APIGEE_ORG
    

    APIM サービス アカウントを作成して構成する

    Apigee ハイブリッド構成プレーンに接続するためのサービス アカウントを作成します。

    1. Google Cloud サービスに接続する apigee-apim-gsa サービス アカウントを作成する
    2. gcloud iam service-accounts create apigee-apim-gsa
      
    3. 次のコマンドを使用して、作成したサービス アカウントに Apigee 管理者ロールを付与します。このロールは、Apigee リソースの作成と管理に必要です。
      gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member "serviceAccount:apigee-apim-gsa@$PROJECT_ID.iam.gserviceaccount.com" \
        --role "roles/apigee.admin"
      
    4. サービス アカウントに対応する JSON キーファイルをダウンロードします。
      1. 次のコマンドを使用して、$PROJECT_ID-apigee-apim-gsa.json 鍵ファイルを作成してダウンロードします。
        gcloud iam service-accounts keys create $PROJECT_ID-apigee-apim-gsa.json \
          --iam-account=apigee-apim-gsa@$PROJECT_ID.iam.gserviceaccount.com
          --project=$PROJECT_ID
                
      2. ファイルが正しくダウンロードされたことを確認します。
        ls $PROJECT_ID-apigee-apim-gsa.json
                

    Apigee Operator for Kubernetes をインストールする

    Kubernetes のカスタム リソース定義(CRD)と Apigee Operator for Kubernetes をインストールします。

    1. Apigee Operator for Kubernetes の Namespace を作成する
      kubectl create namespace apim
      
    2. Apigee Operator for Kubernetes のカスタム リソース定義(CRD)をインストールします。
      helm install apigee-apim-crds -n apim \
        oci://us-docker.pkg.dev/apigee-release/apigee-k8s-tooling-helm-charts/apigee-apim-operator-crds \
        --version 1.1.0 \
        --atomic
      
    3. Kubernetes 用 Apigee Operator をインストールします。
      helm install apigee-apim-operator -n apim \
        oci://us-docker.pkg.dev/apigee-release/apigee-k8s-tooling-helm-charts/apigee-apim-operator-helm \
        --version 1.1.0 \
        --set serviceAccount=apigee-apim-gsa@$PROJECT_ID.iam.gserviceaccount.com \
        --set apigeeOrg=$APIGEE_ORG \
        --set apigeeEnv=ENV_NAME \
        --set-file serviceAccountKeyFileContent=$PROJECT_ID-apigee-apim-gsa-key.json \
        --atomic
      

      ここで、ENV_NAME は、Apigee Operator for Kubernetes をインストールする Apigee ハイブリッド環境の名前です。

    4. インストールが正常に完了したことを確認します。
      helm list -n apim
      

      出力は次のようになります。

      NAME  NAMESPACE  REVISION  UPDATED  STATUS  CHART  APP VERSION
      apigee-apim-crds  apim  1  2025-09-01 00:17:03.399810627 +0000 UTC  deployed  apigee-apim-operator-crds-1.1.0  1.1.0
      apigee-apim-operator  apim  1  2025-09-01 00:15:00.362829981 +0000 UTC  deployed  apigee-apim-operator-helm-1.1.0  1.1.0
      
    5. 必要なアノテーションを含む Kubernetes サービス アカウント(KSA)が作成されたことを確認します。
      kubectl describe serviceaccounts apim-ksa -n apim
      

      出力は次のようになります。

      Name:                apim-ksa
      Namespace:           apim
      ...
      Annotations:         iam.gke.io/gcp-service-account: apigee-apim-gsa@my-project-id.iam.gserviceaccount.com
      
    6. Kubernetes 用 Apigee Operator がクラスタの Pod で稼働していることを確認します。
      kubectl get pods -n apim
      

      出力は次のようになります。

      NAME  READY  STATUS  RESTARTS  AGE
      apigee-apim-operator-8559d4994b-h55fl   1/1     Running   0   8m34s
      

      STATUS が Running でない場合、または READY に 1/1 が表示されない場合は、Apigee Operator for Kubernetes のトラブルシューティングを参照して、インストールのトラブルシューティングを行います。

    Apigee ハイブリッド環境を作成する

    Apigee Hybrid で Kubernetes 用 Apigee Operator を使用するには、サービス拡張用の特別なフラグを使用して環境を作成する必要があります。

    1. Apigee API に対する認証用のトークンを取得します。

      次の例のように、コマンドラインで gcloud 認証情報を取得します。

      TOKEN=$(gcloud auth print-access-token)

      トークンにデータが入力されていることを確認するには、次の例のように echo を使用します。

      echo $TOKEN

      エンコードされた文字列としてトークンが表示されるはずです。

      詳細については、gcloud コマンドライン ツールの概要をご覧ください。

    2. 次のいずれかのコマンドを使用して環境を作成します。
      • サブスクリプション 2021 を利用している組織の場合:
        curl -X POST "https://apigee.googleapis.com/v1/organizations/$APIGEE_ORG/environments" -H \
          "Authorization: Bearer $TOKEN" -H "content-type:application/json" \
            -d '{
              "name": "ENV_NAME",
              "displayName": "ENV_DISPLAY_NAME",
              "state": "ACTIVE",
              "deploymentType": "PROXY",
              "apiProxyType": "PROGRAMMABLE",
              "properties": {
                "property": [
                  {
                    "name": "apigee-service-extension-enabled",
                    "value": "true"
                  }
                ]
              }
            }'
        

        ここで、ENV_NAME は作成する環境の名前です。

      • サブスクリプション 2024 と従量課金制を利用している組織の場合:
        curl -i -X POST -H "Authorization: Bearer $TOKEN"  "https://apigee.googleapis.com/v1/organizations/$APIGEE_ORG/environments" -H "Content-Type:application/json" -d '{
          "name": "ENV_NAME",
          "displayName": "ENV_NAME",
          "state": "ACTIVE",
          "deploymentType": "PROXY",
          "apiProxyType": "PROGRAMMABLE",
          "type" : "ENV_TYPE",
          "properties": {
            "property": [
              {
                "name": "apigee-service-extension-enabled",
                "value": "true"
              }
            ]
          }
        }'
        

        ここで

        • ENV_NAME は、作成する環境の名前です。
        • ENV_TYPE: 作成する環境のタイプ。たとえば、INTERMEDIATECOMPREHENSIVE です。

      環境が正常に作成されたことを確認します。

      curl -i -H "Authorization: Bearer $TOKEN" \
        "https://apigee.googleapis.com/v1/organizations/$APIGEE_ORG/environments"
      

      詳細については、Apigee ハイブリッドのインストール手順の環境を作成するをご覧ください。

    3. 次のコマンドを使用して環境グループを作成します。
      curl -i -X POST -H "Authorization: Bearer $TOKEN"  "https://apigee.googleapis.com/v1/organizations/$APIGEE_ORG/envgroups" -H "Content-Type:application/json" -d '{
           "name": "'"$ENV_GROUP"'",
           "hostnames":["'"$DOMAIN"'"]
         }'
      

      ここで

      • ENV_GROUP (必須) 環境名には小文字、ダッシュ、数字を含めることができます。また、先頭は小文字にする必要があります。この名前は ID として使用されるため、作成後には変更できません。
      • DOMAIN (必須) これは、このグループ内の環境にデプロイされるすべてのプロキシが使用するホスト名です。これは、お客様が管理するドメインである必要があります。アドレスには、ドメイン自体(example.com など)またはサブドメイン(my-proxies.example.com など)を指定できます。マネージド ドメインを保有されていない場合は、この時点ではプレースホルダを入力できます。ドメイン アドレスは後で変更できます。

      詳細については、Apigee ハイブリッドのインストール手順の環境グループを作成するをご覧ください。

    4. 次のコマンドを使用して、作成した環境グループに環境を接続します。
      curl -i -X POST -H "Authorization: Bearer $TOKEN"  "https://apigee.googleapis.com/v1/organizations/$APIGEE_ORG/envgroups/$ENV_GROUP/attachments" -H "Content-Type:application/json" -d '{
           "environment": "'"$ENV_NAME"'",
         }'
      

    Helm を使用して Apigee ハイブリッド環境をインストールする

    Apigee ハイブリッド クラスタに新しい環境をインストールする手順は、クラスタに他の環境をインストールする手順と似ています。これは、Apigee ハイブリッドがインストールされている Kubernetes クラスタに新しい環境と環境グループの詳細を追加するために必要です。

    1. 次のコマンドを使用して、環境グループのドメインの TLS 証明書を生成します。
      openssl req -nodes -new -x509 -keyout $APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/certs/keystore_$ENV_GROUP.key -out $APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/certs/keystore_$ENV_GROUP.pem -subj "/CN=$DOMAIN" -addext "subjectAltName = DNS:$DOMAIN" -days 3650
      

      ここで

      • APIGEE_HELM_CHARTS_HOME (必須) Apigee ハイブリッドのインストール時に Apigee Helm チャートをダウンロードしたディレクトリ。
    2. 次のコマンドを使用して、TLS 公開証明書を Base64 でエンコードします。
      cat $APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/certs/keystore_$ENV_GROUP.pem | base64 -w0 > $APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/certs/keystore_$ENV_GROUP.pem.base64
      
    3. overrides.yaml ファイルを更新して、envs に次のエントリを追加します。
      - name: ENV_NAME
        serviceAccountPaths:
          # Provide the path relative to the apigee-env chart directory.
          synchronizer: SYNCHRONIZER_SERVICE_ACCOUNT_FILEPATH
          # For example: "PROJECT_ID-apigee-synchronizer.json"
          runtime: RUNTIME_SERVICE_ACCOUNT_FILEPATH
          # For example: "PROJECT_ID-apigee-runtime.json"
          udca: UDCA_SERVICE_ACCOUNT_FILEPATH
          # For example: "PROJECT_ID-apigee-udca.json"
      

      *_SERVICE_ACCOUNT_FILEPATH (必須)は、Apigee ハイブリッドのインストール時に使用したサービス アカウントの JSON キーファイルです。詳細については、Apigee ハイブリッドのインストール手順のオーバーライドを作成するをご覧ください。

    4. overrides.yaml ファイルの virtualhosts に次のエントリを追加します。
      - name: 
        selector:
          app: apigee-ingressgateway
          ingress_name: INGRESS_NAME
        sslCertPath: certs/keystore_$ENV_GROUP.pem
        sslKeyPath: certs/keystore_$ENV_GROUP.key
      

      ここで、INGRESS_NAME (必須)はデプロイの Apigee Ingress ゲートウェイの名前です。詳細については、こちらをご覧ください。

    5. 環境と環境グループをインストールする
      1. 環境をインストールします。

        同時にインストールできる環境は 1 つだけです。--set env=ENV_NAME で環境を指定します。シェルで $ENV_NAME 環境変数を設定している場合は、次のコマンドで使用できます。

        ドライランを実行します。

        helm upgrade ENV_RELEASE_NAME apigee-env/ \
          --install \
          --namespace APIGEE_NAMESPACE \
          --atomic \
          --set env=$ENV_NAME \
          -f overrides.yaml \
          --dry-run=server
        

          ENV_RELEASE_NAME は、apigee-env チャートのインストールとアップグレードの追跡に使用する名前です。この名前は、インストール内の他の Helm リリース名と重複していない必要があります。通常、これは ENV_NAME と同じにします。ただし、環境と環境グループの名前が同じである場合は、環境と環境グループに対して異なるリリース名(dev-env-releasedev-envgroup-release など)を使用する必要があります。Helm でのリリースの詳細については、Helm ドキュメントの 3 つの大きなコンセプトをご覧ください。

        チャートをインストールします。

        helm upgrade ENV_RELEASE_NAME apigee-env/ \
          --install \
          --namespace APIGEE_NAMESPACE \
          --atomic \
          --set env=$ENV_NAME \
          -f overrides.yaml
        

        それぞれの環境の状態をチェックして、稼働していることを確認します。

        kubectl -n APIGEE_NAMESPACE get apigeeenv
        
        NAME                    STATE       AGE   GATEWAYTYPE
        apigee-org1-dev-1       running     2d
        
      2. 環境グループ(virtualhosts)をインストールします。
        1. 一度にインストールできる環境グループ(virtualhost)は 1 つだけです。--set envgroup=ENV_GROUP を使用して環境グループを指定します。シェルで $ENV_GROUP 環境変数を設定している場合は、次のコマンドで使用できます。overrides.yaml ファイルに記載されている env グループそれぞれに対して、次のコマンドを繰り返します。

          ドライランを実行します。

          helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
            --install \
            --namespace APIGEE_NAMESPACE \
            --atomic \
            --set envgroup=$ENV_GROUP \
            -f overrides.yaml \
            --dry-run=server
          

            ENV_GROUP_RELEASE_NAME は、apigee-virtualhosts チャートのインストールとアップグレードの追跡に使用する名前です。この名前は、インストール内の他の Helm リリース名と重複していない必要があります。通常、これは ENV_GROUP と同じにします。ただし、環境グループの名前がインストール環境の環境と同じである場合は、環境グループと環境に異なるリリース名(dev-envgroup-releasedev-env-release など)を使用する必要があります。Helm でのリリースの詳細については、Helm ドキュメントの 3 つの大きなコンセプトをご覧ください。

          チャートをインストールします。

          helm upgrade $ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
            --install \
            --namespace APIGEE_NAMESPACE \
            --atomic \
            --set envgroup=$ENV_GROUP \
            -f overrides.yaml
          

      これで、Apigee Hybrid 組織で新しい環境を使用してサービス拡張機能をテストする準備が整いました。

      APIMExtensionPolicy を作成するの手順に沿って、拡張機能ポリシーを作成します。