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

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

はじめに

このトピックでは、Kubernetes クラスタで Edge Microgateway をスタンドアロン サービスとして実行する方法について説明します。

詳細については、Edge Microgateway と Kubernetes の統合の概要をご覧ください。

始める前に

前提条件の手順を完了します。

Edge Microgateway の構成

次のコマンドは、Apigee 組織用に Edge Microgateway を構成し、プロキシ edgemicro-auth をデプロイします。

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

    edgemicro configure -o [org] -e [env] -u [username]

    ここで

    • org: Edge 組織名(組織管理者である必要があります)。

    • env: 組織の環境(テストや本番環境など)。

    • username: Apigee アカウントに関連付けられたメールアドレス。

    edgemicro configure -o docs -e test -u jdoe@example.com

    出力(以下の例を参照)はファイルに保存されます。

    $HOME/.edgemicro/org_name-env_name-config.yaml
    .

    current nodejs version is v6.9.1
    current edgemicro version is 2.5.25
    password:
    file doesn't exist, setting up
    Give me a minute or two... this can take a while...
    App edgemicro-auth deployed.
    checking org for existing KVM
    KVM already exists in your org
    configuring host edgemicroservices.apigee.net for region us-west1
    
    saving configuration information to: /Users/jdoe/.edgemicro/myorg-test-config.yaml
    
    vault info:
     -----BEGIN CERTIFICATE-----
    MIICpDCCAYwCCQCV9eBcO9a5WzANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQDDAls
    b2NhbGhvc3QwHhcNMagwODA5MDAzMDEzWhcNMTgwODEwMDAzMDEzWjAUMRIwEAYD
    VQQDDBlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDh
    nAHT7JHX/WvWHRFb8FLm53SPIDld5LyPOUfINdEyhSIEeXoOUKg4EPweJPVSC9Vm
    Hw4ZMtEqWJM/XsQWvLe8ylRJa5wgmzmFCqAsuzs9+rmc9KvJqjpOh2uRTUf7KKfT
    iXL2UEseprcI5g8zNyqKyEf/ecWIwz3AkkPAZebVTsrdDfIDHvkyhhvlAHZAB9kn
    GtqP3N8kOlv4KQto9Gr7GYUGUIDugt7gM1F611+RBS+fYRi32GUAq/UQDkhYL8cp
    oIJiF7UYkk2+9t9CdOCDuIUCvJioHJQd0xvDpkC9f6LvwjwnCwku+4F2Q63+av5I
    mJoZJQPvW5aP53Qkk+kHAgMBAAEwDKYJKoZIhvcNAQELBQADggEBALyUBolXUFN8
    1bf268nR+gS8MOFDTxO1bUz+bKuT/g3K1PuNUJTueT+0L1H2OiZUzazAqwn2sqzN
    lQuvLg6LjxjlNkqTJGiJvGDcYVq45dv7UyxAZxhqxTxhlQ+Yu5R9pbQnzujezHpH
    6gtCoCkSt/QqiJ3YsmsVu5is+HpIJepMt0CyMh5tK9j87hl46QhHklaVfQ3ycMVm
    /wNPR/pjizg1FDUeq4nj/7DBVbMf9net/BDaZLeSW1HJ1vcsCXIcSZfQd4QymGFn
    8ADrND7ydVjwO/s23soPDTy0g4yLIZvky2tpT8d7YahNqSv2n7sXsLxruzcyCoQ4
    w+e3Z3F7IKI=
    -----END CERTIFICATE-----
    
    The following credentials are required to start edge micro
      key: 1a3b2754c7f20614817b86e09895825ecc252d34df6c4be21ae24356f09e6eb4
      secret: 16ad2431de73f07f57a6d44048f08d93b63f783bf1f2ac4221182aa7289c7cef
    
    edgemicro configuration complete!
    

