プレビュー ユーザーガイド:
Apigee ハイブリッド v1.8 の新しいインストールと管理手順のプレビュー。
このドキュメント内:
- プレビュー
- 概要
- 前提条件
- 基本的な Apigee ハイブリッド インストール
- カスタマイズされた Apigee ハイブリッド インストール
- 設定ファイルをダウンロードする
- Namespace を作成する
- 限定公開リポジトリの Docker イメージの使用(省略可)
- imagePullSecret の構成(省略可)
- 転送プロキシの構成(省略可)
- Ingress TLS 証明書の指定
- Ingress デプロイを更新する
- カスタム Google Cloud サービス アカウントの構成
- Workload Identity の使用
- リソース yaml を編集する
- 初期化リソースとコントローラを作成する
- コントロール プレーンを操作するための権限を Synchronizer サービス アカウントに付与する
- Apigee データプレーン コンポーネントを作成する
- リソースの開始を待つ
- カスタム Namespace での cert-manager のインストールをカスタマイズする
- Kustomize とコンポーネント
- コンセプト
- スクリプトについて
- Apigee ハイブリッド設定のフォルダ構造
- 外部 Vault へのサービス アカウント キーの保存
- Apigee ハイブリッド アップグレード
- Apigee ハイブリッド ロールバック
- クリーンアップ
- 環境の削除
- マルチインスタンスのインストール
プレビュー
このドキュメントは、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 ハイブリッドを実際にインストールする前に、ドキュメントの次のセクションに記載されている手順を完了しておく必要があります。
- プロジェクトと組織の設定
- Apigee ハイブリッド インストールの前提条件の概要。
- ステップ 1: API を有効にする
- ステップ 2: 組織を作成する
- ステップ 3: 環境と環境グループを作成する
- ハイブリッド ランタイムの設定
ツール
また、ワークステーションには、次のツールをダウンロードして構成する必要があります。
curl
apigee-hybrid-setup.sh
スクリプトを実行するにはdocker
が必要です。Docker の取得の手順に沿って、Docker をインストールします。- ほとんどの Linux / UNIX ベースのシステムで
envsubst
を使用できます。MacOS や他のシステムでは、このリポジトリの手順に沿って操作してください。 jq
がインストールされている必要があります。jq をダウンロードします。kpt
kpt をダウンロードします。kubectl
バージョン 1.23 以降。Kubernetes のドキュメントで、ツールのインストール: kubectl をご覧ください。
このガイドで使用する共通の変数
このガイドでは、複数の手順で次の環境変数を使用します。定義するには、コマンドラインまたはスクリプトを使用します。つまり、コマンドの入力時に、そのコマンドのテキストを置き換えて定義できます。
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 つ作成され、すべてのコンポーネントに対して使用される
- すべての暗号鍵とパスワードのデフォルト値。
設定ファイルをダウンロードする
https://github.com/apigee/apigee-hybrid-install/releases/tag/preview-1
に GitHub リポジトリのクローンを作成することで、設定ファイルをダウンロードして準備します。
リポジトリのクローンを作成します。
git clone https://github.com/apigee/apigee-hybrid-install.git
クローンを作成したリポジトリのディレクトリに移動します。
cd apigee-hybrid-install
preview-1 タグからブランチを作成します。
git branch preview-1 preview-1 git checkout preview-1
設定スクリプトを実行可能にします。
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 ハイブリッド インストール
上級ユーザーがインストールを細かく制御するには、次の一連の手順に沿って操作します(以下に示す手順の多くは、手動で実行することも、その個別の手順をシェル スクリプトを使用して自動化することもできます)。
設定ファイルをダウンロードする
設定ファイルをダウンロードして準備します。
https://github.com/apigee/apigee-hybrid-install/
に、GitHub リポジトリのクローンを作成しますクローンが作成されたリポジトリは、Apigee ハイブリッドの設定フォルダ構造で説明されているような構造になります。
cd
コマンドでapigee-hybrid-install/
ディレクトリに移動します。設定スクリプトを実行可能にします。
chmod +x ./tools/apigee-hybrid-setup.sh
Namespace を作成する
すべての Apigee クラスタ コンポーネントを含む Kubernetes Namespace をクラスタに作成します。
kubectl create namespace apigee
Namespace に別の名前を使用する場合は、以下の 3 つの方法のいずれかに沿って操作します。
- (推奨)リソースの YAML を編集するで値を事前生成するときに
--namespace={YOUR_NAMESPACE_NAME}
を使用します。 次の 2 つのコマンドを実行します。
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
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 イメージの使用(省略可)
一般公開されているホストされたイメージを使用しないようにして、独自の限定公開リポジトリのイメージを使用することができます。
- 最初のステップは、すべてのイメージを非公開リポジトリに push することです。これを行うには、apigee-pull-push: Apigee X の手順に沿って操作します。デフォルトでは、イメージは対応する Apigee Hybrid バージョンでタグ付けされます。これらのタグは編集しないことをおすすめします。また、イメージ名も編集しないことをおすすめします。これにより、Image Hub で説明するように、最終的なイメージパスを作成できます。
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 の構成(省略可)
- 限定公開リポジトリで認証するための認証情報を含む kubernetes Secret を作成します。Secret の作成方法については、Pull an Image from a Private Registry をご覧ください。
- 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.key
と tls.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 を更新する必要が生じます。
- 証明書の作成用に、customization.yaml ファイル(
$INSTALL_DIR/overlays/initialization/certificates/kustomize.yaml
)を編集します。 ファイルの末尾に以下を追加します。
- patch: |- - op: replace path: /metadata/namespace value: "gk-cert-manager" target: group: cert-manager.io version: v1 kind: Certificate name: apigee-root-certificate
ファイルを保存します。
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
のリストに追加します
- 必須。関連する Secret 名を
使用方法:
- Apigee ハイブリッドをまだインストールしていない場合、インストール手順に進むと、これらの変更がプロセスに適用されます。
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
から目的の値に変更します。
- 省略可。ノードセレクタのラベルの値を
使用方法:
- Apigee ハイブリッドをまだインストールしていない場合、インストール手順に進むと、これらの変更がプロセスに適用されます。
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 アドオンがあり、個別に有効にできます。
使用方法:
- ハイブリッドをまだインストールしていない場合は、前のセクションで説明したように Workload Identity を有効にするだけで、インストールに進むことができ、Workload Identity が自動的に使用されます。
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
: 省略可。プロキシにアクセスするためのパスワード
使用方法:
- Apigee ハイブリッドをまだインストールしていない場合、インストール手順に進むと、これらの変更がプロセスに適用されます。
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
前提条件:
ストレージ オブジェクト管理者ロールを持つアカウントの Google Cloud サービス アカウント キーをダウンロードします。
- スクリプトを使用してインストールを実行し、Workload Identity を使用しなかった場合、スクリプトによって作成される service-accounts フォルダで使用可能なダウンロードしたキーを再利用できます。
また、create-service-account.sh スクリプトを使用して新しいサービス アカウントを作成し、そのキーをダウンロードできます。
./tools/create-service-accounts=.sh --env prod --profile apigee‑cassandra
キーがダウンロードされたら、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 を参照してください
- ハイブリッド ランタイム デプロイを復元する新しい Namespace で新しい Kubernetes クラスタを作成します。元のハイブリッド インストールに使用していたものと同じクラスタと Namespace を使用することはできません。
他の必要な設定に加え、上記の設定を使用してハイブリッドを新しいクラスタにインストールします。
- 基本インストールを使用して、新しい Namespace にハイブリッドをインストールできます。
./tools/apigee-hybrid-setup.sh \ --cluster-name $CLUSTER_NAME \ --cluster-region $CLUSTER_LOCATION \ --namespace ${NEW_APIGEE_NAMESPACE}
- または、カスタマイズされた Apigee ハイブリッドのインストールに沿って、自由に設定してください。
復元が完了したら、古い Namespace のすべてのリソースが削除され、新しい Namespace に切り替えることができます。
詳細については、バックアップの復元に関する記事をご覧ください。
non-gcs-backup と non-gcs-restore
この kustomize コンポーネントを使用すると、Google Cloud Storage への cassandra データベースのバックアップと復元を実施できます。
使用できる環境:
overlays/instances/{INSTANCE_NAME}/datastore
前提条件:
- 既存のドキュメントのサーバーと SSH を設定する手順を利用できます。
上記の手順で、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
- 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
- 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 の復元の概要をご覧ください。
- ハイブリッド ランタイム デプロイを復元する新しい Namespace で新しい Kubernetes クラスタを作成します。元のハイブリッド インストールに使用していたものと同じクラスタと Namespace を使用することはできません。
他の必要な設定に加え、上記の設定を使用してハイブリッドを新しいクラスタにインストールします。基本インストールを使用して、新しい Namespace にハイブリッドをインストールできます。
./tools/apigee-hybrid-setup.sh \ --cluster-name $CLUSTER_NAME \ --cluster-region $CLUSTER_LOCATION \ --namespace ${NEW_APIGEE_NAMESPACE}
または、カスタマイズされた Apigee ハイブリッドのインストールに沿って、自由に設定してください。
復元が完了したら、古い Namespace のすべてのリソースが削除され、新しい Namespace に切り替えることができます。
詳細については、リモート サーバーでのバックアップのスケジュール設定をご覧ください。
http-client
手順については、HTTP クライアントを有効にする | Apigee をご覧ください。
使用できる環境:
- overlays/instances/${INSTANCE_NAME}/route-config/${ENV_GROUP}
有効化:
それぞれの route-config/${ENV_GROUP}/kustomization.yaml
ファイルの「./components/http-client
」行をコメント化解除します
変更内容:
- 必須の変更は不要です。
使用方法:
- Apigee ハイブリッドをまだインストールしていない場合、インストール手順に進むと、これらの変更がプロセスに適用されます。
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
- 必須。
credentialName
Description は、こちらに記載されたcredential_name
と一致します。
- 必須。
使用方法:
- Apigee ハイブリッドをまだインストールしていない場合、インストール手順に進むと、これらの変更がプロセスに適用されます。
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
- 必須。
credentialName
Description は、こちらに記載されたcredential_name
と一致します。
- 必須。
使用方法:
- Apigee ハイブリッドをまだインストールしていない場合、インストール手順に進むと、これらの変更がプロセスに適用されます。
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 ハイブリッドの別の設定がすでに存在する場合は、このコンポーネントを使用するのがよいでしょう。
- Cassandra Pod 間で適切な通信を確保するには、新しいクラスタと既存のクラスタの両方で同じ TLS 証明書を使用する必要があります。そのため、既存のクラスタから
apigee-root-certificate
Secret をコピーして、新しいクラスタでも使用する必要があります。 実行:
kubectl config get-contexts
- すべての Kubernetes コンテキストのリストを取得し、次のコマンドを実行します。
kubectl config use-context SOURCE_CLUSTER_CONTEXT
ここで、SOURCE_CLUSTER_CONTEXT はソース Kubernetes クラスタ コンテキストの名前です。
ルート証明書 Secret をファイルに保存します。
kubectl get secret/apigee-root-certificate -n cert-manager -o yaml > apigee-root-certificate.yaml
クラスタ コンテキストを、Apigee ハイブリッドをインストールする新しいクラスタに切り替えます。
kubectl config use-context ${NEW_CLUSTER_CONTEXT}
新しいクラスタでルート Secret を作成します。
kubectl -n cert-manager apply -f apigee-root-certificate.yaml
新しいルート証明書の作成を無効にします。これにより、新しい
apigee-root-certificate
が作成されなくなるため、前のステップで作成したものが上書きされることもなくなります。overlays/initialization/certificates/kustomization.yaml
ファイル内の次の行をコメント化解除します。# components: # - ./components/disable-apigee-root-certificate-generation
基本的な Apigee ハイブリッド インストールまたはカスタマイズされた Apigee Hybrid インストールのいずれかを使用して、Apigee ハイブリッド インストールの残りの手順を進めます。たとえば、基本的な Apigee ハイブリッド インストールの手順に沿って、次のコマンドを実行します。
./tools/apigee-hybrid-setup.sh --cluster-name $CLUSTER_NAME --cluster-region $CLUSTER_LOCATION
次のコマンドを使用して、再ビルドのステータスを確認します。
kubectl -n ${APIGEE_NAMESPACE} get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
ログで再ビルドプロセスを確認します。さらに、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
次のコマンドを使用して、再ビルドのステータスを確認します。
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 }
マルチリージョン デプロイもご覧ください。
components/multi-region/patch.yaml
から次の行を削除します。properties: multiRegionSeedHost: {IP_ADDRESS} # To be modified. REQUIRED
変更を適用します。
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)
└── ...
新しい環境は次のように簡単に追加できます。
- 環境ディレクトリ内に新しいフォルダを作成します(フォルダ構成は自由です)。
- 既存の環境から
apigee-environment.yaml
ファイルを新しいフォルダにコピーします。 - 新しい環境用に新しいサービス アカウントと暗号鍵を作成する場合は、
secrets.yaml
を新しいフォルダにコピーし、他の既存の環境と区別できるように Secret の名前を変更します(通常は環境の名前にサフィックスを追加します)。 - 次のように、
apigee-environment.yaml
を適切に変更します。- 環境の名前を変更します。
- 新しいサービス アカウントと暗号鍵を作成する場合は、それが yaml で正しく参照されるようにする必要があります。
yaml
s を適用します。
kubectl apply -f components/environments/new-env-name/secrets.yaml
kubectl apply -f components/environments/new-env-name/apigee-environment.yaml
Apigee Datastore での強制削除の使用
なんらかの理由でデータストアの削除が進行していない場合、クラスタの現在の状態に関係なく、次のコマンドを使用して Apigee データストアを強制的に削除できます。
apigee
Namespace のapigeeds
を削除します。Kubectl delete -n apigee apigeeds default
このステップが停止する場合は、Ctrl+C を使用して解除できます。
新しい
apigeeds
を編集します。Kubectl edit -n apigee apigeeds default
Apigee データストアの仕様に forceDelete フィールドを追加 / 更新します。
spec: forceDelete: true
ファイルを保存して終了します。
データストアが削除されるまで待ちます。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
さまざまなコンポーネントによって使用される Role
、ClusterRole
、RoleBinding
、ClusterRoleBinding
が含まれています。
crds
Contains the definition of all the CRDs which are used by Apigee.
webhooks
カスタム リソースでの検証の実施に使用される ValidatingWebhookConfiguration
と MutatingWebhookConfiguration
が含まれています。
ingress
すべての Ingress Pod に適用される設定が含まれています。例: 一般的なヘッダーの変更、ヘルスチェックなど
openshift
openshift SecurityContextConstraints の定義が含まれています。
コントローラ
apigee-controller
apigee-hybrid-config.yaml
apigee-controller-manager.yaml に入力として指定される ConfigMap
が含まれています。この ConfigMap には、imageHub
、imagePullSecrets
、forwardProxy
などの設定が含まれています。
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 で参照される Secret
s が含まれています。一部の Secret は、スクリプトによって生成されるときにコメントアウトされます。生成を無効にする場合は、手動で作成する必要があります。
environments
組織内のすべての環境が含まれています。すでに提供されているフォルダをコピーし、要件に従って構成することで、環境ごとに個別のフォルダを作成する必要があります。
dev
apigee-environment.yaml
ランタイムなどの他のサブコンポーネントを管理する ApigeeEnvironment
カスタム リソースが含まれています。
secrets.yaml
apigee-environment.yaml で参照される Secret
s が含まれています。一部の Secret は、スクリプトによって生成されるときにコメントアウトされます。生成を無効にする場合は、手動で作成する必要があります。
telemetry
apigee-telemetry.yaml
ApigeeTelemetry
カスタム リソースが含まれています。
secrets.yaml
apigee-telemetry.yaml で参照される Secret
s が含まれています。一部の 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 プロバイダを使用してマウントする方法の基本的な例です。
- Helm を使用して、Vault の関連リソースをクラスタにインストールします。システムに Helm を設定する方法については、Helm をインストールする手順に沿って操作します。
具体的には、Vault Helm チャートをインストールする手順に沿って操作します。
Hashicorp リポジトリを helm に追加します
helm repo add hashicorp https://helm.releases.hashicorp.com
helm リポジトリを更新します
helm repo update
Vault をインストールします
helm install vault hashicorp/vault \ --set "server.dev.enabled=true" \ --set "injector.enabled=false" \ --set "csi.enabled=true"
ここで Secret を Vault に保存します。
Vault 開発 Pod 内でシェルを取得します
kubectl exec -it vault-0 -- /bin/sh ```
この例では、データを保存するために Key-Value Secret エンジンを使用します。
vault kv put secret/runtime-gcp-sa-key key="${BASE_64_ENCODED_KEY}"
鍵が正常に保存されたことを確認するには、次のコマンドを使用します。
vault kv get secret/runtime-gcp-sa-key
ランタイム Pod が鍵を pull できるように認証を設定します。Kubernetes サービス アカウントで説明したように、Kubernetes サービス アカウントは Pod に ID を提供します。これにより、Pod は他のシステムで認証できるようになります。
Vault 開発 Pod 内でシェルを取得します
kubectl exec -it vault-0 -- /bin/sh
Kubernetes 認証方法を有効にします
vault auth enable kubernetes
認証構成を記述します
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
認証ポリシーを作成します
vault policy write apigee-runtime-app - <<EOF path "secret/data/runtime-gcp-sa-key" { capabilities = ["read"] } EOF
ポリシーをサービス アカウントにバインドします
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 が他にある場合は、その名前を使用します。
vault-0 内でシェルを終了します
exit
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
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
yaml
を適用しますkubectl apply -f spc-vault.yaml
ステップ(4.e)で権限を割り当てた Kubernetes サービス アカウントを作成します。
kubectl create serviceaccount -n ${APIGEE_NAMESPACE} apigee-runtime-sa
環境に合わせて 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"
変更を適用します。
kubectl apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/environments/$ENV_NAME
Apigee ハイブリッド アップグレード
前提条件に記載されているすべての要件を満たす必要があります。また、すべてのコンポーネントを順に再起動して、クラスタが正常であることを確認することをおすすめします。再起動は、Cassandra、Redis、ApigeeOrganization、ApigeeEnvironment の順序で行います。
バックアップを作成する
現在のハイブリッド設定のバックアップ コピーを作成します。アップグレードを現在のバージョンにロールバックする必要がある場合は、バックアップが必要になります。
tar -czvf apigee-hybrid-install.v-X.Y.Z.tar.gz $HYBRID_INSTALL_BASE_DIR
Cassandra データベースのバックアップを作成します。Cassandra バックアップは、障害シナリオに対する重要な保護手段です。
必要に応じて Kubernetes プラットフォームをアップグレードする
この手順は毎回必要ではありませんが、新しいバージョンの Apigee ハイブリッドでサポートされなくなった場合は、kubernetes、openshift などの Kubernetes プラットフォームと、cert-manager、cassandra などのバージョンのコンポーネントをアップグレードする必要があります。ドキュメントには、プラットフォームとコンポーネントのサポート対象のバージョンが記載されています。
設定ファイルをダウンロードする
リポジトリをダウンロードして、既存の Apigee ハイブリッド設定の bases
フォルダと tools
フォルダを新しいものに置き換えます。
https://github.com/apigee/apigee-hybrid-install/releases/tag/preview-1
で、GitHub リポジトリ preview-1 タグのクローンを作成しますクローンが作成されたリポジトリは、Apigee ハイブリッドの設定フォルダ構造で説明されているような構造になります。
既存の 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 ハイブリッドのロールバック
apigee-hybrid-setup を復元します
以前のバージョンの Apigee ハイブリッド設定を含むディレクトリに移動します。使用できない場合は、Apigee ハイブリッドのアップグレード時にステップ 1[link] で作成した zip ファイルから復元します。
Kubernetes コンポーネントをロールバックします
Apigee CR の変更を適用します
kubectl apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}
コントローラをロールバックします
Apigee ハイブリッド インストール ワークフローの初期化リソースとコントローラを作成すると同じ一連の手順に沿って操作します。スクリプトを使用するか手動の手順に沿って、初期化リソースとコントローラをロールバックできます。
クリーンアップします
アップグレード中に作成された新しい追加リソース(新しいバージョンのハイブリッドで導入された新しいコンポーネントやサービス アカウントなど)は、クリーンアップする必要があります。クリーンアップが必要なすべてのリソースとクリーンアップ手順は、アップグレード ガイドに記載されています。
環境の削除
kubernetes クラスタから環境に関連するすべてのリソースを削除する手順は次のとおりです。
環境 CR の名前を取得します。これを行うには、すべての環境を取得します。
kubectl get env -n ${APIGEE_NAMESPACE}
リソース名を
APIGEE_ENV
環境変数に格納します。環境の暗号鍵を削除します。たとえば、暗号鍵の名前を変更していない場合は、次のコマンドで削除できます。
kubectl delete secret -n ${APIGEE_NAMESPACE} $APIGEE_ENV-encryption-keys
Google Cloud サービス アカウントの Secret を削除します。
kubectl delete secret -n ${APIGEE_NAMESPACE} $(kubectl get env $APIGEE_ENV -n ${APIGEE_NAMESPACE} -o=jsonpath='{.spec.components.*.appServiceAccountSecretName}')
kubernetes サービス アカウントを削除します。
kubectl delete secret -n ${APIGEE_NAMESPACE} $(kubectl get env $APIGEE_ENV -n ${APIGEE_NAMESPACE} -o=jsonpath='{.spec.components.*.podServiceAccountName}')
Apigee 環境のカスタム リソースを削除します。
kubectl -n ${APIGEE_NAMESPACE} delete env $APIGEE_ENV
ハイブリッド設定の削除
kubernetes クラスタから Apigee ハイブリッドに関連するすべてのリソースを削除する手順は次のとおりです。
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')
デプロイされた Apigee ハイブリッド データプレーン コンポーネントを削除します。次のコマンドを使用して、すべてのコンポーネントを削除します。
kubectl delete -k ${INSTALL_DIR}/overlays/instances/$INSTANCE_NAME
この手順は、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}')
OpenShift の場合は、Apigee ハイブリッドのインストール時に作成された scc(セキュリティ コンテキストの制約)を削除する必要があります。
kubectl delete scc ${SECURITY_CONTEXT_CONSTRAINTS_NAME}
次のコマンドを実行して、ロール、ロールバインディング、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
次のコマンドを実行して 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 などのツールを使用すると、サーバー時刻が同期されていることを確認できます。
マルチリージョン シードホストを構成する
- 既存のインスタンスから $INSTANCE_NAME フォルダのコピーを作成し、instances フォルダに追加します。
- instance1 の Namespace と異なる場合は namespace フィールドの値を変更します。
- Ingress TLS 証明書の指定の手順に沿って、他のインスタンスの Ingress 構成を変更します。
他のインスタンスのロードバランサ IP を構成する方法については、Apigee Ingress ゲートウェイの管理をご覧ください。
シード名を取得する前に、kubectl コンテキストを元のクラスタに設定します。
kubectl config use-context original-cluster-name
次の kubectl コマンドを実行して、現在のリージョンの Cassandra のシードホスト アドレスを特定します。
kubectl get pods -o wide -n apigee -l app=apigee-cassandra
前のコマンドで返された Pod IP は、いずれもマルチリージョン シードホストと見なすことができます。
2 番目のインスタンスで、Apigee データストア CR の ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastore/apigee-datastore.yaml で multiRegionSeedHost の値を設定します。
新しいインスタンスを設定する
コンテキストを既存のクラスタに設定します
kubectl config use-context existing-cluster-name
apigee-ca Secret をファイルにエクスポートします
kubectl -n cert-manager get secret apigee-root-certificate -o yaml > apigee-root-certificate.yaml
コンテキストを新しいリージョンのクラスタ名に設定します。
kubectl config use-context NEW_CLUSTER_NAME
新しいクラスタに Secret をインポートします
kubectl -n cert-manager apply -f apigee-root-certificate.yaml
初期化リソースとコントローラを作成するに記載されている手順に沿って、新しいインスタンス(リージョン)にハイブリッドをインストールします。
新しいデータセンターのすべての Pod で Cassandra を設定します。次のコマンドを使用して、クラスタから apigeeorg を取得します。
kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
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 データセンターの値です。
次のコマンドを使用して CassandraDataReplication を適用します。
kubectl apply -f datareplication.yaml
次のコマンドを使用して、再ビルドのステータスを確認します。
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 }
ログで再ビルドプロセスを確認します。さらに、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
Apigee Datastore CR から
multiRegionSeedHost
を削除し、次のコマンドを実行して変更を適用しますkubectl apply k apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastore
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
トラブルシューティング
サポート、診断、トラブルシューティングのガイド
マルチリージョン Apigee ハイブリッド設定で forceDelete を使用した後の手動クリーンアップ
- 次の例では、
us-east1
とus-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 を作成します。
次のコマンドを使用して、デバッグ 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)