新しい Apigee ハイブリッドのインストールと管理(プレビュー版)


プレビュー ユーザーガイド:
Apigee ハイブリッド v1.8 の新しいインストールと管理手順のプレビュー。


このドキュメント内:

プレビュー


このドキュメントは、Apigee オペレータ ペルソナ(Apigee ハイブリッド インストールをインストールおよび管理するユーザー)を対象としています。サポートされているいずれかの Kubernetes プラットフォームで Apigee ハイブリッドをインストールした経験があることが、このドキュメントの手順に沿って対応するための前提条件です。評価用の Apigee 組織を作成して、次の手順を試すことをおすすめします。

フィードバック

このプロセスに関するフィードバックを Apigee-hybrid-install-preview@google.com にお送りください。


概要

新しい Apigee ハイブリッド インストールでは、kubectl を使用して Apigee コンポーネントがインストールされ、Apigee ハイブリッドのインストールと管理が、Kustomize などの Kubernetes 構成オーケストレーション ツールに統合されます。インストールされるコンポーネントの強化された有効性と可視性によって、デバッグ性が向上し、インストール プロセス全体が改善されます。

インストール スクリプト apigee-hybrid-setup.sh は、基本的なインストールを行うための簡単なツールを提供します。これを使用してハイブリッド インストールを作成してから、kubectl を使用して、ニーズに合わせて変更できます。また、kubectl を使用して、ゼロからハイブリッド インストールを作成することもできます。Apigee ハイブリッドのすべての設定プロパティが、主要コンポーネントごとに 1 つ yaml ファイルに保存されています。これにより、Kubernetes 環境でのハイブリッド インストールをより細かく制御できます。構成ファイルとインストール スクリプトは、GitHub のリポジトリにあります。

新しいインストール プロセスの変更点

Apigee では、次の理由により、Apigee ハイブリッドのインストール プロセスが変更されています。

  • Apigee ハイブリッドをインストールする新しい方法は、overrides.yaml 構成ファイルを使用しない Argo、Flux、Anthos Config Management などの既存の Kubernetes CI/CD ツールと統合できます。
  • Apigee ハイブリッドには apigeectl が用意されています。これは、Kubernetes クラスタで、特に Apigee ハイブリッドをインストールして管理するための Kubernetes マニフェストを生成するカスタム テンプレート ツールです。新しいインストールおよび管理プロセスは、他のソフトウェア ベンダーと同様のエクスペリエンスを提供します。
  • 新しいプロセスでは、必要な権限、TLS 証明書、事前入力済みのデフォルト値などの必要な基本要素を備えたサービス アカウントを自動的に作成することで、基本的なインストールを速やかに行うことができます。

前提条件

このプレビュー版のインストールを使用するには、次の前提条件を満たしておく必要があります。

プレビュー版

このプレビューは、Apigee ハイブリッド バージョン 1.8.x で動作することを目的としています。これ以降の Apigee ハイブリッド バージョンはサポートされていません。

Apigee ハイブリッドの設定

Apigee ハイブリッドを実際にインストールする前に、ドキュメントの次のセクションに記載されている手順を完了しておく必要があります。

  1. プロジェクトと組織の設定
  2. ハイブリッド ランタイムの設定

ツール

また、ワークステーションには、次のツールをダウンロードして構成する必要があります。

このガイドで使用する共通の変数

このガイドでは、複数の手順で次の環境変数を使用します。定義するには、コマンドラインまたはスクリプトを使用します。つまり、コマンドの入力時に、そのコマンドのテキストを置き換えて定義できます。

  • APIGEE_NAMESPACE: Apigee Namespace。デフォルトは apigee ですが、別の Namespace を使用することもできます。
  • CLUSTER_NAME: Apigee ハイブリッドをインストールするクラスタの名前。これは、ステップ 1: クラスタを作成するで作成するクラスタです。
  • CLUSTER_LOCATION: クラスタのリージョン。このガイドの手順は、リージョン クラスタを使用していることを前提としています。ゾーンクラスタを使用している場合は、ステップ 1: クラスタを作成するの手順をご覧ください。
  • ENV_GROUP: Apigee ハイブリッド インストールの環境グループの名前。これは、ステップ 3: 環境グループを作成するで作成する環境グループです。環境グループは、複数作成できます。
  • ENV_NAME: Apigee ハイブリッド インストールの環境グループの名前。これは、ステップ 3: 環境グループを作成するで作成する環境グループです。環境グループは、複数作成できます。
  • INSTALL_DIR: Apigee ハイブリッドをインストールするディレクトリ。デフォルトでは、インストーラをダウンロードするディレクトリの apigee-hybrid-install/ サブディレクトリです(例: /myhybrid/apigee-hybrid-install/)。これは、Apigee ハイブリッド設定フォルダ構造で説明されているファイル構造のルート ディレクトリです。
  • INSTANCE_DIR: 特定の Apigee ハイブリッド インスタンスのディレクトリ。デフォルトでは、最初のインスタンスの名前は instance-1 です。インスタンス ディレクトリは ${INSTALL_DIR}/overlays/instances/ のサブディレクトリです。ハイブリッド インスタンスには任意の名前を指定できます。複数インスタンスのインストールをご覧ください。
  • ORG_NAME: Apigee ハイブリッド組織の名前。これは、Google Cloud プロジェクト ID と同じでなければなりません。ステップ 2: 組織を作成するをご覧ください。

基本的な Apigee ハイブリッド インストール

カスタマイズをほとんど行わず迅速に Apigee ハイブリッドをインストールするには、次の 2 段階の手順で操作します。


  • 単一の環境
  • 単一の環境グループ
  • Google Cloud サービス アカウントが 1 つ作成され、すべてのコンポーネントに対して使用される
  • すべての暗号鍵とパスワードのデフォルト値。

  1. 設定ファイルをダウンロードする
  2. 設定を実行する

設定ファイルをダウンロードする

https://github.com/apigee/apigee-hybrid-install/releases/tag/preview-1 に GitHub リポジトリのクローンを作成することで、設定ファイルをダウンロードして準備します。

  1. リポジトリのクローンを作成します。

    git clone https://github.com/apigee/apigee-hybrid-install.git
    
  2. クローンを作成したリポジトリのディレクトリに移動します。

    cd apigee-hybrid-install
    
  3. preview-1 タグからブランチを作成します。

    git branch preview-1 preview-1
    git checkout preview-1
    
  4. 設定スクリプトを実行可能にします。

    chmod +x ./tools/apigee-hybrid-setup.sh
    

    クローンが作成されたリポジトリは、Apigee ハイブリッドの設定フォルダ構造で説明されているような構造になります。

設定を実行する

tools/ フォルダにある apigee-hybrid-setup.sh シェル スクリプトを実行します。

./tools/apigee-hybrid-setup.sh --cluster-name $CLUSTER_NAME --cluster-region $CLUSTER_LOCATION --org $ORG_NAME --setup-all

エラーが発生した場合は、スクリプトをもう一度実行してみてください。


他にも次のようなオプションを使用できます。

  • --env $ENV_NAME には Apigee 環境の名前を指定します。
  • --envgroup $ENV_GROUP には環境グループを指定します。
  • --ingress-domain $HOSTNAME には環境グループに指定したホスト名を指定します。
  • --gcp-project-id $PROJECT_ID には Google Cloud プロジェクトの ID を指定します。

他のオプションについては、スクリプトについてをご覧ください。

実行中に発生したエラーは標準出力に書き出されます。

スクリプトが正常に終了すると、基本的なハイブリッド インストールは完了します。新しい API プロキシを作成してデプロイするで詳しく説明されているとおり、インストールは、サンプル プロキシを作成することでテストできます。

カスタマイズされた Apigee ハイブリッド インストール

上級ユーザーがインストールを細かく制御するには、次の一連の手順に沿って操作します(以下に示す手順の多くは、手動で実行することも、その個別の手順をシェル スクリプトを使用して自動化することもできます)。



設定ファイルをダウンロードする

設定ファイルをダウンロードして準備します。

  1. https://github.com/apigee/apigee-hybrid-install/ に、GitHub リポジトリのクローンを作成します

    クローンが作成されたリポジトリは、Apigee ハイブリッドの設定フォルダ構造で説明されているような構造になります。

  2. cd コマンドで apigee-hybrid-install/ ディレクトリに移動します。

  3. 設定スクリプトを実行可能にします。

    chmod +x ./tools/apigee-hybrid-setup.sh
    

Namespace を作成する

すべての Apigee クラスタ コンポーネントを含む Kubernetes Namespace をクラスタに作成します。

kubectl create namespace apigee


Namespace に別の名前を使用する場合は、以下の 3 つの方法のいずれかに沿って操作します。

  • (推奨)リソースの YAML を編集するで値を事前生成するときに --namespace={YOUR_NAMESPACE_NAME} を使用します。
  • 次の 2 つのコマンドを実行します。

    1. kpt を使用して、Apigee Namespace を指定します。

      kpt fn eval "${INSTALL_DIR}/overlays/" \
        --image gcr.io/kpt-fn/apply-setters:v0.2.0 -- \
        APIGEE_NAMESPACE="${APIGEE_NAMESPACE}"
      # This is for replacing the namespace in istio discoveryAddress which cannot be
      # achieved with kpt
      
    2. sed を使用して、istio discoveryAddress の Namespace を置き換えます。

      sed -i -E -e "s/(discoveryAddress: apigee-ingressgateway-manager\.).*(\.svc:15012)/\1${APIGEE_NAMESPACE}\2/" "${INSTALL_DIR}/overlays/controllers/istiod/apigee-istio-mesh-config.yaml"
      
  • また、任意の Namespace に作成されるように、リソースを手動で個別に変更することもできます。

限定公開リポジトリの Docker イメージの使用(省略可)

一般公開されているホストされたイメージを使用しないようにして、独自の限定公開リポジトリのイメージを使用することができます。

  1. 最初のステップは、すべてのイメージを非公開リポジトリに push することです。これを行うには、apigee-pull-push: Apigee X の手順に沿って操作します。デフォルトでは、イメージは対応する Apigee Hybrid バージョンでタグ付けされます。これらのタグは編集しないことをおすすめします。また、イメージ名も編集しないことをおすすめします。これにより、Image Hub で説明するように、最終的なイメージパスを作成できます。
  2. apigee-hybrid-config.yaml ファイルに含まれている imageHub フィールドの値を、限定公開リポジトリのホストパスに設定します(詳しくは、Image Hub をご覧ください)。

    imageHub: "your.private.repo/apigee/hybrid"
    

これにより、すべての Apigee ハイブリッド コンポーネントで限定公開リポジトリのイメージが使用されます。

さらに、限定公開イメージをコントローラおよび Apigee Ingress ゲートウェイに使用することもできます。そうするには、apigee-controller-deployment.yaml ファイルと apigee-ingressgateway-manager-deployment.yaml ファイルを編集し、すべての image フィールドを限定公開リポジトリのイメージに置き換える必要があります。



imagePullSecret の構成(省略可)

  1. 限定公開リポジトリで認証するための認証情報を含む kubernetes Secret を作成します。Secret の作成方法については、Pull an Image from a Private Registry をご覧ください。
  2. Secret が作成されたら、後は Secret を参照するだけです。これを行うには、apigee-hybrid-config.yaml ファイルを編集し、imagePullSecret フィールドの値を先ほど作成した Secret の名前に設定し、対応する kustomization.yaml ファイルで imagePullSecret コンポーネントを有効にします。

両方の場所に imagePullSecrets を指定した場合、apigee-controller-manager.yaml ファイル内にあるものが優先されます。


転送プロキシの構成(省略可)

転送プロキシを構成するには、apigee-hybrid-config.yaml ファイルに forwardProxy フィールドを追加します。次に例を示します。

  forwardProxy: |
    scheme: HTTP
    host: 10.12.0.47
    port: 3128

Ingress TLS 証明書の指定

スクリプトの使用

./tools/apigee-hybrid-setup.sh --create-ingress-tls-certs

このフラグの詳細については、スクリプトについてをご覧ください。

手動

Istio Ingress ゲートウェイに使用する TLS 証明書を提供する必要があります。次のことが可能です。

  • TLS 証明書の取得: 例 | Apigee X に説明されている手順を使用して、既知の認証機関によって署名された証明書を使用する
  • 自己署名証明書を生成する。

ここでは、例として自己署名証明書を使用します。自己署名証明書は、次のコマンドを使用して生成できます(DOMAIN が正しく設定されていて、envgroup で設定されているホスト名と一致していることを前提としています)。

openssl req -nodes -new -x509 -keyout ./tls.key -out ./tls.crt -subj '/CN='$DOMAIN'' -days 3650

これにより、tls.keytls.crt という名前の 2 つのファイルが作成されます。

次に、次の形式の Secret を作成する必要があります。「認証局による証明書の署名にカスタム証明書と鍵のペアを使用する」で説明されているように、kubectl create または kubectl apply を使用できます(省略可)。

apiVersion: v1
kind: Secret
metadata:
  name: "{ORG_NAME}-{ENV_GROUP_NAME}"
  namespace: {$APIGEE_NAMESPACE}
type: Opaque
data:
  cert: |
    {BASE64_ENCODED_TLS_CRT}
  key: |
    {BASE64_ENCODED_TLS_KEY}

---

kubectl create を使用して Secret を作成する例:

kubectl create secret tls {ORG_NAME}-{ENV_GROUP_NAME} \
  --cert="tls.crt" \
  --key="tls.key" \
  -n {$APIGEE_NAMESPACE}


Ingress デプロイを更新する

Ingress デプロイを作成または変更するには、bases/initialization/crds/customresourcedefinition-apigeeorganizations.apigee.cloud.google.com.yaml にある ApigeeOrganization Custom Resource の spec.components.ingressGateways フィールドを変更する必要があります。

デフォルトでは、デフォルトのパラメータを使用して、Ingress デプロイを 1 つ作成します(デフォルト値は CR リファレンス ドキュメント に表示されます)。

ingressGateways:
- name: "prod-1"

例:

A. Ingress サービス フィールドのオーバーライド

ingressGateways:
- name: "prod-1"
  serviceSpec:
    annotations:
      {KEY}: ${VALUE}
    loadBalancerIP: ${IP}

B. レプリカの最小 / 最大の変更

ingressGateways:
- name: "prod-1"
  ​​autoScaler:
    minReplicas: 4
    maxReplicas: 10

