Kubernetes 統合タスク

現在、Apigee Edge のドキュメントを表示しています。
Apigee X のドキュメントをご確認ください
情報

カスタム プラグインの追加

カスタム プラグインを作成することで、Microgateway に新しい機能を追加できます。カスタム プラグインを使用すると、Microgateway を通過するリクエストやレスポンスをプログラムで操作できます。

このセクションでは、プラグインをパッケージ化して、Kubernetes クラスタで実行されている Edge Microgateway インスタンスにデプロイする方法について説明します。

このセクションの残りの部分は、標準の Edge Microgateway 設定のためのプラグインの作成と構成に精通していることを前提としています。そうでない場合は、カスタム プラグインを開発するをご覧ください。

プラグインをパッケージ化する

カスタム プラグインをパッケージ化する手順は次のとおりです。

  1. シンプルなプラグインを作成するの手順に沿ってプラグインを作成し、テストします。

  2. プラグインのコードを適切なディレクトリ構造に配置します。プラグイン ディレクトリは、設定された構造に従う必要があります。次の例は、従う必要がある構造を示しています。ここで、response-uppercaserequest-headers は、カスタム プラグイン コードを含むフォルダの名前です(これらは単なる例で、フォルダ名は異なる場合があります)。

    plugin
      |
      |-- plugins
        |
        |- response-uppercase
        |     |- index.js
        |     |- package.json
        |- request-headers
        |     | - index.js
              | - package.json
    
  3. cdplugin フォルダに移動します。

  4. plugin フォルダで、plugins フォルダ全体を zip 圧縮します。

    zip -r plugins.zip plugins/

Docker イメージを作成する

  1. zip ファイルと同じディレクトリに、Dockerfile という名前の新しいファイルを作成します。
  2. 次のコードを 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"]
    
  3. プラグインを含む新しい Edge Microgateway Docker イメージを作成し、そのイメージを Docker レジストリに push します。docker.iogcr.io など、任意のレジストリを使用できます。

    docker build -t edgemicroplugins .
    docker tag edgemicroplugins container-registry/your-project/edgemicroplugins
    docker push container-registry/your-project/edgemicroplugins
    

    例:

    docker build -t edgemicroplugins .
    docker tag edgemicroplugins gcr.io/my-project/edgemicroplugins
    docker push   gcr.io/my-project/edgemicroplugins
    

Edge Microgateway 構成を更新する

  1. 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 は、Container Registry に push したプラグイン コードを使用して新しいイメージを pull し、新しく作成された Pod に使用します。

Edge Microgateway をサービスとしてデプロイした場合

edgemicroctl コマンドを使用して、更新された Edge Microgateway 構成を挿入します。

  1. 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.iodocker.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)
  2. プラグインをテストします。API を呼び出して、期待どおりに動作するかどうかを確認します。たとえば、「response topcase」プラグインの場合、次のようにレスポンス テキストがすべて大文字に変換されます。

    curl $GATEWAY_IP -H 'x-api-key:3eqeedJRFLlCshwWBiXq4xKFoH1Se3xR'

    出力:

    HELLO WORLD
    
新しい構成を手動で挿入する

手動挿入は、コマンドラインから新しい構成を挿入する簡単な方法です。

  1. 次のコマンドを実行します。

    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.iodocker.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)
  2. プラグインをテストします。サービス API を呼び出して、期待される動作が実現するかどうかを確認します。たとえば、「response heapcase」プラグインの場合、次のようにレスポンス テキストはすべて大文字に変換されます。

    curl $GATEWAY_IP -H 'x-api-key:3eqeedJRFLlCshwWBiXq4xKFoH1Se3xR'

    出力:

    HELLO WORLD
    

Edge Microgateway 構成の変更

Edge Microgateway 構成の変更が必要になることがあります。たとえば、Edge Microgateway に新しいプラグインを追加したり、構成パラメータを変更したりできます。このセクションでは、Kubernetes で実行されている Edge Microgateway に構成を変更して適用する方法について説明します。

  1. 次のように構成ファイル 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_CONFIG
    
  2. base64 でエンコードされた EDGEMICRO_ORGEDGEMICRO_ENVEDGEMICRO_KEYEDGEMICRO_SECRET の値を指定します。

    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'
    
  3. 組織と環境に合わせて Edge Microgateway 構成ファイルを変更します。

    $HOME/.edgemicro/your_org-your_env-config.yaml
  4. 構成ファイルの内容を 2 倍の Base64 エンコードします。

    cat $HOME/.edgemicro/org-env-config.yaml | base64 | tr -d '\n' | base64  | tr -d '\n'
  5. サービスが実行されている Namespace の Kubernetes に変更を適用します。

    kubectl apply -f secret.yaml -n 

これらの新しい変更は、既存の microgateway Pod によって自動的に取得されませんが、新しい Pod は変更を取得します。既存の Pod を削除して、変更を反映する新しい Pod を Deployment で作成できます。

サービスの例

次の例は、新しいリソースでサービスのデプロイを更新する方法を示しています。

  1. 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          1d
    
  2. edge-microgateway Pod を削除します。

    kubectl delete pod edge-microgateway-57ccc7776b-g7nrg

    出力例:

    pod "edge-microgateway-57ccc7776b-g7nrg" deleted
    
  3. Pod を再度取得します。新しい 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 のスケーリング原則を使用して Deployment をスケーリングする方法について説明します。

サービス デプロイのスケーリング

  1. Deployment を確認します。

    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 つのレプリカがデプロイされていることがわかります。

  2. Deployment のレプリカ数を、1 から任意の数のレプリカまでスケールします。この例では、edge-microgateway サービスがスケーリングされます。

    kubectl scale deployment edge-microgateway --replicas=2
  3. (省略可)自動スケーリングを使用する場合は、次のコマンドを使用します。

    kubectl autoscale deployment edge-microgateway --cpu-percent=50 --min=1 --max=10
  4. デプロイをチェックして、スケーリングが有効になっていることを確認します。

    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 つのレプリカを含むように変更されました。

  5. 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 構成に名前空間を使用する

Edge Microgateway サービスの複数のインスタンスを Kubernetes クラスタにデプロイして構成できます。このユースケースでは、各 microgateway インスタンスを独自のプラグインとパラメータのセットで構成できます。例:

  • Edge Microgateway サービス A では、Spike Arrest プラグインのみが必要です。
  • Edge Microgateway サービス B には割り当てと oauth プラグインが必要ですが、Spike Arrest は必要ありません。

このユースケースに対処するには、Kubernetes の Namespace を使用します。たとえば、Edge Microgateway サービス A を名前空間 foo にデプロイし、Edge Microgateway サービス B を名前空間 bar にデプロイできます。

次の例では、-n オプションを使用して、組織 OrgA で構成された Edge Microgateway が、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