このページの内容は Apigee に適用されます。Apigee ハイブリッドには適用されません。
Apigee Edge のドキュメントを表示する。
API 管理のニーズが増大したり変化したりすると、クラスタに新しいサービスを追加したり、既存のルートや Ingress オプションを更新したりする必要があります。このページでは、クラスタを更新して次のタスクを完了する方法について説明します。
- 新しい Gateway と HTTPRoute を追加する。
- API プロダクトを更新する。
- 新しい API プロダクトを作成します。
- 新しい API オペレーション セットを作成する。
- 新しい Gateway 構成をテストします。
始める前に
このタスクを開始する前に、Kubernetes 用の Apigee APIM Operator でポリシーを適用するで説明されている手順を完了してください。このページでは、Google Kubernetes Engine(GKE)クラスタを設定し、Kubernetes 用の Apigee APIM Operator をインストールし、Google Kubernetes Engine(GKE)Gateway を作成し、Gateway に 1 つ以上の API 管理ポリシーを適用していることを前提としています。
必要なロール
Kubernetes 用 Apigee APIM オペレータをインストールするで説明されているように、必要なロールをサービス アカウントに割り当てた場合は、これらのタスクを完了するために追加の IAM ロールや権限は必要ありません。
Kubernetes に組み込まれたロールベースのアクセス制御(RBAC)メカニズムを使用して、Google Kubernetes Engine クラスタ内のリソースに対するアクションを認可できます。詳細については、 ロールベース アクセス制御を使用してクラスタ内のアクションを認可するをご覧ください。
新しい Gateway と HTTPRoute を追加する
このセクションでは、新しい Gateway と HTTPRoute をクラスタに追加します。前のタスクガイドでは、サンプル構成で外部 GKE Gateway を使用しました。複数の Gateway が同じリージョンにデプロイされている場合は、同じタイプ(外部と内部の両方または内部の両方)である必要があります。このため、このガイドのサンプル構成でも外部 Gateway を使用します。
APIM Operator は、内部または外部の GKE ゲートウェイで使用できますが、同じリージョンに両方のタイプのゲートウェイをデプロイすることはできません。
新しい Gateway と HTTPRoute をクラスタに追加する手順は次のとおりです。
- 新しい外部 GKE Gateway を設定します。詳細と手順については、外部 Gateway をデプロイするをご覧ください。
apim
Namespace にgateway2.yaml
という名前の新しいファイルを作成します。- 次の内容を新しいファイルにコピーします。
# gateway2.yaml apiVersion: gateway.networking.k8s.io/v1beta1 kind: Gateway metadata: name: global-ext-lb2 spec: gatewayClassName: gke-l7-global-external-managed listeners: - name: https protocol: HTTPS allowedRoutes: kinds: - kind: HTTPRoute namespaces: from: All port: 443 tls: options: networking.gke.io/pre-shared-certs: apigee-lb-new-cert-sept
/post
の新しい HTTPRoute を同じファイルに追加します(以下をハイライト表示)。# http-route2.yaml apiVersion: gateway.networking.k8s.io/v1beta1 kind: HTTPRoute metadata: name: http-bin-route-post namespace: http spec: parentRefs: - kind: Gateway name: global-ext-lb2 namespace: default hostnames: - HOST_NAME_2 rules: - matches: - path: type: PathPrefix value: "/post" backendRefs: - name: httpbin kind: Service port: 80 namespace: http
- 新しい Gateway と HTTPRoute を適用します。
kubectl apply -f gateway2.yaml
- 次のコマンドを使用して HTTPRoute のステータスを確認します。
kubectl -n http get HttpRoute
出力例を以下に示します。
NAME HOSTNAMES AGE http-bin-route ["my-hostname-2"] 12d
- 次のコマンドを使用して Gateway のステータスを確認します。
kubectl get gateway global-ext-lb2
出力は次のようになります。
NAME CLASS ADDRESS PROGRAMMED AGE global-ext-lb2 gke-l7-global-external-managed 34.54.193.92 True 11d
Address
列に有効な IP アドレスが含まれていて、Programmed
のステータスがTrue
であることを確認します。 - Gateway を記述して、ルートが接続されていることを確認します。
kubectl describe gateway global-ext-lb2
出力例を以下に示します。
... Listeners: Attached Routes: 1 Conditions: Last Transition Time: 2024-10-03T03:10:17Z ...
Attached Routes
の値が1
であることを確認します。- Gateway にリクエストを送信して、ルートが機能していることを確認します。
curl -X POST http://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME"
ここで
GATEWAY_IP_ADDRESS
は、ステップ 7 で返されたレスポンスのAddress
列に示すように、Gateway の IP アドレスです。HOST_NAME
は、Gateway のHTTPRoute
で定義されたホスト名です。
- 出力例を以下に示します。
{ "args": {}, "headers": { "Accept": "*/*", "Host": "apigee-apim-operator-test.apigee.net", "User-Agent": "curl/8.7.1", "X-Cloud-Trace-Context": "2bb8a80e29e80662ff9cb89971c447d9/13083106619927322701" }, "origin": "67.164.1.10,34.54.193.72", "url": "https://apigee-apim-operator-test.apigee.net/post" }
- 前の手順で作成した新しい Gateway の HTTPRoute を参照する新しい APIM 拡張ポリシーを作成します。
apim
Namespace にapim-policy2.yaml
という名前の新しいファイルを作成します。- 次の内容を新しいファイルにコピーします。
# apim-policy2.yaml apiVersion: apim.googleapis.com/v1alpha1 kind: APIMExtensionPolicy metadata: name: global-ext-lb2-apim-policy-2 namespace: apim spec: location: global failOpen: false timeout: 1000ms targetRef: # identifies the Gateway where the extension should be installed name: global-ext-lb2 kind: Gateway namespace: default
- 新しい APIM 拡張機能ポリシーを適用します。
kubectl apply -f apim-policy2.yaml
ファイルが適用されると、APIM Operator はバックグラウンドでネットワーキング リソースを作成します。
- APIM 拡張ポリシーのステータスを確認します。
kubectl -n apim get APIMExtensionPolicy
出力例を以下に示します。
NAME STATE ERRORMESSAGE global-ext-lb2-apim-policy-2 RUNNING
STATE
の値がRUNNING
であることを確認します。 - 変更がすべてのロードバランサ インスタンスに伝播されるまで 5 分待ってから、次のコマンドを使用して、新しい Gateway へのリクエストが失敗することを確認します。
curl -X POST http://GATEWAY_IP_ADDRESS/post -H "Host: HOSTNAME"
ここで
GATEWAY_IP_ADDRESS
は、 前の手順で取得した Gateway の IP アドレスです。HOST_NAME
は、Gateway のHTTPRoute
で定義されたホスト名です。
リクエストは失敗し、次のようなレスポンスが返されます。
{ "fault": { "faultstring": "Raising fault. Fault name : RF-insufficient-request-raise-fault", "detail": { "errorcode": "steps.raisefault.RaiseFault" } } }
これは、Apigee へのサービス拡張が有効であり、API キーとアクセス トークンの検証が適用されていることを意味します。デベロッパー アプリの作成、API キーの取得、キーを使用した新しい Gateway のテストに必要な手順については、Apigee サービス拡張機能をテストするをご覧ください。
API プロダクトを更新する
新しい APIM 拡張ポリシーを参照するように既存の API プロダクトを変更します。
apim
Namespace にapi-product-2.yaml
という名前の新しいファイルを作成します。- 次の内容を新しいファイルにコピーします。
# api-product-2.yaml apiVersion: apim.googleapis.com/v1alpha1 kind: APIProduct metadata: name: api-product-2 namespace: apim spec: name: api-product-2 approvalType: auto description: Http bin GET calls displayName: api-product-2 EnforcementRefs: - name: global-ext-lb1-apim-policy kind: APIMExtensionPolicy group: apim.googleapis.com namespace: apim - name: global-ext-lb2-apim-policy kind: APIMExtensionPolicy group: apim.googleapis.com namespace: apim attributes: - name: access value: private
- 新しい API プロダクト ファイルを適用します。
kubectl apply -f api-product-2.yaml
変更がクラスタ全体に適用されるまで、約 3 分ほどかかります。
この例では、yaml
のハイライト表示された部分に示すように、API プロダクト api-product-2
の EnforcementRefs
セクションが更新され、global-ext-lb1-apim-policy
と global-ext-lb2-apim-policy
の両方を参照するようにしています。
新しい API プロダクトを作成する
新しい API プロダクトを作成します。
apim
Namespace にapi-product-2.yaml
という名前の新しいファイルを作成します。- 次の内容を新しいファイルにコピーします。
# api-product-2.yaml apiVersion: apim.googleapis.com/v1alpha1 kind: APIProduct metadata: name: api-product-2 namespace: apim spec: name: api-product-2 approvalType: auto description: Http bin GET calls displayName: api-product-2 enforcementRefs: - name: global-ext-lb2-apim-policy kind: APIMExtensionPolicy group: apim.googleapis.com namespace: apim attributes: - name: access value: private
- 新しい API プロダクト ファイルを適用します。
kubectl apply -f api-product-2.yaml
変更がクラスタ全体に適用されるまで、約 3 分ほどかかります。
この例では、yaml
のハイライト表示された部分に示すように、新しい API プロダクト api-product-2
の EnforcementRefs
セクションが作成され、global-ext-lb2-apim-policy
を参照します。
新しい API オペレーション セットを作成する
新しい API オペレーション セットを作成します。
apim
Namespace にitem-set-post.yaml
という名前の新しいファイルを作成します。- 次の内容を新しいファイルにコピーします。
# item-set-post.yaml apiVersion: apim.googleapis.com/v1alpha1 kind: APIOperationSet metadata: name: item-set-post namespace: apim spec: apiProductRefs: - name: api-product-1 kind: APIProduct group: apim.googleapis.com namespace: apim quota: limit: 1 interval: 1 timeUnit: minute restOperations: - name: PostItems path: "/post" methods: - POST
- 新しい API オペレーション セット ファイルを適用します。
kubectl apply -f item-set-post.yaml
変更がクラスタ全体に適用されるまで、約 3 分ほどかかります。
この例では、ファイルのハイライト表示された部分に示すように、新しい API オペレーション セット item-set-post
の restOperations
値が作成され、/post
パスを参照します。
新しい Gateway 構成をテストする
新しい Gateway 構成をテストするには、新しい /post
パスに次のリクエストを送信します。
curl -X POST http://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME"
ここで
- GATEWAY_IP_ADDRESS は、 前の手順で取得した Gateway の IP アドレスです。
- HOST_NAME は、Gateway の
HTTPRoute
で定義されたホスト名です。
リクエストが成功すると、次のようなレスポンスが返されます。
{ "args": {}, "headers": { "Accept": "*/*", "Host": "apigee-apim-operator-test.apigee.net", "User-Agent": "curl/8.7.1", "X-Api-Key": "f0N6sXXXclGXXXe0oP5XXXdA20PjgrP2x8xXXh7z4XXXKiYt", "X-Cloud-Trace-Context": "bb3a768787099bda628781188bfb318b/15554891713516675739" }, "origin": "34.54.193.72", "url": "https://34.54.193.72/post" }
トラブルシューティング
APIM Operator で使用される API 管理ポリシーの更新と拡張中に問題が発生した場合は、APIM Operator のトラブルシューティングで一般的なエラーの解決策をご覧ください。
次のステップ
- Kubernetes 用の Apigee APIM Operator をアンインストールする方法を学習する。
- 詳しくは、Gateway のデプロイのオプションをご覧ください。