C. 新しい Ingress デプロイの追加

ingressGateways:
- name: "prod-1"
- name: "prod-2"

カスタム Google Cloud サービス アカウントの構成



スクリプトの使用

./tools/apigee-hybrid-setup.sh --create-gcp-sa-and-secrets  --namespace APIGEE_NAMESPACE

ここで、APIGEE_NAMESPACE はカスタム Namespace です。デフォルトの Namespace は apigee です。

フラグの詳細については、スクリプトについてをご覧ください。

手動

Google Cloud サービス アカウント キーは、クラスタ内に Secret として保存する必要があります。Secret yaml の構造は次のとおりです。

apiVersion: v1
kind: Secret
metadata:
  name: "{NAME}"
  namespace: {APIGEE_NAMESPACE}
type: Opaque
data:
  client_secret.json: |
    {BASE64_ENCODED_SA_KEY}

必要なすべてのサービス アカウントと Secret の名前の詳細については、Google Cloud サービス アカウントのセクションをご覧ください。

Secret には別の名前を自由に選択できますが、その場合は、その Secret 名が使用されていたコンポーネントで、対応する変更を行う必要があります。たとえば、ランタイム サービス アカウントの Secret の名前を apigee-runtime-svc-account-${ORG_NAME}-${ENV_NAME} から my-runtime-svc に変更する場合は、その環境の apigee-environment.yaml で、対応する変更を行う必要があります。



Workload Identity の使用


カスタム Google Cloud サービス アカウントを構成するか、Workload Identity を使用する必要があります。


前提条件

Workload Identity を使用する前に、GKE クラスタでサポートが有効になっていることを確認します。詳細については、ノードプールを更新する | Apigee X をご覧ください。

Workload Identity の有効化

インストール前に Workload Identity を有効にする方法の詳細については、Kustomize とコンポーネントworkload-identity セクションをご覧ください。

リソース yaml を編集する

コンポーネント YAML には、正しい組織名、環境名、環境グループ名が必要になる部分があります。これらの値は手動で設定することも、シェル スクリプトを使用して自動的に設定することもできます。

スクリプトの使用

./tools/apigee-hybrid-setup.sh --fill-values

初期化リソースとコントローラを作成する

#Additional steps for openshift
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/openshift
//apigee datastore
kubectl apply -f ${INSTANCE_DIR}/overlays/instances/${INSTANCE_DIR}/datastore/components/openshift-scc/scc.yaml
//telemetry
kubectl apply -f ${INSTANCE_DIR}/overlays/instances/${INSTANCE_DIR}/telemetry/components/openshift-scc/scc.yaml

#Create Apigee initialization kubernetes resources
kubectl apply -f ${INSTALL_DIR}/overlays/initialization/namespace.yaml
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/certificates
kubectl apply --server-side --force-conflicts -k ${INSTALL_DIR}/overlays/initialization/crds
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/webhooks
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/rbac
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/ingress

# Create controller config and controller
kubectl apply -k ${INSTALL_DIR}/overlays/controllers

# Wait for the controllers to be available
kubectl wait deployment/apigee-controller-manager deployment/apigee-ingressgateway-manager -n "${APIGEE_NAMESPACE}" --for=condition=available --timeout=2m

# Create the datastore and redis secrets first and then the rest of the secrets.
kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastore/secrets.yaml
kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/redis/secrets.yaml
kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/environments/${ENV_NAME}/secrets.yaml
kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/organization/secrets.yaml

コントロール プレーンを操作するための権限を Synchronizer サービス アカウントに付与する

ステップ 8: Synchronizer アクセスを有効にするの手順に沿って、サービス アカウントの名前(apigee-non-prod または apigee-synchronizer)を apigee-all-sa(新しいインストール プロセスで作成されたサービス アカウントの名前)に置き換えます。


★ 重要: サービス アカウント名は、Synchronizer アクセスを有効にするの手順で変更してください。そうしないと、Synchronizer へのアクセスを有効にできません。


Apigee データプレーン コンポーネントを作成する

前の手順でリソースの名前を変更した場合は、そのリソースが参照されている他の YAML ファイルでも、対応する変更を行う必要があります。それが完了したら、次の例のコマンドを実行します。

# Create the rest of the resources.
kubectl apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}

これにより、すべてのコンポーネントがインストールされます。

リソースの開始を待つ

kubectl wait "apigeedatastore/default" \
"apigeeredis/default" \
"apigeeenvironment/${ORG_NAME}-${ENV_NAME}" \
"apigeeorganization/${ORG_NAME}" \
"apigeetelemetry/apigee-telemetry" \
-n "${APIGEE_NAMESPACE}" --for="jsonpath=.status.state=running" --timeout=15m

カスタム Namespace での cert-manager のインストールをカスタマイズする

次の手順で、cert-manager が実行されている Namespace をカスタマイズします。

cert-manager が cert-manager 以外の Namespace にあるクラスタにインストールされている場合は、Apigee ルート証明書の作成に使用する Namespace を更新する必要が生じます。

  1. 証明書の作成用に、customization.yaml ファイル($INSTALL_DIR/overlays/initialization/certificates/kustomize.yaml)を編集します。
  2. ファイルの末尾に以下を追加します。

    - patch: |-
    - op: replace
      path: /metadata/namespace
      value: "gk-cert-manager"
    target:
    group: cert-manager.io
    version: v1
    kind: Certificate
    name: apigee-root-certificate
    
  3. ファイルを保存します。

Kustomize とコンポーネント

概要

新しいハイブリッド インストールは、ベースオーバーレイという形式で yaml を構築する Kustomize イデオロギーを継承します。

  • ベースは、Apigee から提供されるファイルで、新しいハイブリッド リリースごとに変わる可能性があります。これらのファイルを変更する必要はありません。これらのファイルには、Apigee から提供されるデフォルト値がいくつか含まれています。最上位の bases/ フォルダの下にあるすべてのファイルに、これらのベースが含まれます。
  • オーバーレイは、ユーザー構成を保持し、ベースで指定されたデフォルト値を変更できる手段として機能します。最上位の overlays/ フォルダの下にあるすべてのファイルに、これらのオーバーレイが含まれます。



コンポーネントの使用方法

最上位の overlays/ ディレクトリ内のサブフォルダは、kustomization.yaml ファイルの特定の行をコメント化(またはコメント化解除)することで、追加機能を有効(または無効)にできるように構成されています。

たとえば、overlays/instances/{INSTANCE_NAME}/telemetry フォルダ構造は次のようになります。

telemetry
├── components
│   ├── http-proxy
│   ├── imagepullsecret
│   ├── logger
│   ├── metrics
│   ├── nodeselector
│   ├── openshift-scc
│   ├── workload-identity-logger
│   └── workload-identity-metrics
├── apigee-telemetry.yaml
└── kustomization.yaml

デフォルトの telemetry/kustomization.yaml ファイルは次のようになります。

resources:
- apigee-telemetry.yaml

components:
- ./components/metrics
# - ./components/workload-identity-metrics
# - ./components/logger
# - ./components/workload-identity-logger
# - ./components/http-proxy
# - ./components/nodeselector/
# - ./components/imagepullsecret
# - ./components/openshift-scc

./components/logger がコメントアウトされていることがわかります。これは単に、uGoogle Clod ロガーをデフォルトで有効にしていないことを意味します。これを有効にするには、次のようにその行をコメント化解除します。

components:

- ./components/logger

同様に、指標を無効にするには、./components/metrics 行をコメントアウトします。

...
components:
...
# - ./components/metrics
…

以降のセクションでは、このようなさまざまなコンポーネントについて、それらが使用される場面、および構成方法について説明します。

OpenShift

Apigee ハイブリッドを OpenShift クラスタにインストールするユーザーの場合、インストールを実施する前に、コンポーネント / リソースをいくつか有効にしなければならないことがあります(インストールの実行にスクリプトを使用しない場合は、これが必要です)。変更が必要なファイルは次のとおりです。

  • overlays/initialization/openshift/kustomization.yaml .resources: セクションでコメント化解除します。

    # - ../../../bases/initialization/openshift/
    
  • overlays/instances/{INSTANCE_NAME}/datastore/kustomization.yaml コメント化解除します。

    # - ./components/openshift-scc
    

    components:」フィールドがまだコメントアウトされている場合は、コメント化解除します。

  • overlays/instances/{INSTANCE_NAME}/telemetry/kustomization.yaml コメント化解除します。

    # - ./components/openshift-scc
    

    components:」フィールドがまだコメントアウトされている場合は、コメント化解除します。

その後、インストール手順を続行できます。

imagepullsecret

このコンポーネントは、限定公開リポジトリにイメージが保存されている場合に有効にできます。限定公開リポジトリからイメージを pull するには、認証情報を含める Kubernetes Secret を作成し、この Secret を内部で参照できます。手順については、imagePullSecret の構成(省略可)をご覧ください。詳細については、Kubernetes のドキュメントの Pull an Image from a Private Registry | Kubernetes をご覧ください。

使用できる環境:

  • overlays/controllers/apigee-controller
  • overlays/controllers/istiod
  • overlays/instances/{INSTANCE_NAME}/datastore
  • overlays/instances/{INSTANCE_NAME}/environments/{ENV_NAME}
  • overlays/instances/{INSTANCE_NAME}/organization
  • overlays/instances/{INSTANCE_NAME}/redis
  • overlays/instances/{INSTANCE_NAME}/telemetry

有効化:

それぞれの kustomization.yaml ファイルで「./components/imagepullsecret/」行をコメント化解除します(必要な場合)。

変更内容:

  • components/imagepullsecret/patch.yaml
    • 必須。関連する Secret 名を spec.template.spec.imagePullSecrets のリストに追加します

使用方法:

  1. Apigee ハイブリッドをまだインストールしていない場合、インストール手順に進むと、これらの変更がプロセスに適用されます。
  2. Apigee ハイブリッドがすでにインストールされている場合は、次のコマンドを使用して、これらの新しい変更を適用する必要があります。

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

nodeselector

このコンポーネントを使用すると、特定のノード上の Apigee リソースの Pod をスケジュールできます。追加情報については、Assigning Pods to Nodes | Kubernetes をご覧ください。

使用できる環境:

  • overlays/controllers/apigee-controller
  • overlays/controllers/istiod
  • overlays/instances/{INSTANCE_NAME}/datastore
  • overlays/instances/{INSTANCE_NAME}/environments/{ENV_NAME}
  • overlays/instances/{INSTANCE_NAME}/organization
  • overlays/instances/{INSTANCE_NAME}/redis
  • overlays/instances/{INSTANCE_NAME}/telemetry

有効化:

それぞれの kustomization.yaml ファイルで「./components/nodeselector」行をコメント化解除します(必要な場合)。

変更内容:

  • components/nodeselector/patch.yaml
    • 省略可。ノードセレクタのラベルの値を apigee-runtime または apigee-data から目的の値に変更します。

使用方法:

  1. Apigee ハイブリッドをまだインストールしていない場合、インストール手順に進むと、これらの変更がプロセスに適用されます。
  2. Apigee ハイブリッドがすでにインストールされている場合は、次のコマンドを使用して、これらの新しい変更を適用する必要があります。

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

workload-identity

Apigee ハイブリッド エコシステムのさまざまなコンテナには、Apigee コントロール プレーン / 管理プレーンに対して特定の API 呼び出しを行う権限が必要です。Workload Identity は、Pod(および Pod 内のコンテナ)にこれらの権限を付与する方法の一つです。詳細については、Workload Identity の概要: GKE アプリケーションの認証の改善 | Google Cloud ブログ - Workload Identity を使用する | Kubernetes Engine のドキュメント | Google Cloud をご覧ください。

使用できる環境:

  • overlays/instances/{INSTANCE_NAME}/datastore
  • overlays/instances/{INSTANCE_NAME}/environments/{ENV_NAME}
  • overlays/instances/{INSTANCE_NAME}/organization
  • overlays/instances/{INSTANCE_NAME}/redis
  • overlays/instances/{INSTANCE_NAME}/telemetry

前提条件:

Workload Identity を使用できるようにするには、次のコマンドを使用して、Google Cloud プロジェクト内で関連する権限を付与する必要があります。

    gcloud iam service-accounts add-iam-policy-binding \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:${ORG_NAME}.svc.id.goog[${APIGEE_NAMESPACE}/${KSA_NAME}]" \
        ${GSA_NAME}@${ORG_NAME}.iam.gserviceaccount.com

ここで、 - ${ORG_NAME} は、実際の Apigee 組織名です。 - ${APIGEE_NAMESPACE} は、Apigee コンポーネントがインストールされている Kubernetes Namespace です。通常はインストール時にユーザーが明示的に変更しない限り、apigee になります - ${KSA_NAME} は、Kubernetes Namespace の名前です。このコマンドは、Kubernetes サービス アカウントに記載されている Kubernetes サービス アカウントごとに実行する必要があります - ${GSA_NAME} は、Google Cloud サービス アカウントの名前です。インストール時に変更しなかった場合、これは値 apigee-all-sa になります。個々のコンポーネントに複数の Google Cloud サービス アカウントを設定する場合は、KSA_NAME を対応する GSA_NAME と一致させる必要があります。Google Cloud サービス アカウントのテーブルと Kubernetes サービス アカウントのテーブルを比較して、同等のものを見つけます。

有効化:

それぞれの kustomization.yaml ファイルで ./components/workload-identity 行をコメント化解除します(必要な場合)。テレメトリーには、metrics コンポーネントと logger コンポーネントそれぞれに対して別々に Workload Identity アドオンがあり、個別に有効にできます。

使用方法:

  1. ハイブリッドをまだインストールしていない場合は、前のセクションで説明したように Workload Identity を有効にするだけで、インストールに進むことができ、Workload Identity が自動的に使用されます。
  2. Apigee ハイブリッドがすでにインストールされている場合は、次のコマンドを使用して、これらの新しい変更を適用する必要があります。

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

http-proxy

次の各コンポーネントでプロキシ サーバーを設定して、そのコンポーネントのトラフィックが、そのコンポーネント用に設定された HTTP プロキシを経由するようにできます。プロキシは Apigee コンポーネントごとに個別に設定できます。

