このページは Apigee と Apigee ハイブリッドに適用されます。
Apigee Edge のドキュメントを表示する。
このページでは、APIMExtensionPolicy カスタム リソースを作成して、Kubernetes Gateway を通過するトラフィックに Apigee ポリシーを適用する方法について説明します。Apigee Operator for Kubernetes は APIMExtensionPolicy リソースを監視し、ゲートウェイを適切に構成します。
Apigee
Apigee を使用している場合は、次の手順に沿って操作します。
始める前に
このタスクを始める前に、次のことを行ってください。
- GKE クラスタに Workload Identity が構成されていることを確認します。必要な手順については、Workload Identity Federation for GKE を構成するをご覧ください。
- クラスタで GKE Gateway が構成され、動作していることを確認します。詳細については、Gateway のデプロイをご覧ください。
- Apigee Operator for Kubernetes をインストールします。インストール手順については、Apigee Operator for Kubernetes をインストールするをご覧ください。
APIMExtensionPolicy を作成する
このステップでは、APIMExtensionPolicy を作成し、クラスタで実行されている GKE Gateway に適用します。このポリシーは、Gateway とそれに関連する HTTPRoutes を通過するすべてのトラフィックを管理します。これは、現在の Apigee の環境レベルで flowhook と同様に機能します。
APIMExtensionPolicy を作成するには:
- 次の内容で
global-ext-lb1-apim-policy.yamlという名前のファイルを作成します。# global-ext-lb1-apim-policy.yaml apiVersion: apim.googleapis.com/v1 kind: APIMExtensionPolicy metadata: name: global-ext-lb1-apim-policy namespace: apim spec: apigeeEnv: ENV_NAME # optional location: global failOpen: false timeout: 1000ms defaultSecurityEnabled: true targetRef: # identifies the Gateway where the extension should be applied name: global-ext-lb1 kind: Gateway namespace: default ENV_NAMEは、インストール ステップの Apigee 環境を作成するで作成した Apigee 環境の名前に置き換えます。注:
generateEnv=TRUEフラグを使用して Apigee Operator for Kubernetes をインストールした場合、apigeeEnvフィールドは必要ありません。使用可能なすべての環境は、 Google Cloud コンソールの環境ページで確認できます。
- ポリシーを適用します。
kubectl -n apim apply -f global-ext-lb1-apim-policy.yamlポリシーが適用されると、Apigee Operator for Kubernetes がバックグラウンドでネットワーキング リソースを作成します。
- 次のコマンドを使用して、
APIMExtensionPolicyのステータスを確認します。kubectl -n apim get APIMExtensionPolicy出力は次のようになります。
STATEはRUNNINGです。NAME STATE ERRORMESSAGE global-ext-lb1-apim-policy RUNNING
ポリシーをテストする
次のコマンドを使用して、Gateway にリクエストを送信します。
- Gateway の IP アドレスを取得します。
export GATEWAY_IP=$(kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -n default -o=jsonpath='{.status.addresses[0].value}')echo $GATEWAY_IPGATEWAY_NAMEは、Gateway の名前(global-ext-lb1など)に置き換えます。 HTTPRouteで構成されたエンドポイントにリクエストを送信します。curl http://$GATEWAY_IP/get -H "Host: HOST_NAME"HOST_NAMEは、Gateway のHTTPRouteで定義されたホスト名(example.httpbin.comなど)に置き換えます。APIMExtensionPolicyリソースでdefaultSecurityEnabled: trueが設定されているため、リクエストは失敗します。これにより、API キーとアクセス トークンの検証が有効になります。次のようなレスポンスが表示されます。{"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}これは、Apigee 拡張機能ポリシーが有効であり、API キーの適用とアクセス トークンの検証が有効であることを示します。
次のステップ
- GKE Gateway にポリシーを追加する方法を確認する。
- Apigee Operator for Kubernetes をアンインストールする方法を確認する。
Apigee ハイブリッド
Apigee ハイブリッドを使用している場合は、次の手順に沿って操作します。
始める前に
この手順では、Apigee ハイブリッド用の Apigee Operator for Kubernetes をインストールするの手順に沿って Apigee Operator for Kubernetes をインストールしていることを前提としています。
TLS 証明書のシークレットを作成する
APIMExtensionPolicy には、環境グループのホスト名に関連付けられた base64 でエンコードされた公開証明書が必要です。この証明書は、Helm を使用して Apigee ハイブリッド環境をインストールするで作成したものです。apim 名前空間に Kubernetes Secret を作成して、この証明書をオペレーターに提供します。
- インストール時に作成したファイルから、base64 でエンコードされた証明書文字列を取得します。
cat $APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/certs/keystore_ENV_GROUP.pem.base64 - 次の内容で
secret-cert.yamlという名前のファイルを作成します。# secret-cert.yaml apiVersion: v1 kind: Secret metadata: name: apigee-conf namespace: apim data: ca.crt: BASE64_ENCODED_CERT_STRING BASE64_ENCODED_CERT_STRINGは、ステップ 1 のcatコマンドの出力に置き換えます。- シークレットをクラスタに適用します。
kubectl apply -f secret-cert.yaml
APIMExtensionPolicy を定義して適用する
APIMExtensionPolicy リソースを定義し、クラスタで動作している Istio Gateway に適用します。このポリシー拡張機能は、Gateway とそれに関連する HTTPRoutes によって管理されるトラフィックを遮断し、リクエストをバックエンド ターゲットに転送する前に Apigee ポリシーを適用します。
- 次の内容で
istio-gateway-apim-policy.yamlという名前のファイルを作成します。# istio-gateway-apim-policy.yaml apiVersion: apim.googleapis.com/v1 kind: APIMExtensionPolicy metadata: name: istio-gateway-apim-policy namespace: apim spec: apigeeEnv: ENV_NAME ingressCertSecret: apigee-conf apigeeAuthority: HOST_NAME apigeeIngressIP: INGRESS_IP_ADDRESS location: global failOpen: false timeout: 1000ms defaultSecurityEnabled: true targetRef: # identifies the Gateway where the extension should be applied group: gateway.networking.k8s.io kind: Gateway name: istio-gateway namespace: default - 次の変数を置き換えます。
ENV_NAME: サービス拡張機能が有効になっている状態で作成した Apigee ハイブリッド環境の名前(my-hybrid-envなど)。HOST_NAME: 環境グループに使用されるドメイン名(my-proxies.example.comなど)。INGRESS_IP_ADDRESS: Apigee ハイブリッド ランタイム Ingress の Ingress IP アドレス。この IP の取得方法については、Apigee Ingress を公開するをご覧ください。
- ポリシーをクラスタに適用します。
kubectl -n apim apply -f istio-gateway-apim-policy.yaml - リソースが適用されると、Apigee Operator for Kubernetes はゲートウェイ ネットワーキング リソースの構成を開始します。
APIMExtensionPolicyのステータスを確認します。kubectl -n apim get APIMExtensionPolicy STATEがRUNNINGになるまで待ちます。出力は次のようになります。NAME STATE ERRORMESSAGE istio-gateway-apim-policy RUNNING
ポリシーをテストする
前の手順で作成した APIMExtensionPolicy では、defaultSecurityEnabled が true に設定されています。これにより、このゲートウェイに一致するトラフィックに対して API キーと OAuth2 トークンの検証ポリシーが自動的に有効になります。これをテストするには、Istio Gateway の設定を確認するで Istio Gateway の設定を確認したときに構成したサンプル httpbin サービスに、認証されていないリクエストを送信します。
- Gateway の IP アドレスを取得します。
export GATEWAY_IP=$(kubectl get gateways.gateway.networking.k8s.io istio-gateway -n default -o=jsonpath='{.status.addresses[0].value}')echo $GATEWAY_IP - HTTPRoute で構成された
/getエンドポイントにリクエストを送信します。curl http://$GATEWAY_IP/get -H "Host: example.httpbin.com" -v defaultSecurityEnabled: trueには認証(有効な API キーなど)が必要なため、Apigee は認証エラーでリクエストを拒否する必要があります。レスポンスの例を以下に示します。{"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}この出力は、
APIMExtensionPolicyが有効であり、Apigee ポリシーが Istio Gateway によって適用されていることを確認します。
次のステップ
認証済みリクエストの API キーを取得するために、次に示す API プロダクト、デベロッパー、アプリを作成する方法を確認する。