Edge Microgateway をサービスとしてデプロイします

  1. 次のコマンドを実行して、Edge Microgateway を Kubernetes クラスタにサービスとしてデプロイします。

    kubectl apply -f <(edgemicroctl -org=org -env=env -key=edgemicro-key
    -sec=edgemicro-secret -conf=file path of org-env-config.yaml)

    ここで

    • org - edgemicro configure コマンドで指定した Apigee 組織。
    • env - edgemicro configure コマンドで指定した環境。
    • edgemicro-key - edgemicro configure コマンドから返された鍵。
    • edgemicro-secret - edgemicro configure コマンドから返されたシークレット。
    • file path of org-env-config.yaml - edgemicro configure コマンドから返された Edge Micro 構成ファイルのパス。

    例:

    kubectl apply -f <(edgemicroctl -org=jdoe -env=test -key=989cce9d41cac94e72626d906562a1d76a19445f8901b3508858bb064988eccb -sec=ec92b793178de7b7e88e346f55a951e3fdae05e700e3ddea7d63977826379784 -conf=/Users/jdoe/.edgemicro/jdoe-test-config.yaml)

    出力例:

    config/myorg-test-config.yaml)
    service "edge-microgateway" created
    deployment "edge-microgateway" created
    secret "mgwsecret" created
    
  2. 次のコードをコピーしてターミナルに貼り付けます。このコードは、edge-microgateway サービスへの外部アクセスを許可するように Ingress コントローラを設定します。場合によっては、コマンドをターミナルに貼り付けた後に Enter キーを押す必要があります。

    cat <<EOF | kubectl apply -f -
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: edge-microgateway-ingress
      annotations:
        kubernetes.io/ingress.class: "nginx"
    spec:
      rules:
      - http:
          paths:
          - path: /
            backend:
              serviceName: edge-microgateway
              servicePort: 8000
    EOF
    

    成功すると、次の出力が表示されます。

    ingress "edge-microgateway-ingress" created
    

    これで、edge-microgateway サービスへの外部アクセスを許可するように Ingress コントローラが構成されました。

テストサービスをデプロイする

次の手順では、簡単なテストサービスをクラスタにデプロイします。Ingress コントローラは、クラスタ外部からサービスを呼び出すことができません。後で、ターゲットとしてサービスを呼び出すように Edge Microgateway を構成します。Ingress コントローラが edge-microgateway サービスへの外部アクセスを許可します。

  1. サンプルの helloworld サービスをデプロイします。Ingress はこのサービスを認識しないため、クラスタの外部からサービスを呼び出すことはできません。

    kubectl apply -f samples/helloworld/helloworld-service.yaml

    出力例:

    service "helloworld" created deployment "helloworld" created
    
  2. デプロイが成功したことを確認します。helloworld サービスには外部 IP はありません。次の手順では、サービスの内部 IP にアクセスするように Edge microgateway を構成します。

    kubectl get services -n default

    出力例:

    NAME                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
    edge-microgateway   NodePort    10.35.247.222   <none>        8000:32000/TCP   12m
    helloworld          NodePort    10.35.245.103   <none>        8081:30294/TCP   47s
    kubernetes          ClusterIP   10.35.240.1     <none>        443/TCP          47m
    

サービスのプロキシとして Edge Microgateway を構成する

helloworld サービスの内部 IP を取得し、「microgateway-aware」プロキシのターゲットとして追加します。「microgateway 対応」プロキシの作成は、Edge Microgateway の標準的な要件です。

また、Microgateway 対応プロキシについて知っておくべきこともご覧ください。

テストサービスの内部 IP を取得する

  1. helloworld サービスの内部クラスタ IP とポートを取得します。

    kubectl get services helloworld

    出力例:

    NAME         TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
    helloworld   NodePort   10.55.254.255   <none>        8081:30329/TCP   3m
    
  2. CLUSTER-IPPORT の値をコピーします。たとえば上記の例では、値は 10.55.254.2558081 です。システムによって値は異なります。

Edge に microgateway 対応プロキシを作成する

  1. Edge UI にログインします。
  2. 以前に Edge Microgateway を構成したときに指定した組織を選択します。
  3. サイド ナビゲーション メニューで [Develop] > [API Proxies] を選択します。
  4. [+ Proxy] をクリックします。[Build a Proxy] ウィザードが開きます。
  5. ウィザードの最初のページで、[Reverse proxy (mostcommon)] を選択します。
  6. [次へ] をクリックします。
  7. ウィザードの [詳細] ページで、次のように構成します。ウィザードに次に示すとおりに入力してください。プロキシ名に接頭辞 edgemicro_ があることを確認します。

    1. プロキシ名: edgemicro_hello
    2. プロキシのベースパス: /hello

    3. 既存の API: http://<cluster_ip>:<port>

      例: http://10.55.254.255:8081

  8. [次へ] をクリックします。

  9. ウィザードの [Security] ページで、[Pass through (none)] を選択します。

  10. [次へ] をクリックします。

  11. ウィザードの [Virtual Hosts] ページで、デフォルトを受け入れます。

  12. [次へ] をクリックします。

  13. ウィザードの [Build] ページで、プロキシ設定を確認します。test 環境が選択されていることを確認します。

  14. [Build and Deploy] をクリックします。

デベロッパーを作成する

デベロッパーは、既存のものをテスト用に使用するか、次のように操作して新しく作成できます。

  1. サイド ナビゲーション メニューで、[Publish] > [Developers] を選択します。
  2. [+ Developer] をクリックします。
  3. ダイアログに入力して、新しいデベロッパーを作成します。デベロッパー名とメールアドレスは自由に使用できます。

API プロダクトを作成する

以下で説明するように API プロダクトを作成します。プロダクトに、edgemicro-authedgemicro_hello の 2 つのプロキシを追加します。