使用できる環境:

  • overlays/instances/{INSTANCE_NAME}/datastore
  • overlays/instances/{INSTANCE_NAME}/environments/{ENV_NAME}
  • overlays/instances/{INSTANCE_NAME}/organization
  • overlays/instances/{INSTANCE_NAME}/telemetry

有効化:

それぞれの kustomization.yaml ファイルで「./components/http-proxy/」行をコメント化解除します(必要な場合)。

変更内容:

  • components/http-proxy/patch.yaml 次のパラメータは spec.httpForwardProxy で設定できます
    • scheme: 必須HTTP または HTTPS のいずれか
    • host: 必須。プロキシのホストアドレス
    • port: 必須。ポート番号
    • username: 省略可。プロキシに関連付けられたユーザー名
    • password: 省略可。プロキシにアクセスするためのパスワード

使用方法:

  1. Apigee ハイブリッドをまだインストールしていない場合、インストール手順に進むと、これらの変更がプロセスに適用されます。
  2. Apigee ハイブリッドがすでにインストールされている場合は、次のコマンドを使用して、これらの新しい変更を適用する必要があります。

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

logger と metrics

overlays/instances/{INSTANCE_NAME}/telemetry 内で、logger または metrics を個別に有効または無効にできます。デフォルトでは、logger は無効で、metrics は有効になっています。これを有効または無効にするには、その行をコメント化解除またはコメント化するだけです。

gcs-backup と gcs-restore

この kustomize コンポーネントを使用すると、Google Cloud Storage への cassandra データベースのバックアップと復元を実施できます。

使用できる環境:

  • overlays/instances/{INSTANCE_NAME}/datastore

前提条件:

  1. ストレージ オブジェクト管理者ロールを持つアカウントの Google Cloud サービス アカウント キーをダウンロードします。

    • スクリプトを使用してインストールを実行し、Workload Identity を使用しなかった場合、スクリプトによって作成される service-accounts フォルダで使用可能なダウンロードしたキーを再利用できます。
    • また、create-service-account.sh スクリプトを使用して新しいサービス アカウントを作成し、そのキーをダウンロードできます。

      ./tools/create-service-accounts=.sh --env prod --profile apigee‑cassandra
      
  2. キーがダウンロードされたら、apigee-cassandra-backup-and-restore-gcp-sa-key という名前の Kubernetes Secret を作成する必要があります。これは、次のコマンドを使用して実行できます。

    kubectl create secret generic "apigee-cassandra-backup-and-restore-gcp-sa-key" \
              --from-file="dbbackup_key.json=${PATH_TO_SA_KEY}" \
              -n "${APIGEE_NAMESPACE}"
    

    ここで

    • ${PATH_TO_SA_KEY} は、サービス アカウント キーを含むファイルのパスです。
    • ${APIGEE_NAMESPACE} は Apigee コンポーネントがインストールされている kubernetes Namespace です。通常は、インストール時に明示的に変更しない限り、Apigee になります

テンプレート ファイル template/secret-apigee-cassandra-backup-and-restore-gcp-sa-key.yaml を使用してこの Secret を作成することもできます。

有効化:

  • バックアップを有効にするには、データストアの kustomization.yaml ファイルの「./components/gcs-backup」行をコメント化解除します。
  • バックアップを復元するには、データストアの kustomization.yaml ファイルの「./components/gcs-restore」行をコメント化解除します。

バックアップの変更のみ

  • components/gcs-backup/apigee-datastore-patch.yaml
    • 必須。DATABASE_STORAGE_BUCKET 環境変数の値を変更します。これは gs://BUCKET_NAME という形式で、データをバックアップする Google Cloud Storage バケットを指します。Description はこちらに記載された dbStorageBucket と一致します。
  • components/non-gcs-backup/cron-patch.yaml
    • 必須。spec.schedule を変更して、バックアップの頻度を指定します。Field は、標準の Crontab スケジュール形式で指定できます。Description はこちらに記載されたスケジュールと一致します。
    • 必須。DATABASE_STORAGE_BUCKET 環境変数の値を変更します。これは gs://BUCKET_NAME という形式で、データをバックアップする Google Cloud Storage バケットを指します。Description はこちらに記載された dbStorageBucket と一致します。
    • 省略可。HTTP_PROXY_URL の値を、設定された任意のプロキシを指すように変更します。形式は以下のようになります。
      • http://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • https://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS>:${HOST_PORT}

バックアップの実施

バックアップを行うには、次のコマンドを使用します。

kubectl apply -k overlays/instances/{INSTANCE_NAME}

変更を適用してバックアップを有効にするには:

復元の変更のみ

  • components/gcs-restore/apigee-datastore-patch.yaml
    • 必須。DATABASE_STORAGE_BUCKET 環境変数の値を変更します。これは gs://BUCKET_NAME という形式で、データをバックアップする必要がある Google Cloud Storage バケットを指します。Description はこちらに記載された dbStorageBucket と一致します。
  • components/gcs-restore/job-patch.yaml
    • 必須。DATABASE_STORAGE_BUCKET 環境変数の値を変更します。これは gs://BUCKET_NAME という形式で、データをバックアップする必要がある Google Cloud Storage バケットを指します。
    • 必須。BACKUP_SNAPSHOT_TIMESTAMP の値を変更します。Description はこちらに記載された restore:snapshotTimestamp と一致します。
    • 省略可。HTTP_PROXY_URL の値を、設定された任意のプロキシを指すように変更します。形式は以下のようになります。
      • http://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • https://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}

復元の実施:

バックアップの復元の背景情報については、バックアップの復元 | Apigee X | Google Cloud を参照してください

  1. ハイブリッド ランタイム デプロイを復元する新しい Namespace で新しい Kubernetes クラスタを作成します。元のハイブリッド インストールに使用していたものと同じクラスタと Namespace を使用することはできません。
  2. 他の必要な設定に加え、上記の設定を使用してハイブリッドを新しいクラスタにインストールします。

    • 基本インストールを使用して、新しい Namespace にハイブリッドをインストールできます。
    ./tools/apigee-hybrid-setup.sh \
    --cluster-name $CLUSTER_NAME \
    --cluster-region $CLUSTER_LOCATION \
    --namespace ${NEW_APIGEE_NAMESPACE}
    
  3. 復元が完了したら、古い Namespace のすべてのリソースが削除され、新しい Namespace に切り替えることができます。

詳細については、バックアップの復元に関する記事をご覧ください。

non-gcs-backup と non-gcs-restore

この kustomize コンポーネントを使用すると、Google Cloud Storage への cassandra データベースのバックアップと復元を実施できます。

使用できる環境:

  • overlays/instances/{INSTANCE_NAME}/datastore

前提条件:

  1. 既存のドキュメントのサーバーと SSH を設定する手順を利用できます。
  2. 上記の手順で、SSH 秘密鍵を使用する必要があります。この秘密鍵は、前の手順で生成した「ssh_key」ファイル内にあります。次に、この SSH 秘密鍵を含む Kubernetes Secret を apigee-cassandra-backup-and-restore-gcp-sa-key という名前で作成します。



    Kubernetes Secret を作成するには、次のコマンドを使用します。

    kubectl create secret generic "apigee-cassandra-backup-and-restore-key-file" \
            --from-file="key=${PATH_TO_SSH_PRIVATE_KEY}" \
            -n "${APIGEE_NAMESPACE}"
    

    ここで

    • ${PATH_TO_SSH_PRIVATE_KEY} は、SSH 公開鍵を含むファイルのパスです
    • ${APIGEE_NAMESPACE} は Apigee コンポーネントがインストールされている Kubernetes Namespace です。通常は、インストール時に明示的に変更しない限り、Apigee になります

    テンプレート ファイル template/secret-apigee-cassandra-backup-and-restore-key-file.yaml を使用してこの Secret を作成することもできます。

有効化:

  • バックアップを有効にするには、データストアの kustomization.yaml ファイルの「./components/non-gcs-backup」行をコメント化解除します。
  • バックアップを復元するには、データストアの kustomization.yaml ファイルの「./components/non-gcs-restore」行をコメント化解除します。

バックアップの変更のみ

  • components/non-gcs-backup/apigee-datastore-patch.yaml
    • 必須。BACKUP_SERVER_IP の値を変更します。Description はこちらに記載された BACKUP_SERVER_IP と一致します。
    • 必須。BACKUP_STORAGE_DIR の値を変更します。Description はこちらに記載された BACKUP_STORAGE_DIR と一致します。
  • components/non-gcs-backup/cron-patch.yaml
    • 必須。spec.schedule を変更して、バックアップの頻度を指定します。Field は、標準の Crontab スケジュール形式で指定できます。Description はこちらに記載されたスケジュールと一致します。
    • 必須。BACKUP_SERVER_IP の値を変更します。Description はこちらに記載された BACKUP_SERVER_IP と一致します。
    • 必須。BACKUP_STORAGE_DIR の値を変更します。Description はこちらに記載された BACKUP_STORAGE_DIR と一致します。
    • 省略可。HTTP_PROXY_URL の値を、設定された任意のプロキシを指すように変更します。形式は以下のようになります。
      • http://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • https://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}

バックアップの実施

バックアップを行うには、次のコマンドを使用します。

kubectl apply -k overlays/instances/{INSTANCE_NAME}

変更を適用してバックアップを有効にするには:

バックアップの変更のみ

  • components/non-gcs-restore/apigee-datastore-patch.yaml
    • 必須BACKUP_SERVER_IP の値を変更します。Description はこちらに記載された BACKUP_SERVER_IP と一致します。
    • 必須。BACKUP_STORAGE_DIR の値を変更します。Description はこちらに記載された BACKUP_STORAGE_DIR と一致します。
  • components/non-gcs-restore/job-patch.yaml
    • 必須BACKUP_SNAPSHOT_TIMESTAMP 環境変数の値を変更します。Description はこちらに記載された restore:snapshotTimestamp と一致します。
    • 必須BACKUP_SERVER_IP の値を変更します。Description はこちらに記載された BACKUP_SERVER_IP と一致します。
    • 必須BACKUP_STORAGE_DIR の値を変更します。Description はこちらに記載された BACKUP_STORAGE_DIR と一致します。
    • 省略可HTTP_PROXY_URL の値を、設定された任意のプロキシを指すように変更します。形式は以下のようになります。
      • http://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • https://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}

復元の実施:

バックアップの復元の概要については、Cassandra の復元の概要をご覧ください。

  1. ハイブリッド ランタイム デプロイを復元する新しい Namespace で新しい Kubernetes クラスタを作成します。元のハイブリッド インストールに使用していたものと同じクラスタと Namespace を使用することはできません。
  2. 他の必要な設定に加え、上記の設定を使用してハイブリッドを新しいクラスタにインストールします。基本インストールを使用して、新しい Namespace にハイブリッドをインストールできます。

    ./tools/apigee-hybrid-setup.sh \
      --cluster-name $CLUSTER_NAME \
      --cluster-region $CLUSTER_LOCATION \
      --namespace ${NEW_APIGEE_NAMESPACE}
    

    または、カスタマイズされた Apigee ハイブリッドのインストールに沿って、自由に設定してください。

  3. 復元が完了したら、古い Namespace のすべてのリソースが削除され、新しい Namespace に切り替えることができます。

    詳細については、リモート サーバーでのバックアップのスケジュール設定をご覧ください。

http-client

手順については、HTTP クライアントを有効にする | Apigee をご覧ください。

使用できる環境:

  • overlays/instances/${INSTANCE_NAME}/route-config/${ENV_GROUP}

有効化:

それぞれの route-config/${ENV_GROUP}/kustomization.yaml ファイルの「./components/http-client」行をコメント化解除します

変更内容:

  • 必須の変更は不要です。

使用方法:

  1. Apigee ハイブリッドをまだインストールしていない場合、インストール手順に進むと、これらの変更がプロセスに適用されます。
  2. Apigee ハイブリッドがすでにインストールされている場合は、次のコマンドを使用して、これらの新しい変更を適用する必要があります。

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

non-sni-client

既存の SNI 以外のクライアントの構成方法 | Apigee と同等です。

使用できる環境:

  • overlays/instances/${INSTANCE_NAME}/route-config/${ENV_GROUP}

有効化:

それぞれの route-config/${ENV_GROUP}/kustomization.yaml ファイルの「./components/non-sni-client」行をコメント化解除します

変更内容:

  • components/non-sni-client/apigee-route.yaml

使用方法:

  1. Apigee ハイブリッドをまだインストールしていない場合、インストール手順に進むと、これらの変更がプロセスに適用されます。
  2. Apigee ハイブリッドがすでにインストールされている場合は、次のコマンドを使用して、これらの新しい変更を適用する必要があります。

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

http-and-non-sni-client

手順については、SNI 以外のクライアントと HTTP クライアントの両方のサポートを有効にする | Apigee をご覧ください。

有効化:

それぞれの route-config/${ENV_GROUP}/kustomization.yaml ファイルの「./components/http-and-non-sni-client」行をコメント化解除します

変更内容:

  • components/http-and-non-sni-client/apigee-route.yaml

使用方法:

  1. Apigee ハイブリッドをまだインストールしていない場合、インストール手順に進むと、これらの変更がプロセスに適用されます。
  2. Apigee ハイブリッドがすでにインストールされている場合は、次のコマンドを使用して、これらの新しい変更を適用する必要があります。

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

multi-region

このコンポーネントは、マルチリージョンの cassandra デプロイを設定するときに使用できます。詳細については、GKE と GKE On-Prem でのマルチリージョン デプロイに関する記事をご覧ください

有効化:

datastore/kustomization.yaml ファイルの「./components/multi-region」行をコメント化解除します

変更内容:

  • components/multi-region/cassandra-data-replication.yaml

    • 必須source.region データの複製元の Cassandra データセンター名。ソースクラスタで、次のコマンドを使用して特定できます。
    kubectl get apigeedatastore -n ${APIGEE_NAMESPACE} -o=jsonpath='{.items[*].spec.components.cassandra.properties.datacenter}'
    
  • components/multi-region/patch.yaml

    • 必須spec.components.properties.multiRegionSeedHost 任意のソース cassandra Pod の Pod IP。次のコマンドを使用できます。
    kubectl get pods -n ${APIGEE_NAMESPACE} -o wide
    
    • 次のコマンドを使用して、すべての Pod を一覧表示し、任意の cassandra Pod の IP を取得します。
    kubectl get pods -o wide -n apigee
    

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

    NAME                      READY   STATUS      RESTARTS   AGE   IP          NODE                                          NOMINATED NODE
    apigee-cassandra-default-0        1/1     Running     0          5d    10.0.0.11   gke-k8s-dc-2-default-pool-a2206492-p55d
    apigee-cassandra-default-1        1/1     Running     0          5d    10.0.2.4    gke-k8s-dc-2-default-pool-e9daaab3-tjmz
    apigee-cassandra-default-2        1/1     Running     0          5d    10.0.3.5    gke-k8s-dc-2-default-pool-e589awq3-kjch
    

