Apigee Edge のドキュメントを表示しています。
Apigee X のドキュメントに移動します。 情報
カスタム プラグインの追加
カスタム プラグインを作成することで、Microgateway に新しい機能を追加できます。カスタム プラグインを使用すると、Microgateway を通過するリクエストやレスポンスをプログラムで操作できます。
このセクションでは、プラグインをパッケージ化して、Kubernetes クラスタで実行されている Edge Microgateway インスタンスにデプロイする方法について説明します。
このセクションの残りの部分は、標準の Edge Microgateway 設定用プラグインの作成と構成について読者が精通していることを前提としています。そうでない場合は、カスタム プラグインを開発するをご覧ください。
プラグインをパッケージ化する
カスタム プラグインをパッケージ化するには、次の手順を実施します。
単純なプラグインを作成するの説明に従ってプラグインを作成し、テストします。
プラグイン コードを適切なディレクトリ構造に配置します。プラグインのディレクトリは、決められた構造に従う必要があります。その構造を次の例に示します。ここで
response-uppercaseとrequest-headersは、カスタム プラグイン コードを含むフォルダの名前です(この名前は単なる例で、実際のフォルダ名に異なる名前を付けても構いません)。plugin | |-- plugins | |- response-uppercase | |- index.js | |- package.json |- request-headers | | - index.js | - package.jsoncdを実行して、pluginディレクトリに移動します。pluginフォルダで、pluginsフォルダ全体を zip 圧縮します。zip -r plugins.zip plugins/
Docker イメージを作成する
- zip ファイルと同じディレクトリに、
Dockerfileという新しいファイルを作成します。 次のコードを
Dockerfileに追加し、ファイルを保存します。FROM gcr.io/apigee-microgateway/edgemicro:latest RUN apt-get install unzip COPY plugins.zip /opt/apigee/ RUN chown apigee:apigee /opt/apigee/plugins.zip RUN su - apigee -c "unzip /opt/apigee/plugins.zip -d /opt/apigee" EXPOSE 8000 EXPOSE 8443 ENTRYPOINT ["entrypoint"]プラグインを含む新しい Edge Microgateway Docker イメージを作成し、そのイメージを Docker レジストリに push します。
docker.ioやgcr.ioなど、任意のレジストリを使用できます。docker build -t edgemicroplugins .docker tag edgemicroplugins container-registry/your-project/edgemicropluginsdocker push container-registry/your-project/edgemicroplugins次に例を示します。
docker build -t edgemicroplugins .docker tag edgemicroplugins gcr.io/my-project/edgemicropluginsdocker push gcr.io/my-project/edgemicroplugins
Edge Microgateway の構成を更新する
Edge Microgateway 構成ファイルにプラグインを追加します。構成ファイルは次の場所にあります。
$HOME/.edgemicro/org-env-config.yaml
次に例を示します。
$HOME/.edgemicro/myorg-test-config.yaml
次のサンプル構成では、カスタム プラグイン response-uppercase が追加されています。oauth プラグインはデフォルトで存在していました。
edgemicro:
...
plugins:
sequence:
- oauth
- response-uppercase
Kubernetes クラスタを更新する
最後のステップは、構成の変更を Kubernetes クラスタに適用することです。Kubernetes は、コンテナ レジストリに push したプラグイン コードを含む新しいイメージを pull し、新しく作成された Pod に使用します。
Edge Microgateway をサービスとしてデプロイした場合
edgemicroctl コマンドを使用して、更新された Edge Microgateway 構成を挿入します。
新しいイメージで Edge Microgateway デプロイを更新します。次に例を示します。
kubectl apply -f <(edgemicroctl -org=your_organization -env=your_environment -key=configuration_key -sec=configuration_secret -conf=config_file_path -img=container-registry/your_project_name/image_name:latest)
ここで
your_organization-edgemicro configureコマンドで指定した Apigee 組織。your_environment-edgemicro configureコマンドで指定した環境。configuration_key-edgemicro configureコマンドから返された鍵。configuration_secret-edgemicro configureコマンドから返されたシークレット。config_file_path-edgemicro configureコマンドから返された Edge Micro 構成ファイルへのパス。container-registry- イメージを push した Docker レジストリ。たとえば、gcr.ioやdocker.ioです。your_project_name- Docker イメージを push した Docker リポジトリのプロジェクト名。image_name- push した Docker イメージの名前。
例:
kubectl apply -f <(edgemicroctl -org=jdoe -env=test -key=f2d2eaa52b758493d00cec656e574ac947bee1d701c5c5f3295e5eaa39a3b -sec=0c38cda3fac6c59152f15657052ba1728f8003c1a763cf08da2a -conf=/Users/jdoe/.edgemicro/apigeesearch-test-config.yaml -img=gcr.io/jdoe-project/edgemicroplugins:latest)
プラグインをテストします。API を呼び出して、想定どおりの動作が得られるかどうかを確認します。たとえば、「response uppercase」プラグインの場合、レスポンス テキストは次のようにすべて大文字に変換されます。
curl $GATEWAY_IP -H 'x-api-key:3eqeedJRFLlCshwWBiXq4xKFoH1Se3xR'
出力:
HELLO WORLD
新しい構成を手動で挿入する
手動挿入は、コマンドラインから新しい構成を挿入する簡単な方法です。
次のコマンドを実行します。
kubectl apply -f <(edgemicroctl -org=your_org -env=your_env -key=your_key -sec=your_secret -conf=config_file_path -img=container-registry/your_project_name/image_name:latest -svc=service_deployment_file)
ここで
your_org-edgemicro configureコマンドで指定した Apigee 組織。your_env-edgemicro configureコマンドで指定した環境。your_key-edgemicro configureコマンドから返された鍵。your_secret-edgemicro configureコマンドから返されたシークレット。config_file_path-edgemicro configureコマンドから返された Edge Micro 構成ファイルへのパス。container-registry- イメージを push した Docker レジストリ。たとえば、gcr.ioやdocker.ioです。your_project_name- Docker イメージを push した Docker リポジトリのプロジェクト名。image_name- push した Docker イメージの名前。service_deployment_file- プラグインを適用するサービスのデプロイ ファイルのパス。例:samples/helloworld/helloworld.yaml。
次に例を示します。
kubectl apply -f <(edgemicroctl -org=myorg -env=test-key=0e3ecea28a64099410594406b30e54439af5265f8 -sec=e3919250bee37c69cb2e5b41170b488e1c1d -conf=/Users/jdoe/.edgemicro/myorg-test-config.yaml -img=gcr.io/myproject/edgemicroplugins:latest -svc=samples/helloworld/helloworld.yaml)
プラグインをテストします。サービス API を呼び出して、期待どおりの動作が得られるかどうかを確認します。たとえば、「response uppercase」プラグインの場合、レスポンス テキストは次のようにすべて大文字に変換されます。
curl $GATEWAY_IP -H 'x-api-key:3eqeedJRFLlCshwWBiXq4xKFoH1Se3xR'
出力:
HELLO WORLD
Edge Microgateway の構成を変更する
場合によっては、Edge Microgateway の構成を変更する必要があります。たとえば、Edge Microgateway に新しいプラグインを追加したり、構成パラメータを変更したりすることが考えられます。このセクションでは、Kubernetes で実行されている Edge Microgateway に対して構成の変更を行い、適用する方法について説明します。
次のように構成ファイル
secret.yamlを作成します。apiVersion: v1 kind: Secret metadata: name: mgwsecret type: Opaque data: mgorg: EDGEMICRO_ORG mgenv: EDGEMICRO_ENV mgkey: EDGEMICRO_KEY mgsecret: EDGEMICRO_SECRET mgconfig: EDGEMICRO_CONFIGEDGEMICRO_ORG、EDGEMICRO_ENV、EDGEMICRO_KEY、EDGEMICRO_SECRETの Base64 エンコード値を指定します。echo -n "your-org" | base64 | tr -d '\n'echo -n "your-org-env" | base64 | tr -d '\n'echo -n "your-mg-key" | base64 | tr -d '\n'echo -n "your-mg-secret" | base64 | tr -d '\n'組織と環境の Edge Microgateway 構成ファイルに変更を加えます。
$HOME/.edgemicro/your_org-your_env-config.yaml
構成ファイルの内容を 2 回 Base64 エンコードします。
cat $HOME/.edgemicro/org-env-config.yaml | base64 | tr -d '\n' | base64 | tr -d '\n'
サービスが実行されている Namespace で Kubernetes に変更を適用します。
kubectl apply -f secret.yaml -n
これらの新しい変更は、既存のマイクロゲートウェイ Pod によって自動的に取得されませんが、新しい Pod は変更を取得します。既存の Pod を削除すると、デプロイで変更を反映した新しい Pod が作成されます。
サービスの例
次の例は、新しい
Pod を取得します。
kubectl get pods
出力例:
NAME READY STATUS RESTARTS AGE edge-microgateway-57ccc7776b-g7nrg 1/1 Running 0 19h helloworld-6987878fc4-cltc2 1/1 Running 0 1dedge-microgatewayPod を削除します。kubectl delete pod edge-microgateway-57ccc7776b-g7nrg
出力例:
pod "edge-microgateway-57ccc7776b-g7nrg" deletedPod を再度取得します。新しい Pod が起動し、構成の変更を取得します。
kubectl get pods
出力例:
NAME READY STATUS RESTARTS AGE edge-microgateway-57ccc7776b-7f6tc 1/1 Running 0 5s helloworld-6987878fc4-cltc2 1/1 Running 0 1d
デプロイをスケーリングする
このセクションでは、Kubernetes のスケーリング原則を使用してデプロイをスケーリングする方法について説明します。
サービス デプロイのスケーリング
デプロイを確認します。
kubectl get deployments
出力例:
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE edge-microgateway 1 1 1 1 18h helloworld 1 1 1 1 1d出力には、1 つのレプリカがデプロイされていることが示されます。
デプロイを 1 から必要な数のレプリカにスケーリングします。この例では、
edge-microgatewayサービスがスケーリングされます。kubectl scale deployment edge-microgateway --replicas=2
(省略可)自動スケーリングを使用する場合は、次のコマンドを使用します。
kubectl autoscale deployment edge-microgateway --cpu-percent=50 --min=1 --max=10
デプロイを確認して、スケーリングが有効になっていることを確認します。
kubectl get deployments
出力例:
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE edge-microgateway 2 2 2 2 18h helloworld 1 1 1 1 1d状態が変更され、2 つのレプリカが含まれるようになりました。
Pod を確認します。
kubectl get pods
出力例:
NAME READY STATUS RESTARTS AGE edge-microgateway-57ccc7776b-g7nrg 1/1 Running 0 18h edge-microgateway-57ccc7776b-rvfz4 1/1 Running 0 41s helloworld-6987878fc4-cltc2 1/1 Running 0 1d出力には、両方のレプリカが実行状態であることが示されます。
複数の Edge Microgateway 構成に Namespace を使用する
Edge Microgateway サービスの複数のインスタンスを Kubernetes クラスタにデプロイして構成できます。このユースケースでは、独自のプラグインとパラメータのセットを使用して各 Microgateway インスタンスを構成できます。次に例を示します。
- Edge Microgateway Service A に必要なのは Spike Arrest プラグインのみです。
- Edge Microgateway Service B には、割り当てプラグインと OAuth プラグインが必要ですが、スパイク制御は必要ありません。
このユースケースに対処するには、Kubernetes の Namespace を使用します。たとえば、Edge Microgateway Service A を Namespace foo に、Edge Microgateway Service B を Namespace bar にデプロイできます。
次の例では、組織 OrgA で構成された Edge Microgateway が、-n オプションを使用して Namespace foo にサービスとしてデプロイされます。
kubectl apply -f <(edgemicroctl -org=myorgA -env=test-key=0e3ecea28a64099410594406b30e54439af5265f8 -sec=e3919250bee37c69cb2e5b41170b488e1c1d -conf=/Users/joed/.edgemicro/orgA-test-config.yaml -svc=samples/helloworld/helloworld.yaml) -n foo
同様に、次の例では、組織 OrgB で構成された Edge Microgateway が、-n オプションを使用して Namespace bar にサービスとしてデプロイされます。
kubectl apply -f <(edgemicroctl -org=myorgB -env=test-key=0e3ecea28a64099410594406b30e54439af5265f8 -sec=e3919250bee37c69cb2e5b41170b488e1c1d -conf=/Users/joed/.edgemicro/orgB-test-config.yaml -svc=samples/helloworld/helloworld.yaml) -n bar