プロダクト構成オプションの詳細については、API プロダクト構成について知っておくべきことをご覧ください。

  1. サイド ナビゲーション メニューで、[Publish] > [API Products] を選択します。
  2. [+ API Product] をクリックします。[プロダクトの詳細] ページが表示されます。
  3. [プロダクトの詳細] ページに次のように入力します。指示があるまで [保存] をクリックしないでください。

    名前 hello-world-product
    表示名 Edge Micro hello product
    環境 test
    アクセス Public
    キー承認タイプ Automatic
  4. ページの下半分で、[+ Custom Resource] をクリックします。

  5. リソースを / (単一のスラッシュ)に設定します。

  6. もう一度 [+ Custom Resource] を選択し、パス /** を追加します。

  7. ページの下部にある [+ API Proxy] をクリックします。

  8. edgemicro-auth という名前のプロキシを選択します。

  9. もう一度 [+ API Proxy] をクリックします。

  10. edgemicro_hello という名前の microgateway 対応プロキシを選択します。

  11. [保存] をクリックします。

デベロッパー アプリを作成する

  1. サイド ナビゲーション メニューで、[Publish] > [Apps] を選択します。
  2. [+ App] をクリックします。[Developer App Details] ページが表示されます。
  3. [Developer App] ページに、次のように入力します。指示があるまで保存しないでください。

    名前 hello-world-app
    表示名 Edge Micro hello app
    デベロッパー 作成したテスト デベロッパーを選択します。それ以外のデベロッパーを選択してもかまいません。
  4. [Credentials] セクションで、[+ Product] をクリックし、作成したプロダクト(hello-world-product.)を選択します。

  5. [保存] をクリックします。

  6. すべてのデベロッパー アプリの一覧が表示されるページに戻ります。

  7. 作成したアプリ(hello-world-app)を選択します。

  8. [Consumer Key] の横にある [Show] をクリックします。

  9. コンシューマ キーの値をコピーします。この値が、/hello への安全な API 呼び出しに使用する API キーです。

  10. 数分待って、Apigee Edge で行った変更がクラスタにデプロイされた Edge Microgateway のインスタンスと同期するまでに数分かかります。

プロキシをテストする

上り(内向き)IP アドレスを取得する

Ingress に外部 IP を使用すると、クラスタの外部から Edge Microgateway サービスを呼び出すことができます。

  1. Ingress コントローラの外部 IP アドレスを取得します。

    kubectl get ing -o wide

    出力例:

    NAME                        HOSTS     ADDRESS          PORTS     AGE
    edge-microgateway-ingress   *         35.238.249.62    80        37m
    
  2. Ingress の ADDRESS 値をコピーして、変数にエクスポートします。この変数は手動で設定できます。

    export GATEWAY_IP=external_ip

    例:

    export GATEWAY_IP=35.238.249.62

    または、次のコマンドを使用して自動に設定します。

    export GATEWAY_IP=$(kubectl describe ing edge-microgateway --namespace default | grep "Address" | cut -d ':' -f2 | tr -d "[:space:]")
  3. 変数がエクスポートされたことを確認します。例:

    echo $GATEWAY_IP

    出力例:

    35.238.249.62
    

API の呼び出し

構成の変更が microgateway に取り込まれたら、API の呼び出しを試すことができます。Ingress コントローラ IP(変数 GATEWAY_IP に保存した IP)を使用して API を呼び出します。この IP を使用すると、Kubernetes クラスタの外部からプロキシを呼び出すことができます。Ingress から Edge Microgateway へのマッピングは、クラスタに Edge Microgateway をデプロイしたときに作成されています。

  1. API キーなしで API を呼び出します。以下のようなエラー メッセージが表示されます。

    curl $GATEWAY_IP:80/hello/

    予想される出力:

    {"error":"missing_authorization","error_description":"Missing Authorization
    header"}
    

    このメッセージが表示された場合は、同期が完了するまで少しお待ちください。

    {"message":"no match found for /hello/","status":404}
    

    API 呼び出しを正常に行うには、API キーが必要です。

  2. 作成したデベロッパー アプリからコンシューマ キーを取得します。この値は、テストプロキシを呼び出すために必要な API キーです。

    curl -H 'x-api-key:your-edge-api-key' $GATEWAY_IP:80/hello/

    例:

    curl -H "x-api-key:DeX2eEesYAdRJ5Gdbo77nT9uUfJZql19" $GATEWAY_IP:80/hello/

    出力:

    Hello world
    

    「Hello World」というレスポンスが表示された場合は、Kubernetes クラスタ内の helloworld サービスを呼び出すように Edge Microgateway が正常に構成されています。

次のステップ

カスタム プラグインの追加、デプロイのスケーリング、構成の変更など、実行可能なタスクについては、タスクセクションをご覧ください。