詳細については、「GKE、GKE On-Prem、AKS でのマルチリージョン デプロイ」に関する記事にある GKE の前提条件をご覧ください。

使用方法:

新しいクラスタで Apigee ハイブリッドを設定するときに、Apigee ハイブリッドの別の設定がすでに存在する場合は、このコンポーネントを使用するのがよいでしょう。

  1. Cassandra Pod 間で適切な通信を確保するには、新しいクラスタと既存のクラスタの両方で同じ TLS 証明書を使用する必要があります。そのため、既存のクラスタから apigee-root-certificate Secret をコピーして、新しいクラスタでも使用する必要があります。
  2. 実行:

    kubectl config get-contexts
    
    • すべての Kubernetes コンテキストのリストを取得し、次のコマンドを実行します。
    kubectl config use-context SOURCE_CLUSTER_CONTEXT
    

    ここで、SOURCE_CLUSTER_CONTEXT はソース Kubernetes クラスタ コンテキストの名前です。

  3. ルート証明書 Secret をファイルに保存します。

    kubectl get secret/apigee-root-certificate -n cert-manager -o yaml > apigee-root-certificate.yaml
    
  4. クラスタ コンテキストを、Apigee ハイブリッドをインストールする新しいクラスタに切り替えます。

    kubectl config use-context ${NEW_CLUSTER_CONTEXT}
    
  5. 新しいクラスタでルート Secret を作成します。

    kubectl -n cert-manager apply -f apigee-root-certificate.yaml
    
  6. 新しいルート証明書の作成を無効にします。これにより、新しい apigee-root-certificate が作成されなくなるため、前のステップで作成したものが上書きされることもなくなります。

  7. overlays/initialization/certificates/kustomization.yaml ファイル内の次の行をコメント化解除します。

    # components:
    # - ./components/disable-apigee-root-certificate-generation
    
  8. 基本的な Apigee ハイブリッド インストールまたはカスタマイズされた Apigee Hybrid インストールのいずれかを使用して、Apigee ハイブリッド インストールの残りの手順を進めます。たとえば、基本的な Apigee ハイブリッド インストールの手順に沿って、次のコマンドを実行します。

    ./tools/apigee-hybrid-setup.sh --cluster-name $CLUSTER_NAME --cluster-region $CLUSTER_LOCATION
    
  9. 次のコマンドを使用して、再ビルドのステータスを確認します。



    kubectl -n ${APIGEE_NAMESPACE} get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
    
  10. ログで再ビルドプロセスを確認します。さらに、nodetool ステータス コマンドを使用して、データのサイズを確認します。

    kubectl logs apigee-cassandra-default-0 -f -n ${APIGEE_NAMESPACE}
    kubectl exec apigee-cassandra-default-0 -n ${APIGEE_NAMESPACE}  -- nodetool -u ${JMX_USER} -pw ${JMX_PASSWORD} status
    
  11. 次のコマンドを使用して、再ビルドのステータスを確認します。



    kubectl -n apigee get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
    

    結果は次のようになります。

    {
    "rebuildDetails": {
    "apigee-cassandra-default-0": {
      "state": "complete",
      "updated": 1623105760
    },
    "apigee-cassandra-default-1": {
      "state": "complete",
      "updated": 1623105765
    },
    "apigee-cassandra-default-2": {
      "state": "complete",
      "updated": 1623105770
    }
    },
    "state": "complete",
    "updated": 1623105770
    }
    

    マルチリージョン デプロイもご覧ください。

  12. components/multi-region/patch.yaml から次の行を削除します。

      properties:
        multiRegionSeedHost: {IP_ADDRESS} # To be modified. REQUIRED
    
  13. 変更を適用します。

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

コンセプト

Image Hub

Docker コンテナ イメージは通常、次の形式で指定します。

${REGISTRY_HOST_PATH}/${IMAGE_NAME}:${IMAGE_TAG}

ダイジェストを使用するものは、次のようになります。

${REGISTRY_HOST_PATH}/${IMAGE_NAME}@${DIGEST}

Apigee では「Image Hub」というコンセプトを使用します。上記の形式では、これは ${REGISTRY_HOST_PATH} を指します。Image Hub のデフォルト値は gcr.io/apigee-release/hybrid/ です。

(ダイジェストを使用するイメージは、サブコンポーネントごとに個別に設定する必要があります)

Apigee では、次の値を組み合わせて最終的なイメージパスが作成されます。

  • 「Image Hub」apigee-hybrid-config.yaml でオーバーライドできます(Image Hub をオーバーライドする方法については、限定公開リポジトリの Docker イメージの使用に関するセクションをご覧ください)。
  • IMAGE_TAG の値は version フィールドから取得され、これは個々のコンポーネントの yaml ファイル(例: apigee-organization.yaml)内にあります。Apigee では、イメージに Apigee Hybrid バージョンでタグが付けられます。つまり、Apigee Hybrid バージョン 1.8 では、IMAGE_TAG が 1.8 になります。
  • IMAGE_NAME は、イメージが使用されるコンテナの名前から暗黙的に決まります。たとえば apigee-runtime コンテナの場合、IMAGE_NAME は apigee-runtime です。

したがって、イメージパスの完全な例は gcr.io/apigee-release/hybrid/apigee-runtime:1.8.0 のようになります

このようにして最終的なイメージパスが作成され、それぞれの Pod 内の各コンテナ内で使用されます。

Google Cloud サービス アカウント

Google Cloud サービス アカウントは、Google API への承認された呼び出しを行うためにアプリケーションによって使用されるアカウントです。Google Cloud サービス アカウント キーをダウンロードし、認証のために使用することができます。Apigee では、ユーザーが Secret を作成してサービス アカウント キーを指定することを想定しています。コンポーネントの名前と、サービス アカウント キーが含まれる Secret のデフォルト名を以下に示します。

コンポーネント サブコンポーネント サービス アカウント キーが含まれるデフォルトの Kubernetes Secret 名
organization
connectAgent apigee-connect-agent-gcp-sa-key-${ORG_NAME}
watcher apigee-watcher-gcp-sa-key-${ORG_NAME}
mart apigee-mart-gcp-sa-key-${ORG_NAME}
udca apigee-udca-gcp-sa-key-${ORG_NAME}
ingressGateways なし
environment
runtime apigee-runtime-gcp-sa-key-${ORG_NAME}-${ENV_NAME}
udca apigee-udca-gcp-sa-key-${ORG_NAME}-${ENV_NAME}
synchronizer apigee-synchronizer-gcp-sa-key-${ORG_NAME}-${ENV_NAME}
telemetry
metrics apigee-metrics-gcp-sa-key
containerLogs apigee-logger-gcp-sa-key

Kubernetes サービス アカウント

Kubernetes サービス アカウントは、クラスタ内の Pod に ID を提供します。デフォルトでは、ID は Apigee コントローラによって自動的に作成されます。ただし、作成をオーバーライドする場合(たとえば、Workload Identity を使用している場合)、これを行うには、さまざまなサブコンポーネントで podServiceAccountName フィールドを指定します。

kubernetes サービス アカウントを指定できるコンポーネントとそのサブコンポーネント、およびそのコンポーネントに対して Workload Identity パッチを有効にするときの k8s サービス アカウントのデフォルト名のリストを以下に示します。

コンポーネント サブコンポーネント デフォルト名(Workload Identity パッチを有効にしている場合に使用可能)
organization
connectAgent apigee-connect-agent-svc-account-${ORG_NAME}
watcher apigee-watcher-svc-account-${ORG_NAME}
mart apigee-mart-svc-account-${ORG_NAME}
udca apigee-udca-svc-account-${ORG_NAME}
environment
synchronizer apigee-synchronizer-svc-account-${ORG_NAME}-${ENV_NAME}
udca apigee-udca-svc-account-${ORG_NAME}-${ENV_NAME}
runtime apigee-runtime-svc-account-${ORG_NAME}-${ENV_NAME}
datastore
cassandra apigee-datastore-svc-account
telemetry
metricsApp apigee-metricsApp-svc-account
metricsProxy apigee-metricsProxy-svc-account
metricsAdapter apigee-metricsAdapter-svc-account
containerLogs apigee-container-logs-svc-account

Workload Identity

Workload Identity を使用すると、GKE で実行される Pod(Kubernetes サービス アカウントを使用)は Google Cloud APIs で直接認証できます。その際、Google Cloud サービス アカウント キーは必要ありません。

新しい環境の追加

.
├── ...
├── instances/instance1/components
│   ├── ...
│   ├── environments
│   │   ├── dev
│   │   │   └── apigee-environment.yaml
│   │   │   └── secrets.yaml
│   │   └── new-env-name (new)
│   │       └── apigee-environment.yaml (new)
│   │       └── secrets.yaml (new)
└── ...

新しい環境は次のように簡単に追加できます。

  1. 環境ディレクトリ内に新しいフォルダを作成します(フォルダ構成は自由です)。
  2. 既存の環境から apigee-environment.yaml ファイルを新しいフォルダにコピーします。
  3. 新しい環境用に新しいサービス アカウントと暗号鍵を作成する場合は、secrets.yaml を新しいフォルダにコピーし、他の既存の環境と区別できるように Secret の名前を変更します(通常は環境の名前にサフィックスを追加します)。
  4. 次のように、apigee-environment.yaml を適切に変更します。
    • 環境の名前を変更します。
    • 新しいサービス アカウントと暗号鍵を作成する場合は、それが yaml で正しく参照されるようにする必要があります。
  5. yamls を適用します。
kubectl apply -f components/environments/new-env-name/secrets.yaml
kubectl apply -f components/environments/new-env-name/apigee-environment.yaml

Apigee Datastore での強制削除の使用

なんらかの理由でデータストアの削除が進行していない場合、クラスタの現在の状態に関係なく、次のコマンドを使用して Apigee データストアを強制的に削除できます。





  1. apigee Namespace の apigeeds を削除します。

    Kubectl delete -n apigee apigeeds default
    

    このステップが停止する場合は、Ctrl+C を使用して解除できます。

  2. 新しい apigeeds を編集します。

    Kubectl edit -n apigee apigeeds default
    
  3. Apigee データストアの仕様に forceDelete フィールドを追加 / 更新します。

    spec:
    forceDelete: true
    
  4. ファイルを保存して終了します。

データストアが削除されるまで待ちます。cassandra リソースをすべて削除するのに数分かかることがあります。

スクリプトについて

apigee-hybrid-setup.sh スクリプトは基本的な検証をいくつか実行します。より詳細なカスタマイズが必要な場合は、カスタマイズされた Apigee ハイブリッド インストールで説明されているように、その手順の自動化に役立ちます。カスタマイズされたインストールでも、このスクリプトを一部使用して特定のタスクをサポートできます。

./tools/apigee-hybrid-setup.sh --help を実行すると、サポートされているフラグのリストが表示され、スクリプトに関する追加情報を確認できます。現時点では、次のフラグがサポートされています。

  • --namespace デフォルトでは、すべてのコンポーネントがこのスクリプトによって apigee Namespace にインストールされます。この動作を変更するには、このフラグを使用して Namespace の名前を指定します。
  • --org Apigee 組織の名前を指定するために使用されます。指定しない場合、gcloud で現在選択されている Google Cloud プロジェクトがデフォルトで使用されます。
  • --envgroup 組織内の環境グループの名前を指定するために使用されます。指定しない場合、環境グループの名前を確認するコントロール プレーン API へのクエリが試行されます。複数の環境グループが見つかった場合は、エラーが返され、スクリプトが終了します。
  • --env 組織内の環境の名前を指定するために使用されます。指定しない場合、環境の名前を確認するコントロール プレーン API へのクエリが試行されます。複数の環境が見つかった場合、または環境が環境グループに含まれない場合は、エラーが返され、スクリプトが終了します。
  • --cluster-name Kubernetes クラスタ名。
  • --cluster-region kubernetes クラスタが配置されているリージョン
  • --gcp-project-id kubernetes クラスタが存在する Google Cloud のプロジェクト ID
  • --ingress-domain Istio ingress-gateway の自己署名 TLS 証明書の生成に使用されるホスト名 / ドメイン名を指定します。指定されていない場合は、envgroup から値を取得するために、コントロール プレーン API にクエリを実行することにより値の特定が試行されます。envgroup の確認で問題が発生した場合、または envgroup に複数のホスト名が設定されていた場合は、エラーが返され、スクリプトが終了します。
  • --generate-internal-tls-certs これにより apigee-ca という名前の kubernetes Secret が生成されます。これには Google が生成した証明書と鍵のペアが含まれます。
  • --create-ingress-tls-certs これにより、istio-system Namespace 内に {ORG_NAME}-{ENV_GROUP_NAME} という名前の Secret(org と envgroup の名前から派生)が生成されます。これには TLS 通信に使用される証明書と鍵のペアが含まれます。これらの証明書の生成に使用されるドメイン名は、envgroup 設定の値から派生しています。競合が発生している場合(複数のドメインが検出された場合など)、該当するエラー メッセージが表示されます。
  • --create-gcp-sa-and-secrets Google Cloud プロジェクトに Google Cloud サービス アカウントを 1 つ作成し、キーをダウンロードしてから、そのキーを含む kubernetes Secret を作成します。Secret の名前は Google Cloud サービス アカウントで確認できます。
  • --fill-values org、env、envgroup などの名前を、さまざまな yaml で必要とされる場所で置き換えます。
  • --apply-configuration これにより、認証局、カスタム リソース定義、Webhook、ロール、コントローラ リソースが作成されます。リソースは正しい順序で作成され、すべてが正常に動作するまでコマンドがブロックされます。
  • -- rename-directories 環境と環境グループの名前を、適切な環境と環境グループの名前に変更します。
  • --verbose デバッグの詳細な出力を表示します。
  • --help 使用方法に関する情報を表示します。
  • --setup-all このスクリプトで実行できるすべてのタスクを実行します。

Apigee ハイブリッド設定のフォルダ構造

apigee-hybrid-setup フォルダのデフォルトの階層構造は次のとおりです。

.
├── bases
│   ├── controllers
│   │   ├── apigee-controller
│   │   │   ├── apigee-controller-deployment.yaml
│   │   │   └── kustomization.yaml
│   │   └── apigee-ingressgateway-manager
│   │       ├── apigee-ingressgateway-manager-deployment.yaml
│   │       └── kustomization.yaml
│   ├── datastore
│   │   └── backup-and-restore
│   │       ├── backup
│   │       │   ├── cronjob.yaml
│   │       │   └── kustomization.yaml
│   │       ├── common
│   │       │   ├── kustomization.yaml
│   │       │   ├── rbac.yaml
│   │       │   └── tls-certificate.yaml
│   │       └── restore
│   │           ├── job.yaml
│   │           └── kustomization.yaml
│   └── initialization
│       ├── certificates
│       │   ├── certificates-and-issuers.yaml
│       │   └── kustomization.yaml
│       ├── crds
│       │   ├── customresourcedefinition-apigeedatastores.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-apigeedeployments.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-apigeeenvironments.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-apigeeorganizations.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-apigeeredis.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-apigeerouteconfigs.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-apigeeroutes.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-apigeetelemetries.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-cassandradatareplications.apigee.cloud.google.com.yaml
│       │   └── kustomization.yaml
│       ├── openshift
│       │   ├── kustomization.yaml
│       │   └── scc.yaml
│       ├── rbac
│       │   ├── apigee-controller
│       │   │   ├── kustomization.yaml
│       │   │   └── rbac.yaml
│       │   └── apigee-embedded-ingress-controller
│       │       ├── cluster-role-bindings.yaml
│       │       ├── cluster-roles.yaml
│       │       ├── kustomization.yaml
│       │       └── service-account.yaml
│       └── webhooks
│           ├── kustomization.yaml
│           ├── mutatingwebhookconfiguration.yaml
│           └── validatingwebhookconfiguration.yaml
├── CONTRIBUTING.md
├── docs
│   └── api_references
│       ├── v1alpha1.md
│       └── v1alpha2.md
├── kokoro
│   ├── build.sh
│   ├── common.cfg
│   ├── continuous.cfg
│   ├── presubmit.cfg
│   └── release.cfg
├── LICENSE
├── overlays
│   ├── controllers
│   │   ├── apigee-controller
│   │   │   ├── apigee-hybrid-config.yaml
│   │   │   ├── components
│   │   │   │   ├── imagepullsecret
│   │   │   │   │   ├── kustomization.yaml
│   │   │   │   │   └── patch.yaml
│   │   │   │   └── nodeselector
│   │   │   │       ├── kustomization.yaml
│   │   │   │       └── patch.yaml
│   │   │   └── kustomization.yaml
│   │   ├── apigee-ingressgateway-manager
│   │   │   ├── apigee-ingressgateway-manager-deployment-patch.yaml
│   │   │   ├── apigee-istio-mesh-config.yaml
│   │   │   ├── components
│   │   │   │   ├── imagepullsecret
│   │   │   │   │   ├── kustomization.yaml
│   │   │   │   │   └── patch.yaml
│   │   │   │   └── nodeselector
│   │   │   │       ├── kustomization.yaml
│   │   │   │       └── patch.yaml
│   │   │   └── kustomization.yaml
│   │   └── kustomization.yaml
│   ├── initialization
│   │   ├── certificates
│   │   │   ├── apigee-ingressgateway-manager-certificate-patch.yaml
│   │   │   ├── apigee-serving-cert-patch.yaml
│   │   │   ├── components
│   │   │   │   └── disable-apigee-root-certificate-generation
│   │   │   │       └── kustomization.yaml
│   │   │   └── kustomization.yaml
│   │   ├── crds
│   │   │   └── kustomization.yaml
│   │   ├── ingress
│   │   │   ├── envoyfilter-1.11.yaml
│   │   │   └── kustomization.yaml
│   │   ├── namespace.yaml
│   │   ├── openshift
│   │   │   ├── kustomization.yaml
│   │   │   └── scc.yaml
│   │   ├── rbac
│   │   │   ├── apigee-controller
│   │   │   │   └── kustomization.yaml
│   │   │   ├── apigee-ingressgateway-manager
│   │   │   │   └── kustomization.yaml
│   │   │   └── kustomization.yaml
│   │   └── webhooks
│   │       ├── kustomization.yaml
│   │       ├── mutatingwebhookconfiguration.yaml
│   │       └── validatingwebhookconfiguration.yaml
│   └── instances
│       └── instance1
│           ├── datastore
│           │   ├── apigee-datastore.yaml
│           │   ├── components
│           │   │   ├── gcs-backup
│           │   │   │   ├── apigee-datastore-patch.yaml
│           │   │   │   ├── cron-patch.yaml
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── tls-certificate-patch.yaml
│           │   │   ├── gcs-restore
│           │   │   │   ├── apigee-datastore-patch.yaml
│           │   │   │   ├── job-patch.yaml
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── tls-certificate-patch.yaml
│           │   │   ├── http-proxy
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   ├── imagepullsecret
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   ├── multi-region
│           │   │   │   ├── cassandra-data-replication.yaml
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   ├── nodeselector
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   ├── non-gcs-backup
│           │   │   │   ├── apigee-datastore-patch.yaml
│           │   │   │   ├── cron-patch.yaml
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── tls-certificate-patch.yaml
│           │   │   ├── non-gcs-restore
│           │   │   │   ├── apigee-datastore-patch.yaml
│           │   │   │   ├── job-patch.yaml
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── tls-certificate-patch.yaml
│           │   │   ├── openshift-scc
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── scc.yaml
│           │   │   └── workload-identity
│           │   │       ├── kustomization.yaml
│           │   │       ├── patch.yaml
│           │   │       └── service-accounts.yaml
│           │   ├── kustomization.yaml
│           │   └── secrets.yaml
│           ├── environments
│           │   ├── kustomization.yaml
│           │   └── test
│           │       ├── apigee-environment.yaml
│           │       ├── components
│           │       │   ├── http-proxy
│           │       │   │   ├── kustomization.yaml
│           │       │   │   └── patch.yaml
│           │       │   ├── imagepullsecret
│           │       │   │   ├── kustomization.yaml
│           │       │   │   └── patch.yaml
│           │       │   ├── nodeselector
│           │       │   │   ├── kustomization.yaml
│           │       │   │   └── patch.yaml
│           │       │   └── workload-identity
│           │       │       ├── kustomization.yaml
│           │       │       ├── patch.yaml
│           │       │       └── service-accounts.yaml
│           │       ├── kustomization.yaml
│           │       └── secrets.yaml
│           ├── kustomization.yaml
│           ├── organization
│           │   ├── apigee-organization.yaml
│           │   ├── components
│           │   │   ├── http-proxy
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   ├── imagepullsecret
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   ├── nodeselector
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   └── workload-identity
│           │   │       ├── kustomization.yaml
│           │   │       ├── patch.yaml
│           │   │       └── service-accounts.yaml
│           │   ├── kustomization.yaml
│           │   └── secrets.yaml
│           ├── redis
│           │   ├── apigee-redis.yaml
│           │   ├── components
│           │   │   ├── imagepullsecret
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   ├── nodeselector
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   └── workload-identity
│           │   │       ├── kustomization.yaml
│           │   │       ├── patch.yaml
│           │   │       └── service-accounts.yaml
│           │   ├── kustomization.yaml
│           │   └── secrets.yaml
│           ├── route-config
│           │   ├── kustomization.yaml
│           │   └── test-envgroup
│           │       ├── apigee-route-config.yaml
│           │       ├── components
│           │       │   ├── http-and-non-sni-client
│           │       │   │   ├── apigee-route.yaml
│           │       │   │   └── kustomization.yaml
│           │       │   ├── http-client
│           │       │   │   ├── apigee-route.yaml
│           │       │   │   └── kustomization.yaml
│           │       │   └── non-sni-client
│           │       │       ├── apigee-route.yaml
│           │       │       └── kustomization.yaml
│           │       └── kustomization.yaml
│           └── telemetry
│               ├── apigee-telemetry.yaml
│               ├── components
│               │   ├── http-proxy
│               │   │   ├── kustomization.yaml
│               │   │   └── patch.yaml
│               │   ├── imagepullsecret
│               │   │   ├── kustomization.yaml
│               │   │   └── patch.yaml
│               │   ├── logger
│               │   │   ├── kustomization.yaml
│               │   │   └── patch.yaml
│               │   ├── metrics
│               │   │   ├── kustomization.yaml
│               │   │   └── patch.yaml
│               │   ├── nodeselector
│               │   │   ├── kustomization.yaml
│               │   │   └── patch.yaml
│               │   ├── openshift-scc
│               │   │   ├── kustomization.yaml
│               │   │   └── scc.yaml
│               │   ├── workload-identity-logger
│               │   │   ├── kustomization.yaml
│               │   │   ├── patch.yaml
│               │   │   └── service-accounts.yaml
│               │   └── workload-identity-metrics
│               │       ├── kustomization.yaml
│               │       ├── patch.yaml
│               │       └── service-accounts.yaml
│               └── kustomization.yaml
├── README.md
├── templates
│   ├── certificate-org-envgroup.yaml
│   ├── secret-apigee-cassandra-backup-and-restore-gcp-sa-key.yaml
│   ├── secret-apigee-cassandra-backup-and-restore-key-file.yaml
│   ├── secret-gcp-sa-key.yaml
│   └── secret-ingress-tls-cert-key.yaml
└── tools
    ├── apigee-hybrid-setup.sh
    ├── apigee-pull-push.sh
    ├── common.sh
    ├── create-service-account.sh
    └── dump_kubernetes.sh

上記のファイルのバージョンは、github リポジトリの preview-1 タグ(https://github.com/apigee/apigee-hybrid-install/releases/tag/preview-1)にあります。

上記のフォルダには、Apigee ハイブリッド ランタイムの Kubernetes マニフェストが含まれており、構成管理に Kustomize が使用されています。マニフェストは、Kustomize のベースとオーバーレイのコンセプトに基づいて編成されています。ベースフォルダには、すべての Apigee コンポーネントに必要な最小限の構成が含まれています。オーバーレイ フォルダには、コンポーネントとして定義されている複数の特徴(構成)が含まれています。コンポーネントを指定するには、kustomization.yaml でコンポーネントのリファレンスをコメント化解除します。

例: Apigee データストアの gcs-backup を有効にするために、以下の customization.yaml では gcs-backup コンポーネントがコメント化解除されています。

パス: ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastore/kustomization.yaml

namespace: "apigee" # kpt-set: ${APIGEE_NAMESPACE}

resources:
- apigee-datastore.yaml

components:
# - ./components/http-proxy
# - ./components/nodeselector/
# - ./components/imagepullsecret
# - ./components/workload-identity
# - ./components/openshift-scc
- ./components/gcs-backup (uncommented)
# - ./components/gcs-restore
# - ./components/non-gcs-backup
# - ./components/non-gcs-restore

カスタマイズが必要な値は、gcs-backup の対応する patch.yaml で設定する必要があります。以下のファイルでは、CLOUD_STORAGE_BUCKET_PATH の値をユーザーが設定する必要があります。

パス: $INSTALL_DIR/overlays/instances/$INSTANCE_DIR/datastore/components/gcs-backup/cron-patch.yaml

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: apigee-cassandra-backup
  namespace: apigee
spec:
  schedule: "${YOUR_BACKUP_SCHEDULE_CODE}" # To be modified
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: apigee-cassandra-backup
            env:
            - name: APIGEE_CLOUDPROVIDER
              value: "GCP"
            - name: DATABASE_STORAGE_BUCKET
              value: "${CLOUD_STORAGE_BUCKET_PATH}" # To be modified. REQUIRED
            volumeMounts:
            - name: apigee-cassandra-backup
              mountPath: /var/secrets/google
          volumes:
          - name: apigee-cassandra-backup
            secret:
              secretName: "apigee-cassandra-backup-and-restore-svc-account"

同様に、カスタマイズが必要な機能 / 設定を有効にするには、Apigee コンポーネントの kustomization.yaml でコンポーネントをコメント化解除します。また、必要に応じてコンポーネントの patch.yaml のフィールドについても、対応する値を適切に設定する必要があります。

フォルダとファイルの簡単な説明:

ベース

このフォルダには、各 Apigee コンポーネントの必要最小限の構成を含むテンプレートが含まれています。このフォルダ内のマニフェストを変更する必要はありません。

オーバーレイ

このフォルダには、追加構成用の kustomize コンポーネント テンプレートが含まれています

初期化

namespaces.yaml

Apigee データプレーン コンポーネントがインストールされる Namespace。デフォルトの Namespace は apigee です

certificates

Webhook に証明書を発行するために使用される Issuer リソースと Certificate リソースが含まれています。また、さまざまな TLS 通信用 Pod に証明書を発行するときに使用される Issuer も含まれています。

rbac

さまざまなコンポーネントによって使用される RoleClusterRoleRoleBindingClusterRoleBinding が含まれています。

crds
    Contains the definition of all the CRDs which are used by Apigee.
webhooks

カスタム リソースでの検証の実施に使用される ValidatingWebhookConfigurationMutatingWebhookConfiguration が含まれています。

ingress

すべての Ingress Pod に適用される設定が含まれています。例: 一般的なヘッダーの変更、ヘルスチェックなど

openshift

openshift SecurityContextConstraints の定義が含まれています。

コントローラ

apigee-controller
apigee-hybrid-config.yaml

apigee-controller-manager.yaml に入力として指定される ConfigMap が含まれています。この ConfigMap には、imageHubimagePullSecretsforwardProxy などの設定が含まれています。

apigee-controller-deployment.yaml

コントローラと Webhook 用の 2 つの Service と、コントローラ用の Deployment が含まれています。コントローラに限定公開イメージを使用する場合は、ここに変更を加える必要があります。

istiod

Apigee-istio-mesh-config.yaml Apigee で使用される Istio のメッシュ構成が含まれています。そのクラスタでの ASM / Istio の他のインストールには適用されません。

apigee-ingressgateway-manager-deployment-patch.yaml

Istiod のサービスとデプロイが含まれています。Apigee のユースケースでのみ使用される限定公開の istiod です。

instances/{instanceName}

datastore
apigee-datastore.yaml

cassandra を管理する ApigeeDatastore カスタム リソースが含まれています。

secrets.yaml

データストアのデフォルトの認証情報が含まれています。

redis
apigee-redis.yaml

redis を管理する ApigeeRedis カスタム リソースが含まれています。

secrets.yaml

データストアのデフォルトの認証情報が含まれています。

organization
apigee-organization.yaml

他のサブコンポーネント(connectAgent、watcherAndSynchronizer、MART、UDCA、Ingress など)を管理する ApigeeOrganization カスタム リソースが含まれています。

secrets.yaml

apigee-organization.yaml で参照される Secrets が含まれています。一部の Secret は、スクリプトによって生成されるときにコメントアウトされます。生成を無効にする場合は、手動で作成する必要があります。

environments

組織内のすべての環境が含まれています。すでに提供されているフォルダをコピーし、要件に従って構成することで、環境ごとに個別のフォルダを作成する必要があります。

dev
apigee-environment.yaml

ランタイムなどの他のサブコンポーネントを管理する ApigeeEnvironment カスタム リソースが含まれています。

secrets.yaml

apigee-environment.yaml で参照される Secrets が含まれています。一部の Secret は、スクリプトによって生成されるときにコメントアウトされます。生成を無効にする場合は、手動で作成する必要があります。

telemetry
apigee-telemetry.yaml

ApigeeTelemetry カスタム リソースが含まれています。

secrets.yaml

apigee-telemetry.yaml で参照される Secrets が含まれています。一部の Secret は、スクリプトによって生成されるときにコメントアウトされます。生成を無効にする場合は、手動で作成する必要があります。

route-config
dev-envgroup
apigee-route-config.yaml

ApigeeRouteConfig カスタム リソースが含まれています。

secrets.yaml

apigee-route-config.yaml で参照される Secret が含まれています。これは、apigee-hybrid-setup.sh スクリプトによって自動的に生成され、Secret を手動で作成した場合のサンプルを提供するためにコメントアウトした形で保持されます。

診断的

diagnostic-collector.yaml

診断用デプロイを開始するために使用するリソース

tools

apigee-hybrid-setup.sh
apigee-create-service-account.sh
dump-kubernetes.sh
apigee-pull-push.sh

外部 Vault へのサービス アカウント キーの保存

Vault(Hashicorp)は一般的な Secret 管理システムです。このシステムには、Google、Azure、AWS などによって提供される Secret ストアとの統合がいくつかあります。Hashicorp Vault を使用すると、外部ソースから Secret を取得して Kubernetes リソース内で使用できます。Vault を使用して Secret を入手する方法はいくつかあります。以下の手順は、Vault が提供する Secret エンジンに保存されている Google Cloud サービス アカウント キーを、Vault CSI プロバイダを使用してマウントする方法の基本的な例です。



  1. Helm を使用して、Vault の関連リソースをクラスタにインストールします。システムに Helm を設定する方法については、Helm をインストールする手順に沿って操作します。
  2. 具体的には、Vault Helm チャートをインストールする手順に沿って操作します。

    1. Hashicorp リポジトリを helm に追加します

      helm repo add hashicorp https://helm.releases.hashicorp.com
      
    2. helm リポジトリを更新します

      helm repo update
      
    3. Vault をインストールします

      helm install vault hashicorp/vault \
      --set "server.dev.enabled=true" \
      --set "injector.enabled=false" \
      --set "csi.enabled=true"
      
  3. ここで Secret を Vault に保存します。

    1. Vault 開発 Pod 内でシェルを取得します

      kubectl exec -it vault-0 -- /bin/sh
       ```
      
    2. この例では、データを保存するために Key-Value Secret エンジンを使用します。

      vault kv put secret/runtime-gcp-sa-key key="${BASE_64_ENCODED_KEY}"
      
    3. 鍵が正常に保存されたことを確認するには、次のコマンドを使用します。

      vault kv get secret/runtime-gcp-sa-key
      
  4. ランタイム Pod が鍵を pull できるように認証を設定します。Kubernetes サービス アカウントで説明したように、Kubernetes サービス アカウントは Pod に ID を提供します。これにより、Pod は他のシステムで認証できるようになります。

    1. Vault 開発 Pod 内でシェルを取得します

      kubectl exec -it vault-0 -- /bin/sh
      
    2. Kubernetes 認証方法を有効にします

      vault auth enable kubernetes
      
    3. 認証構成を記述します

      vault write auth/kubernetes/config \
      issuer="https://kubernetes.default.svc.cluster.local" \
      token_reviewer_jwt="$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" \
      kubernetes_host="https://$KUBERNETES_PORT_443_TCP_ADDR:443" \
      kubernetes_ca_cert=@/var/run/secrets/kubernetes.io/serviceaccount/ca.crt \
      disable_iss_validation=true
      
    4. 認証ポリシーを作成します

      vault policy write apigee-runtime-app - <<EOF
      path "secret/data/runtime-gcp-sa-key" {
      capabilities = ["read"]
      }
      EOF
      
    5. ポリシーをサービス アカウントにバインドします

      vault write auth/kubernetes/role/apigee-runtime-role \
      bound_service_account_names=apigee-runtime-sa \
      bound_service_account_namespaces=${APIGEE_NAMESPACE} \
      policies=apigee-runtime-app \
      ttl=20m
      

    ここでは、サービス アカウントが Apigee Namespace 内にあるものと仮定します。Apigee をインストールするための Namespace が他にある場合は、その名前を使用します。

    1. vault-0 内でシェルを終了します

      exit
      
  5. Secret ストア CSI ドライバをインストールします

    # Add repo to helm
    helm repo add secrets-store-csi-driver https://raw.githubusercontent.com/kubernetes-sigs/secrets-store-csi-driver/master/charts
    # Install driver in cluster
    helm install csi secrets-store-csi-driver/secrets-store-csi-driver
    
  6. Vault 内に作成した Secret を参照する SecretProviderClass Kubernetes リソースを作成します

    cat > spc-vault.yaml <<EOF
    apiVersion: secrets-store.csi.x-k8s.io/v1alpha1
    kind: SecretProviderClass
    metadata:
    name: vault-apigee-runtime-gcp-sa-key
    spec:
    provider: vault
    parameters:
      vaultAddress: "http://vault.default:8200"
      roleName: "apigee-runtime-role"
      objects: |
        - objectName: "client_secret.json"
          secretPath: "secret/data/runtime-gcp-sa-key"
          secretKey: "key"
    EOF
    
  7. yaml を適用します

    kubectl apply -f spc-vault.yaml
    
  8. ステップ(4.e)で権限を割り当てた Kubernetes サービス アカウントを作成します。

    kubectl create serviceaccount -n ${APIGEE_NAMESPACE} apigee-runtime-sa
    
  9. 環境に合わせて apigee-environment.yaml ファイルを変更し、次の行を追加します。

    apiVersion: apigee.cloud.google.com/v1alpha2
    kind: ApigeeEnvironment
    # existing content
    spec:
    name: {ENV_NAME}
    organizationRef: {ORG_NAME}
    components:
     runtime:
    # existing content
       pod
       containers:
       - name: apigee-runtime
         podServiceAccountName: apigee-runtime-sa
    # existing content
         volumeMounts:
         - name: secrets-store-inline
           mountPath: "/opt/apigee/sa"
           readOnly: true
       volumes:
       - name: secrets-store-inline
         csi:
           driver: secrets-store.csi.k8s.io
           readOnly: true
           volumeAttributes:
             secretProviderClass: "vault-apigee-runtime-gcp-sa-key"
    
  10. 変更を適用します。

    kubectl apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/environments/$ENV_NAME
    

Apigee ハイブリッド アップグレード



前提条件に記載されているすべての要件を満たす必要があります。また、すべてのコンポーネントを順に再起動して、クラスタが正常であることを確認することをおすすめします。再起動は、Cassandra、Redis、ApigeeOrganization、ApigeeEnvironment の順序で行います。

バックアップを作成する

  1. 現在のハイブリッド設定のバックアップ コピーを作成します。アップグレードを現在のバージョンにロールバックする必要がある場合は、バックアップが必要になります。

    tar -czvf apigee-hybrid-install.v-X.Y.Z.tar.gz $HYBRID_INSTALL_BASE_DIR
    
  2. Cassandra データベースのバックアップを作成します。Cassandra バックアップは、障害シナリオに対する重要な保護手段です。

必要に応じて Kubernetes プラットフォームをアップグレードする

この手順は毎回必要ではありませんが、新しいバージョンの Apigee ハイブリッドでサポートされなくなった場合は、kubernetes、openshift などの Kubernetes プラットフォームと、cert-manager、cassandra などのバージョンのコンポーネントをアップグレードする必要があります。ドキュメントには、プラットフォームとコンポーネントのサポート対象のバージョンが記載されています。

設定ファイルをダウンロードする

リポジトリをダウンロードして、既存の Apigee ハイブリッド設定の bases フォルダと tools フォルダを新しいものに置き換えます。

  1. https://github.com/apigee/apigee-hybrid-install/releases/tag/preview-1 で、GitHub リポジトリ preview-1 タグのクローンを作成します

    クローンが作成されたリポジトリは、Apigee ハイブリッドの設定フォルダ構造で説明されているような構造になります。

  2. 既存の Apigee ハイブリッド設定の初期化、ツール、コントローラのフォルダを置き換えます。

    export HYBRID_INSTALL_HOME=PATH_TO_PREVIOUS_HYBRID_INSTALL_DIRECTORY
    mv -f bases $HYBRID_INSTALL_HOME/bases
    mv -f tools $HYBRID_INSTALL_HOME/tools
    

必要に応じてサービス アカウントの権限を更新する

この手順も毎回行う必要はありませんが、必要に応じて新しいサービス アカウントを作成するか、既存のサービス アカウントの権限を更新する必要があります。アップグレード ガイドでは、変更または作成する必要があるサービス アカウント、およびと追加する必要のあるロールについて詳しく説明します。

  • 既存のサービス アカウントの権限を変更する必要がある場合は、適切な gcloud コマンドを使用します。アップグレード ガイドでは、詳細なコマンドと追加する必要があるロールについて詳しく説明します。

    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:apigee-component@$PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/$NEW_ROLE"
    
  • 新しい apigee ハイブリッド バージョンが新規 / 既存のコンポーネント用に追加サービス アカウントを必要とする可能性がある場合は、それを作成する必要があります。新しいサービス アカウントを作成するには、ツールフォルダにある apigee-create-service-account.sh スクリプトを使用できます。このスクリプトはステップ 4 で更新されるため、これには、作成する必要がある新しいサービス アカウントに必要な詳細情報と新しいプロファイルが含まれることになります。

    新しく作成されたサービス アカウント名は、対応するコンポーネント CR で参照する必要があります。

    ./tools/create-service-account --env prod --profile apigee-component
    

コントローラをアップグレードする

${INSTALL_DIR}/overlays/instances/$INSTANCE_DIR/kustomization.yaml にリストされているコンポーネントのバージョン フィールドを、関連するハイブリッドのバージョンに変更します。

以下は、サンプル $INSTALL_DIR/overlays/instances/$INSTANCE_DIR/kustomization.yaml ファイルです。version フィールドの値は、関連するバージョンに更新する必要があります

resources:
- datastore/
- environments/
- organization/
- redis/
- route-config/
- telemetry/

patches:
- target:
    group: apigee.cloud.google.com
    version: v1alpha1
    kind: ApigeeDatastore
  patch: |-
    - op: add
      path: /spec/version
      value: 1-6-1 (Modify the version)
- target:
    group: apigee.cloud.google.com
    version: v1alpha2
    kind: ApigeeEnvironment
  patch: |-
    - op: add
      path: /spec/version
      value: 1-6-1 (Modify the version)

Apigee ハイブリッド インストール ワークフローの初期化リソースとコントローラを作成すると同じ一連の手順に沿って操作します。スクリプトを使用するか手動の手順に沿って、初期化リソースとコントローラをアップグレードできます。

Apigee Kubernetes コンポーネントを更新する

次の変更を行う必要があります。 - アーキテクチャの変更、新しいフィールドの導入、古いフィールドの非推奨が発生した場合は、アップグレード ガイドに記載された手順に沿って CR を適切に変更する必要があります。- 少なくとも、CR 内のバージョン フィールド(インストールされている Apigee ハイブリッドのバージョンを示します)を新しい Apigee ハイブリッド バージョンに更新する必要があります。

Apigee CR の変更を適用します。非本番環境では、すべての変更を Apigee コンポーネントに同時に適用することができます

kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}

Apigee ハイブリッドのロールバック

  1. apigee-hybrid-setup を復元します

    以前のバージョンの Apigee ハイブリッド設定を含むディレクトリに移動します。使用できない場合は、Apigee ハイブリッドのアップグレード時にステップ 1[link] で作成した zip ファイルから復元します。

  2. Kubernetes コンポーネントをロールバックします

    Apigee CR の変更を適用します

    kubectl apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}
    
  3. コントローラをロールバックします

    Apigee ハイブリッド インストール ワークフローの初期化リソースとコントローラを作成すると同じ一連の手順に沿って操作します。スクリプトを使用するか手動の手順に沿って、初期化リソースとコントローラをロールバックできます。

  4. クリーンアップします

    アップグレード中に作成された新しい追加リソース(新しいバージョンのハイブリッドで導入された新しいコンポーネントやサービス アカウントなど)は、クリーンアップする必要があります。クリーンアップが必要なすべてのリソースとクリーンアップ手順は、アップグレード ガイドに記載されています。

環境の削除



kubernetes クラスタから環境に関連するすべてのリソースを削除する手順は次のとおりです。

  1. 環境 CR の名前を取得します。これを行うには、すべての環境を取得します。

    kubectl get env -n ${APIGEE_NAMESPACE}
    

    リソース名を APIGEE_ENV 環境変数に格納します。

  2. 環境の暗号鍵を削除します。たとえば、暗号鍵の名前を変更していない場合は、次のコマンドで削除できます。

    kubectl delete secret -n ${APIGEE_NAMESPACE} $APIGEE_ENV-encryption-keys
    
  3. Google Cloud サービス アカウントの Secret を削除します。

    kubectl delete secret -n ${APIGEE_NAMESPACE} $(kubectl get env $APIGEE_ENV -n ${APIGEE_NAMESPACE} -o=jsonpath='{.spec.components.*.appServiceAccountSecretName}')
    
  4. kubernetes サービス アカウントを削除します。

    kubectl delete secret -n ${APIGEE_NAMESPACE} $(kubectl get env $APIGEE_ENV -n ${APIGEE_NAMESPACE} -o=jsonpath='{.spec.components.*.podServiceAccountName}')
    
  5. Apigee 環境のカスタム リソースを削除します。

    kubectl -n ${APIGEE_NAMESPACE} delete env $APIGEE_ENV
    

ハイブリッド設定の削除



kubernetes クラスタから Apigee ハイブリッドに関連するすべてのリソースを削除する手順は次のとおりです。

  1. Apigee ユーザー設定とスキーマ設定のジョブを削除します。

    # To list all jobs in ${APIGEE_NAMESPACE}
    kubectl -n ${APIGEE_NAMESPACE} get jobs
    # To delete all jobs in ${APIGEE_NAMESPACE}
    kubectl -n ${APIGEE_NAMESPACE} delete jobs $(kubectl -n ${APIGEE_NAMESPACE} get jobs -o custom-columns=':.metadata.name')
    
  2. デプロイされた Apigee ハイブリッド データプレーン コンポーネントを削除します。次のコマンドを使用して、すべてのコンポーネントを削除します。

    kubectl delete -k ${INSTALL_DIR}/overlays/instances/$INSTANCE_NAME
    
  3. この手順は、kubernetes サービス アカウントの Secret、Google Cloud サービス アカウントの Secret などのデフォルトの名前に依存しない場合にのみ必要です。デフォルトの名前に依存している場合は、次の手順で削除できます。そうしない場合は、次のコマンドを使用して手動で削除する必要があります。

    kubectl delete secret -n ${APIGEE_NAMESPACE} $(kubectl get ${APIGEE_COMPONENT} ${APIGEE_COMPONENT_NAME} -n ${APIGEE_NAMESPACE} -o=jsonpath='{.spec.components.*.appServiceAccountSecretName}')
    kubectl delete secret -n ${APIGEE_NAMESPACE} $(kubectl get ${APIGEE_COMPONENT} ${APIGEE_COMPONENT_NAME} -n ${APIGEE_NAMESPACE} -o=jsonpath='{.spec.components.*.podServiceAccountName}')
    
  4. OpenShift の場合は、Apigee ハイブリッドのインストール時に作成された scc(セキュリティ コンテキストの制約)を削除する必要があります。

    kubectl delete scc ${SECURITY_CONTEXT_CONSTRAINTS_NAME}
    
  5. 次のコマンドを実行して、ロール、ロールバインディング、CRD、コントローラのデプロイなどを削除します。

    kubectl delete -k ${INSTALL_DIR}/overlays/initialization/ingress
    kubectl delete -k ${INSTALL_DIR}/overlays/initialization/rbac
    kubectl delete -k ${INSTALL_DIR}/overlays/initialization/webhooks
    kubectl delete -k ${INSTALL_DIR}/overlays/initialization/crds
    kubectl delete -k ${INSTALL_DIR}/overlays/initialization/certificates
    
  6. 次のコマンドを実行して Apigee Namespace を削除します。

    kubectl delete -f ${INSTALL_DIR}/overlays/initialization/namespace.yaml
    

    または、次のコマンドを使用します。

    kubectl delete $APIGEE_NAMESPACE
    

マルチインスタンスのインストール

マルチインスタンス設定とは、複数のリージョンにまたがることも、同じリージョン内でまたがることも可能なハイブリッド設定のことです。Apigee では、環境の構成(レプリカなど)はインスタンス間で必ず異なるため、2 番目のインスタンスの構成は別のディレクトリ構造で編成することをおすすめします。インスタンスの構成はすべて切り離され、それぞれのフォルダ構造で独立して編成されます。

たとえば、マルチリージョン シナリオでアクティブ / パッシブ設定を行う場合は、2 つ目のリージョンを、さまざまなサイズ設定と構成を使用してウォーム スタンバイで設定することができます。

以下のフォルダ構造で、instance2 という instance1 ディレクトリのコピーを作成し、必要に応じてデータストアと Ingress 構成を変更できます。

マルチインスタンスを設定するための apigee-hybrid-setup フォルダ構造。

.
├── bases
│   ├── controllers
│   │   ├── apigee-controller
│   │   │   ├── apigee-controller-deployment.yaml
│   │   │   └── kustomization.yaml
│   │   └── istiod
│   │       ├── apigee-ingressgateway-manager-deployment.yaml
│   │       └── kustomization.yaml
│   └── initialization
│       ├── certificates
│       │   ├── certificates-and-issuers.yaml
│       │   └── kustomization.yaml
│       ├── crds
│       │   ├── customresourcedefinition-apigeedatastores.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-apigeedeployments.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-apigeeenvironments.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-apigeeorganizations.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-apigeeredis.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-apigeerouteconfigs.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-apigeeroutes.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-apigeetelemetries.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-cassandradatareplications.apigee.cloud.google.com.yaml
│       │   └── kustomization.yaml
│       ├── ingress
│       │   ├── envoyfilter-1.11.yaml
│       │   └── kustomization.yaml
│       ├── openshift
│       │   ├── kustomization.yaml
│       │   └── scc.yaml
│       ├── rbac
│       │   ├── apigee-controller
│       │   │   ├── kustomization.yaml
│       │   │   └── rbac.yaml
│       │   └── apigee-embedded-ingress-controller
│       │       ├── cluster-role-bindings.yaml
│       │       ├── cluster-roles.yaml
│       │       ├── kustomization.yaml
│       │       └── service-account.yaml
│       └── webhooks
│           ├── kustomization.yaml
│           ├── mutatingwebhookconfiguration.yaml
│           └── validatingwebhookconfiguration.yaml
├── instances
│   └── instance1 (Add the 2nd instance under instances directory similar to instance1)
│       ├── datastore
│       │   ├── apigee-datastore.yaml
│       │   ├── components
│       │   │   ├── http-proxy
│       │   │   │   ├── kustomization.yaml
│       │   │   │   └── patch.yaml
│       │   │   ├── imagepullsecret
│       │   │   │   ├── kustomization.yaml
│       │   │   │   └── patch.yaml
│       │   │   ├── nodeselector
│       │   │   │   ├── kustomization.yaml
│       │   │   │   └── patch.yaml
│       │   │   └── workload-identity
│       │   │       ├── apigee-workload-identities.yaml
│       │   │       ├── kustomization.yaml
│       │   │       └── patch.yaml
│       │   ├── kustomization.yaml
│       │   └── secrets.yaml
│       ├── environments
│       │   ├── kustomization.yaml
│       │   └── test
│       │       ├── apigee-environment.yaml
│       │       ├── components
│       │       │   ├── http-proxy
│       │       │   │   ├── kustomization.yaml
│       │       │   │   └── patch.yaml
│       │       │   ├── imagepullsecret
│       │       │   │   ├── kustomization.yaml
│       │       │   │   └── patch.yaml
│       │       │   ├── nodeselector
│       │       │   │   ├── kustomization.yaml
│       │       │   │   └── patch.yaml
│       │       │   └── workload-identity
│       │       │       ├── apigee-workload-identities.yaml
│       │       │       ├── kustomization.yaml
│       │       │       └── patch.yaml
│       │       ├── kustomization.yaml
│       │       └── secrets.yaml
│       ├── kustomization.yaml
│       ├── organization
│       │   ├── apigee-organization.yaml
│       │   ├── components
│       │   │   ├── http-proxy
│       │   │   │   ├── kustomization.yaml
│       │   │   │   └── patch.yaml
│       │   │   ├── imagepullsecret
│       │   │   │   ├── kustomization.yaml
│       │   │   │   └── patch.yaml
│       │   │   ├── nodeselector
│       │   │   │   ├── kustomization.yaml
│       │   │   │   └── patch.yaml
│       │   │   └── workload-identity
│       │   │       ├── apigee-workload-identities.yaml
│       │   │       ├── kustomization.yaml
│       │   │       └── patch.yaml
│       │   ├── kustomization.yaml
│       │   └── secrets.yaml
│       ├── redis
│       │   ├── apigee-redis.yaml
│       │   ├── components
│       │   │   ├── imagepullsecret
│       │   │   │   ├── kustomization.yaml
│       │   │   │   └── patch.yaml
│       │   │   ├── nodeselector
│       │   │   │   ├── kustomization.yaml
│       │   │   │   └── patch.yaml
│       │   │   └── workload-identity
│       │   │       ├── apigee-workload-identities.yaml
│       │   │       ├── kustomization.yaml
│       │   │       └── patch.yaml
│       │   ├── kustomization.yaml
│       │   └── secrets.yaml
│       ├── route-config
│       │   ├── kustomization.yaml
│       │   └── test-env-group
│       │       ├── apigee-route-config.yaml
│       │       ├── components
│       │       │   ├── http-and-non-sni-client
│       │       │   │   ├── apigee-route.yaml
│       │       │   │   └── kustomization.yaml
│       │       │   ├── http-client
│       │       │   │   ├── apigee-route.yaml
│       │       │   │   └── kustomization.yaml
│       │       │   └── non-sni-client
│       │       │       ├── apigee-route.yaml
│       │       │       └── kustomization.yaml
│       │       └── kustomization.yaml
│       └── telemetry
│           ├── apigee-telemetry.yaml
│           ├── components
│           │   ├── http-proxy
│           │   │   ├── kustomization.yaml
│           │   │   └── patch.yaml
│           │   ├── imagepullsecret
│           │   │   ├── kustomization.yaml
│           │   │   └── patch.yaml
│           │   ├── logger
│           │   │   ├── kustomization.yaml
│           │   │   └── patch.yaml
│           │   ├── metrics
│           │   │   ├── kustomization.yaml
│           │   │   └── patch.yaml
│           │   ├── nodeselector
│           │   │   ├── kustomization.yaml
│           │   │   └── patch.yaml
│           │   ├── workload-identity-logger
│           │   │   ├── apigee-workload-identities.yaml
│           │   │   ├── kustomization.yaml
│           │   │   └── patch.yaml
│           │   └── workload-identity-metrics
│           │       ├── apigee-workload-identities.yaml
│           │       ├── kustomization.yaml
│           │       └── patch.yaml
│           └── kustomization.yaml
├── overlays
│   ├── controllers
│   │   ├── apigee-controller
│   │   │   ├── apigee-hybrid-config.yaml
│   │   │   ├── components
│   │   │   │   ├── imagepullsecret
│   │   │   │   │   ├── kustomization.yaml
│   │   │   │   │   └── patch.yaml
│   │   │   │   └── nodeselector
│   │   │   │       ├── kustomization.yaml
│   │   │   │       └── patch.yaml
│   │   │   └── kustomization.yaml
│   │   ├── istiod
│   │   │   ├── apigee-ingressgateway-manager-deployment-patch.yaml
│   │   │   ├── apigee-istio-mesh-config.yaml
│   │   │   ├── components
│   │   │   │   ├── imagepullsecret
│   │   │   │   │   ├── kustomization.yaml
│   │   │   │   │   └── patch.yaml
│   │   │   │   └── nodeselector
│   │   │   │       ├── kustomization.yaml
│   │   │   │       └── patch.yaml
│   │   │   └── kustomization.yaml
│   │   └── kustomization.yaml
│   ├── initialization
│   │   ├── certificates
│   │   │   ├── apigee-ingressgateway-manager-certificate.yaml
│   │   │   └── kustomization.yaml
│   │   ├── crds
│   │   │   └── kustomization.yaml
│   │   ├── ingress
│   │   │   └── kustomization.yaml
│   │   ├── namespace.yaml
│   │   ├── openshift
│   │   │   ├── kustomization.yaml
│   │   │   └── scc.yaml
│   │   ├── rbac
│   │   │   ├── apigee-controller
│   │   │   │   └── kustomization.yaml
│   │   │   ├── apigee-embedded-ingress-controller
│   │   │   │   └── kustomization.yaml
│   │   │   └── kustomization.yaml
│   │   └── webhooks
│   │       ├── kustomization.yaml
│   │       ├── mutatingwebhookconfiguration.yaml
│   │       └── validatingwebhookconfiguration.yaml
│   └── instances
│       └── instance1
│           ├── datastore
│           │   ├── apigee-datastore.yaml
│           │   ├── components
│           │   │   ├── http-proxy
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   ├── imagepullsecret
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   ├── nodeselector
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   ├── openshift-scc
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── scc.yaml
│           │   │   └── workload-identity
│           │   │       ├── apigee-workload-identities.yaml
│           │   │       ├── kustomization.yaml
│           │   │       └── patch.yaml
│           │   ├── kustomization.yaml
│           │   └── secrets.yaml
│           ├── environments
│           │   ├── kustomization.yaml
│           │   └── test
│           │       ├── apigee-environment.yaml
│           │       ├── components
│           │       │   ├── http-proxy
│           │       │   │   ├── kustomization.yaml
│           │       │   │   └── patch.yaml
│           │       │   ├── imagepullsecret
│           │       │   │   ├── kustomization.yaml
│           │       │   │   └── patch.yaml
│           │       │   ├── nodeselector
│           │       │   │   ├── kustomization.yaml
│           │       │   │   └── patch.yaml
│           │       │   └── workload-identity
│           │       │       ├── apigee-workload-identities.yaml
│           │       │       ├── kustomization.yaml
│           │       │       └── patch.yaml
│           │       ├── kustomization.yaml
│           │       └── secrets.yaml
│           ├── kustomization.yaml
│           ├── organization
│           │   ├── apigee-organization.yaml
│           │   ├── components
│           │   │   ├── http-proxy
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   ├── imagepullsecret
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   ├── nodeselector
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   └── workload-identity
│           │   │       ├── apigee-workload-identities.yaml
│           │   │       ├── kustomization.yaml
│           │   │       └── patch.yaml
│           │   ├── kustomization.yaml
│           │   └── secrets.yaml
│           ├── redis
│           │   ├── apigee-redis.yaml
│           │   ├── components
│           │   │   ├── imagepullsecret
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   ├── nodeselector
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   └── workload-identity
│           │   │       ├── apigee-workload-identities.yaml
│           │   │       ├── kustomization.yaml
│           │   │       └── patch.yaml
│           │   ├── kustomization.yaml
│           │   └── secrets.yaml
│           ├── route-config
│           │   ├── kustomization.yaml
│           │   └── test-envgroup
│           │       ├── apigee-route-config.yaml
│           │       ├── components
│           │       │   ├── http-and-non-sni-client
│           │       │   │   ├── apigee-route.yaml
│           │       │   │   └── kustomization.yaml
│           │       │   ├── http-client
│           │       │   │   ├── apigee-route.yaml
│           │       │   │   └── kustomization.yaml
│           │       │   └── non-sni-client
│           │       │       ├── apigee-route.yaml
│           │       │       └── kustomization.yaml
│           │       └── kustomization.yaml
│           └── telemetry
│               ├── apigee-telemetry.yaml
│               ├── components
│               │   ├── http-proxy
│               │   │   ├── kustomization.yaml
│               │   │   └── patch.yaml
│               │   ├── imagepullsecret
│               │   │   ├── kustomization.yaml
│               │   │   └── patch.yaml
│               │   ├── logger
│               │   │   ├── kustomization.yaml
│               │   │   └── patch.yaml
│               │   ├── metrics
│               │   │   ├── kustomization.yaml
│               │   │   └── patch.yaml
│               │   ├── nodeselector
│               │   │   ├── kustomization.yaml
│               │   │   └── patch.yaml
│               │   ├── openshift-scc
│               │   │   ├── kustomization.yaml
│               │   │   └── scc.yaml
│               │   ├── workload-identity-logger
│               │   │   ├── apigee-workload-identities.yaml
│               │   │   └── kustomization.yaml
│               │   └── workload-identity-metrics
│               │       ├── apigee-workload-identities.yaml
│               │       ├── kustomization.yaml
│               │       └── patch.yaml
│               └── kustomization.yaml
├── README.md
├── templates
│   ├── ingress-certificate.yaml
│   ├── ingress-cert-secret.yaml
│   └── service-account-key-secret.yaml
└── tools
    ├── apigee-hybrid-setup.sh
    ├── common.sh
    ├── create-service-account.sh
    └── dump_kubernetes.sh

GKE でのマルチインスタンスの設定

前提条件

ハイブリッドの複数のインスタンスを設定するには、次の前提条件を満たしておく必要があります。

  • さまざまな CIDR ブロックを使用して複数のリージョン(同一または異なる)に Kubernetes クラスタを設定します
  • リージョン間通信を設定します
  • すべてのリージョンの Kubernetes クラスタ間で Cassandra ポート 7000 と 7001 を開きます(トラブルシューティング中にバックアップ オプションとして 7000 を使用できます)。ポートの構成に関する記事もご覧ください。

ntpdate などのツールを使用すると、サーバー時刻が同期されていることを確認できます。


マルチリージョン シードホストを構成する

  1. 既存のインスタンスから $INSTANCE_NAME フォルダのコピーを作成し、instances フォルダに追加します。
  2. instance1 の Namespace と異なる場合は namespace フィールドの値を変更します。
  3. Ingress TLS 証明書の指定の手順に沿って、他のインスタンスの Ingress 構成を変更します。
  4. 他のインスタンスのロードバランサ IP を構成する方法については、Apigee Ingress ゲートウェイの管理をご覧ください。



  5. シード名を取得する前に、kubectl コンテキストを元のクラスタに設定します。

    kubectl config use-context original-cluster-name
    
  6. 次の kubectl コマンドを実行して、現在のリージョンの Cassandra のシードホスト アドレスを特定します。

    kubectl get pods -o wide -n apigee -l app=apigee-cassandra
    
  7. 前のコマンドで返された Pod IP は、いずれもマルチリージョン シードホストと見なすことができます。

  8. 2 番目のインスタンスで、Apigee データストア CR の ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastore/apigee-datastore.yaml で multiRegionSeedHost の値を設定します。

新しいインスタンスを設定する

  1. コンテキストを既存のクラスタに設定します

    kubectl config use-context existing-cluster-name
    
  2. apigee-ca Secret をファイルにエクスポートします

    kubectl -n cert-manager get secret apigee-root-certificate -o yaml > apigee-root-certificate.yaml
    
  3. コンテキストを新しいリージョンのクラスタ名に設定します。

    kubectl config use-context NEW_CLUSTER_NAME
    
  4. 新しいクラスタに Secret をインポートします

    kubectl -n cert-manager apply -f apigee-root-certificate.yaml
    
  5. 初期化リソースとコントローラを作成するに記載されている手順に沿って、新しいインスタンス(リージョン)にハイブリッドをインストールします。

  6. 新しいデータセンターのすべての Pod で Cassandra を設定します。次のコマンドを使用して、クラスタから apigeeorg を取得します。

    kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
    
  7. cassandra データ レプリケーションのカスタム リソース(YAML)ファイルを作成します。ファイルには任意の名前を付けることができます。次の例では、ファイル名は datareplication.yaml です。このファイルには、次のものが含まれている必要があります。

    apiVersion: apigee.cloud.google.com/v1alpha1
    kind: CassandraDataReplication
    metadata:
    name: REGION_EXPANSION
    namespace: NAMESPACE
    spec:
    organizationRef: APIGEEORG_VALUE
    force: false
    source:
      region: SOURCE_REGION
    

    ここで

    • REGION_EXPANSION は、このメタデータに付ける名前です。「cassandra-data-replication」などの名前を選択できます。
    • NAMESPACE は、2 つ目のインスタンスに選択した Namespace と同じです。通常は「apigee」です。
    • APIGEEORG_VALUE は、前の手順で kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name" コマンドから出力された値です。
    • SOURCE_REGION は、ソースクラスタの nodetool ステータスからの cassandra データセンターの値です。
  8. 次のコマンドを使用して CassandraDataReplication を適用します。

    kubectl apply -f datareplication.yaml
    
  9. 次のコマンドを使用して、再ビルドのステータスを確認します。



    kubectl -n apigee get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
    

    結果は次のようになります

    {
    "rebuildDetails": {
      "apigee-cassandra-default-0": {
        "state": "complete",
        "updated": 1623105760
      },
      "apigee-cassandra-default-1": {
        "state": "complete",
        "updated": 1623105765
      },
      "apigee-cassandra-default-2": {
        "state": "complete",
        "updated": 1623105770
      }
    },
    "state": "complete",
    "updated": 1623105770
    }
    
  10. ログで再ビルドプロセスを確認します。さらに、nodetool ステータス コマンドを使用して、データのサイズを確認します。

    kubectl logs apigee-cassandra-default-0 -f -n apigee
    

    JMX_user と JMX_password については、datastore/secrets.yaml をご覧ください

    kubectl exec apigee-cassandra-default-0 -n apigee  -- nodetool -u JMX_user -pw JMX_password status
    
  11. Apigee Datastore CR から multiRegionSeedHost を削除し、次のコマンドを実行して変更を適用します

    kubectl apply k apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastore
    
  12. Cassandra クラスタのステータスを確認します

    次のコマンドは、2 つのデータセンターでクラスタが正常に設定されているかどうかを確認するのに役立ちます。このコマンドは、2 つのリージョンの nodetool ステータスを確認します。

    kubectl exec apigee-cassandra-default-0 -n apigee  -- nodetool -u JMX_user -pw JMX_password status
    
    
    Datacenter: us-central1
    =======================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  10.12.1.45  112.09 KiB  256          100.0%            3c98c816-3f4d-48f0-9717-03d0c998637f  ra-1
    UN  10.12.4.36  95.27 KiB  256          100.0%            0a36383d-1d9e-41e2-924c-7b62be12d6cc  ra-1
    UN  10.12.5.22  88.7 KiB   256          100.0%            3561f4fa-af3d-4ea4-93b2-79ac7e938201  ra-1
    Datacenter: us-west1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  10.0.4.33   78.69 KiB  256          100.0%               a200217d-260b-45cd-b83c-182b27ff4c99  ra-1
    UN  10.0.0.21   78.68 KiB  256          100.0%               9f3364b9-a7a1-409c-9356-b7d1d312e52b  ra-1
    UN  10.0.1.26   15.46 KiB  256          100.0%               1666df0f-702e-4c5b-8b6e-086d0f2e47fa  ra-1
    

トラブルシューティング

サポート、診断、トラブルシューティングのガイド

https://cloud.google.com/apigee/docs/api-platform/troubleshoot/playbooks/troubleshooting-apigee-hybrid

マルチリージョン Apigee ハイブリッド設定で forceDelete を使用した後の手動クリーンアップ

  • 次の例では、us-east1us-west1 の 2 つのリージョンがあります。
  • us-west1 リージョンでは、強制削除を使用して Apigee データストアが削除されました。
  • us-east1 リージョンでは、cassandra がまだ稼働中です。
  • コマンドを使用して apigeeds が削除されたことを確認します

    kubectl get apigeeds -n apigee
    No resources found in apigee namespace.
    
  • kubectl のコンテキストを、cassandra クラスタがまだ稼働しているもう一方のリージョン(ここでは us-east1)に変更します。

  • データストアが実行状態にあることを確認します

    kubectl get apigeeds -n apigee
    NAME      STATE     AGE
    default      running    23h
    
  • 稼働状態のリージョン(ここでは us-east1)にある cassandra Pod のいずれかに対する操作を実行します

    kubectl exec -it -n apigee apigee-cassandra-default-0 -- bash
    apigee@apigee-cassandra-default-0:~$
    
  • nodetool ステータスを確認します。削除されたリージョン(ここでは us-west1)にあるすべてのノードが停止していることが表示されます

    apigee@apigee-cassandra-default-0:~$ nodetool -u ${APIGEE_JMX_USER} -pw ${APIGEE_JMX_PASSWORD} status
    
    Datacenter: us-east1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --     Address         Load           Tokens   Owns    Host ID                                                           Rack
    UN  10.52.0.212   685.01 KiB  256          ?         e1aa61e3-4eae-4549-9b58-506d495d87ab   ra-1
    UN  10.52.0.72     606.75 KiB  256          ?         477dfc03-f93e-40ea-810a-d15769822ad5     ra-1
    UN  10.52.0.104   648.3 KiB    256          ?         a8854cff-c2e3-4f0c-a342-e692787efcab        ra-1
    Datacenter: us-west1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --     Address         Load             Tokens   Owns     Host ID                                                           Rack
    DN  10.60.0.143   567.06 KiB    256          ?           355d6ace-ab77-42cb-8138-9993bfd62d0e    ra-1
    DN  10.60.0.40     535.99 KiB    256          ?           4ed2c903-ff56-40fa-a15e-80a3de3cb22d      ra-1
    DN  10.60.0.17     573.08 KiB    256          ?           f9a50d19-c04a-4d0d-a088-612384bed9f5     ra-1
    
  • 削除されたリージョン(ここでは us-west1)にあるすべてのノードを削除します

    apigee@apigee-cassandra-default-0:~$ nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD removenode 355d6ace-ab77-42cb-8138-9993bfd62d0e
    apigee@apigee-cassandra-default-0:~$ nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD removenode 4ed2c903-ff56-40fa-a15e-80a3de3cb22d
    apigee@apigee-cassandra-default-0:~$ nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD removenode f9a50d19-c04a-4d0d-a088-612384bed9f5
    
  • 削除されたリージョン(ここでは us-west1)にノードが残っていないことを確認します

    apigee@apigee-cassandra-default-0:~$ nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD status
    
    
    Datacenter: us-east1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --     Address         Load             Tokens  Owns   Host ID                                                           Rack
    UN  10.52.0.212   699.71 KiB    256          ?        e1aa61e3-4eae-4549-9b58-506d495d87ab  ra-1
    UN  10.52.0.72     586.77 KiB    256          ?        477dfc03-f93e-40ea-810a-d15769822ad5    ra-1
    UN  10.52.0.104   623.6 KiB      256          ?        a8854cff-c2e3-4f0c-a342-e692787efcab       ra-1
    
  • 完了したら、稼働中のリージョン(ここでは us-east1)のユーザー設定ジョブを削除します。ジョブは数秒以内に自動的に再作成されます。

    kubectl get jobs -n apigee
    
    
    ​​NAME                                                                                    COMPLETIONS   DURATION   AGE
    apigee-cassandra-schema-setup-apigee--0d2504c                    0/1           5m54s      5m54s
    apigee-cassandra-user-setup--apigee--0d2504c                          0/1            7s         7s
    
    
    kubectl delete job apigee-cassandra-user-setup--apigee--0d2504c
    
  • ユーザー設定ジョブが完了するまで待ちます

    kubectl get jobs -n apigee
    
    ​​NAME                                                                                    COMPLETIONS   DURATION   AGE
    apigee-cassandra-schema-setup-apigee--0d2504c                    1/1           5m54s      5m54s
    apigee-cassandra-user-setup--apigee--0d2504c                      1/1           7m                7m
    
  • 削除されたリージョンがキースペースにないことを確認します。

  • Cassandra デバッグ Pod を作成します。

    • ハイブリッド バージョン 1.5 以降を使用し、Cassandra のトラブルシューティング ガイド(ハイブリッド 1.5 - リンク、ハイブリッド 1.6 - リンクなど)に沿って、作成した Pod に対して操作を実行します
  • 次のコマンドを使用して、デバッグ Pod で cqlsh にログインします

    apigee@cassandra-debug-client:~$ cqlsh apigee-cassandra-default-0.apigee-cassandra-default.apigee.svc.cluster.local -u ddl_user --ssl
    Password:
    
  • us-west1 リージョンがすべてのキースペースから削除されていることを確認します

    ddl_user@cqlsh> SELECT * FROM system_schema.keyspaces;
    
    keyspace_name              | durable_writes | replication
    ---------------------------+----------------+-----------------------------------------------------------------------------------
    cache_prince_hybrid_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
      rtc_prince_hybrid_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
                    system_auth |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
                  system_schema |           True |                            {'class': 'org.apache.cassandra.locator.LocalStrategy'}
    quota_prince_hybrid_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
      kms_prince_hybrid_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
             system_distributed |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
                         system |           True |                            {'class': 'org.apache.cassandra.locator.LocalStrategy'}
                         perses |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
      kvm_prince_hybrid_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
                  system_traces |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
    (11 rows)