將 Edge Microgateway 做為補充資訊 Proxy 部署

您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件
資訊

引言

本主題說明如何在 Kubernetes 叢集中以補充 Proxy 執行 Edge Microgateway。補充資訊部署有兩種做法:手動和自動插入。本主題將說明這兩種選項。

詳情請參閱「Kubernetes 上的 Edge Microgateway 簡介」。

事前準備

完成必備條件中所述的步驟。

部署測試服務

部署簡單的「hello」服務並驗證部署作業:

  1. 部署範例:

    kubectl apply -f samples/helloworld/helloworld.yaml --namespace=default
  2. 確認服務正在執行。您可能需要稍候片刻,直到 Pod 啟動至執行中狀態為止:

    kubectl get pods --namespace=default

    輸出內容範例:

    NAME                          READY     STATUS    RESTARTS   AGE
    helloworld-569d6565f9-lwrrv   1/1       Running   0          17m
    
  3. 刪除測試服務部署作業。啟用補充插入功能後,稍後您將重新安裝:

     kubectl delete -f samples/helloworld/helloworld.yaml --namespace=default

使用手動補充資訊插入功能

在兩種補充資訊插入選項中,手動補充資訊插入是更簡單、更直接的方法,且可透過單一 kubectl 指令完成。

設定 Edge Microgateway

下列指令會為您的 Apigee 機構設定 Edge Microgateway,並部署 Proxy edgemicro-auth

  1. 執行下列指令:

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

    在此情況下:

    • org:您的 Edge 機構名稱 (您必須是機構管理員)。

    • env:機構中的環境 (例如測試或正式版)。

    • username:與 Apigee 帳戶相關聯的電子郵件地址。

    範例

    edgemicro configure -o myorg -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 做為補充資訊

如要手動將 Edge Microgateway 插入服務 Pod 做為補充 Proxy,請執行下列指令:

kubectl apply -f <(edgemicroctl -org=your_org -env=your_env -key=your_key -sec=your_secret -conf=config_file_path -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 設定檔路徑。
  • service_deployment_file:服務的部署檔案路徑,該服務的 Pod 將取得隨附補充資訊服務。例如:samples/helloworld/helloworld.yaml

例如:

kubectl apply -f <(edgemicroctl -org=myorg -env=test-key=0e3ecea28a64099410594406b30e54439af5265f8 -sec=e3919250bee37c69cb2e5b41170b488e1c1d -conf=/Users/jdoe/.edgemicro/myorg-test-config.yaml -svc=samples/helloworld/helloworld.yaml)

測試設定

  1. 檢查服務部署作業:

    kubectl get services -n default

    輸出內容範例:

    NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
    helloworld   NodePort    10.15.254.163   <none>        8081:32401/TCP   56s
    kubernetes   ClusterIP   10.15.240.1     <none>        443/TCP          41m
    
  2. 您現在可以測試 Edge Microgateway 的補充資訊部署了。如需詳細步驟,請參閱測試 Proxy

使用自動補充資訊插入功能

在下列步驟中,您將為 Kubernetes 叢集設定自動補充資訊插入功能。這項設定可讓 Edge Microgateway 以補充 Proxy 的形式插入 Kubernetes 中。

安裝補充資訊插入器

  1. 安裝 ConfigMap 以啟用 Edge Microgateway 的補充資訊:

    kubectl apply -f install/kubernetes/edgemicro-sidecar-injector-configmap-release.yaml
  2. 執行下列指令碼來安裝 Webhook 服務。必須具有 Webhook 服務,才能自動插入補充資訊:

    ./install/kubernetes/webhook-create-signed-cert.sh \
        --service edgemicro-sidecar-injector \
        --namespace edgemicro-system \
        --secret sidecar-injector-certs
    
  3. 將 CA 組合加入 Webhook 安裝檔案。Kubernetes API-server 會使用這個檔案叫用 Webhook:

    cat install/kubernetes/edgemicro-sidecar-injector.yaml | \
         ./install/kubernetes/webhook-patch-ca-bundle.sh > \
         install/kubernetes/edgemicro-sidecar-injector-with-ca-bundle.yaml
    
  4. 安裝 Edge Microgateway 側車插入器 Webhook:

    kubectl apply -f install/kubernetes/edgemicro-sidecar-injector-with-ca-bundle.yaml
    

    輸出內容範例:

    service "edgemicro-sidecar-injector" created
    serviceaccount "edgemicro-sidecar-injector-service-account" created
    deployment "edgemicro-sidecar-injector" created
    mutatingwebhookconfiguration "edgemicro-sidecar-injector" created
    
  5. 確認 Edge Microgateway 補充資訊插入器 Webhook 正在執行:

    kubectl -n edgemicro-system get deployment -ledgemicro=sidecar-injector
    

    輸出內容範例:

    NAME                         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    edgemicro-sidecar-injector   1         1         1            1           12m
    
  6. 確認補充資訊插入 Pod 是否正在叢集內運作。命名空間 edgemicro-system 是安裝系統服務的位置,包括 Ingress 控制器、預設 HTTP 後端和補充資訊插入器:

    kubectl get pods -n edgemicro-system

    輸出內容範例:

    NAME                                            READY     STATUS    RESTARTS   AGE
    default-http-backend-55c6c69b88-gfnfd           1/1       Running   0          1h
    edgemicro-ingress-controller-64444469bf-jhn8b   1/1       Running   3          1h
    edgemicro-sidecar-injector-7d95698fbf-cq84q     1/1       Running   0          3m
    

設定及插入 Edge Microgateway

在下一個步驟中,您將執行互動式指令碼,以建立與 Kubernetes 命名空間相關聯的 Edge Microgateway 設定。然後,將設定插入 Kubernetes 叢集。

  1. 執行下列互動式指令碼,並提供要求的參數。這個指令會產生您在下一個步驟中會使用的設定檔。

    ./install/kubernetes/webhook-edgemicro-patch.sh

    如需輸入參數的相關資訊,請參閱參考資料

    輸入範例:

    1. Namespace to deploy application [default]:

      按下 Enter 鍵。

    2. Authenticate with OAuth Token ("n","Y") [N/y]

      輸入 n

    3. Apigee username [required]:

      輸入您的 Apigee 使用者名稱 (電子郵件地址)。例如 jdoe@google.com

    4. Apigee password [required]:

      輸入 Apigee 密碼。

    5. Apigee organization [required]:

      輸入您的 Apigee 機構名稱。

    6. Apigee environment [required]:

      輸入貴機構的環境名稱。例如「test」。

    7. Virtual Host [default]:

      按下 Enter 鍵。

    8. Is this Private Cloud ("n","y") [N/y]:

      如果使用的是公有雲,請輸入 n

    9. Edgemicro Key. Press Enter to generate:

      按下 Enter 鍵。

    10. Edgemicro Secret. Press Enter to generate:

      按下 Enter 鍵。

    11. Edgemicro org-env-config.yaml. Press Enter to generate:

      按下 Enter 鍵。

      輸出內容範例:

      current nodejs version is v6.9.1
      current edgemicro version is 2.5.25
      config initialized to /Users/jdoe/.edgemicro/default.yaml
      Configure for Cloud
      ******************************************************************************************
      Config file is Generated in /Users/jdoe/Work/GITHUB/microgateway_2.5.25_Darwin_x86_64/config directory.
      
      Please make changes as desired.
      *****************************************************************************************
      
    12. Do you agree to proceed("n","y") [N/y]:

      輸入 y

      輸出內容範例:

      Configuring Microgateway with
      
      key:daacf75dd660d160b801c9117fb1ec0935896615479e39dbbae88be81a2d84
      secret:a60fd57c1db9f3a06648173fb541cb9c59188d3b6037a76f490ebf7a6584b0
      config:~/.edgemicro/jdoe-test-config.yaml
      
      ********************************************************************************************************
      kubectl apply -f install/kubernetes/edgemicro-config-namespace-bundle.yaml
      ********************************************************************************************************
      
  2. 執行輸出內容最後一行提供的指令。這個 kubectl 指令會將產生的 Edge Microgateway 設定檔插入 Kubernetes:

    kubectl apply -f install/kubernetes/edgemicro-config-namespace-bundle.yaml
  3. 查看 Webhook 插入狀態。請注意,此功能目前尚未啟用:

    kubectl get namespace -L edgemicro-injection

    輸出內容範例:

    NAME               STATUS    AGE       EDGEMICRO-INJECTION
    default            Active    1d
    edgemicro-system   Active    1d
    kube-public        Active    1d
    kube-system        Active    1d
    
  4. 執行下列指令,以便為 Webhook 啟用 Webhook 插入功能:

    kubectl label namespace default edgemicro-injection=enabled
  5. 再次查看 Webhook 插入狀態。請注意,此功能現已啟用:

    kubectl get namespace -L edgemicro-injection

    輸出內容範例:

    NAME               STATUS    AGE       EDGEMICRO-INJECTION
    default            Active    1d        enabled
    edgemicro-system   Active    1d
    kube-public        Active    1d
    kube-system        Active    1d
    

部署測試服務

現在,請重新部署測試服務。Edge Microgateway 會自動插入服務的 Pod 中。

kubectl apply -f samples/helloworld/helloworld.yaml --namespace=default

確認已將 Edge Microgateway 和測試服務同時插入 Pod:

kubectl get pods --namespace=default --watch

輸出內容範例:

NAME                          READY     STATUS            RESTARTS   AGE
helloworld-6987878fc4-pkw8h   0/2       PodInitializing   0          12s
helloworld-6987878fc4-pkw8h   2/2       Running           0         26s

當狀態變更為 Running 時,按下 ctrl-c 即可結束指令。

您現在可以測試 Edge Microgateway 的自動補充資訊部署作業。如需詳細步驟,請參閱測試 Proxy

測試 Proxy

使用補充資訊部署功能時,系統會自動為您建立服務的 API Proxy。您不需要建立「Edge Microgateway-aware」Proxy。

取得 Ingress IP 位址

只要使用 Ingress 的外部 IP,您就可以從叢集外呼叫服務。

  1. 取得 Ingress 控制器的「外部」IP 位址:

    kubectl get ing -o wide

    輸出內容範例:

    NAME      HOSTS     ADDRESS        PORTS     AGE
    gateway   *         35.238.13.54   80        1m
    
  2. 複製 Ingress 的 EXTERNAL-IP 值,並將其匯出至變數。您可以手動設定變數:

    export GATEWAY_IP=external_ip

    例如:

    export GATEWAY_IP=35.238.249.62

    或者,使用以下指令設定:

    export GATEWAY_IP=$(kubectl describe ing gateway --namespace default | grep "Address" | cut -d ':' -f2 | tr -d "[:space:]")
  3. 確認變數是否已匯出。例如:

    echo $GATEWAY_IP

    輸出內容範例:

    35.238.249.62
    
  4. 呼叫服務:

    curl $GATEWAY_IP

    輸出內容:

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

    接下來,您將在 Edge 上設定 API 產品和開發人員應用程式,以解決缺少的授權錯誤,以便取得有效的 API 金鑰。當您將金鑰新增至 API 呼叫的授權標頭後,呼叫就會成功,您不會看到這個錯誤。

在 Apigee Edge 上建立元件

接著,在 Apigee Edge 上建立 API 產品和開發人員應用程式。

建立 API 產品

  1. 登入 Apigee Edge。
  2. 在側邊導覽選單中,依序選取「Publish」(發布) >「API Products」(API 產品)
  3. 按一下「+ API 產品」。顯示產品頁面。
  4. 按照下列方式填寫「產品」頁面。對於以下未提及的欄位,您可以使用預設值。除非另有指示,否則請勿儲存。

    名稱 hello-world-product
    顯示名稱 Edge Micro hello product
    環境 test

  5. 在「Path」部分中,按一下「+ 自訂資源」

  6. 新增路徑 /

  7. 再按一下「+ 自訂資源」,然後新增路徑 /**

  8. 在「API Proxy」部分,按一下「+ API Proxy」並新增 edgemicro-auth

  9. 儲存 API 產品。

可建立開發人員應用程式

  1. 選取側邊導覽選單的「應用程式」
  2. 按一下「+ 應用程式」。系統隨即會顯示「開發人員應用程式詳細資料」頁面。
  3. 按照下列方式填寫「開發人員應用程式」頁面。除非另有指示,否則請勿儲存。

    名稱 hello-world-app
    顯示名稱 Edge Micro hello app
    開發人員 從下拉式選單中選取開發人員。
  4. 在「Credentials」(憑證) 區段中,按一下「+ Product」(+ 產品) 並選取您剛剛建立的 hello-world-product

  5. 點按「儲存」

  6. 您會回到列出所有開發人員應用程式的頁面。

  7. 選取您剛建立的應用程式 hello-world-app

  8. 按一下「Consumer Key」旁邊的「Show」

  9. 複製用戶端金鑰的值。這個值是您將用來對 helloworld 服務進行安全的 API 呼叫 API 金鑰

  10. 請稍候片刻。您在 Apigee Edge 上所做的變更需要幾分鐘才能與叢集中部署的 Edge Microgateway 執行個體同步。

呼叫 API

將設定變更提取至微閘道後,您就可以執行下列測試。

  1. 不使用 API 金鑰呼叫 API。您將收到如下所示的錯誤訊息:

    curl $GATEWAY_IP

    預期輸出:

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

    如要成功呼叫 API,您需要 API 金鑰。

  2. 從您建立的開發人員應用程式取得用戶端金鑰。此值為呼叫測試 Proxy 所需的 API 金鑰:

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

    例如:

    curl -H "x-api-key:DeX2eEesYAdRJ5Gdbo77nT9uUfJZql19" $GATEWAY_IP

    輸出內容:

    Hello world
    

    部署至 Pod 的 helloworld 服務會傳回「Hello World」回應。先透過 Edge Microgateway 傳遞至該服務的呼叫,也就是執行驗證的位置。如果您看到「Hello World」回應,表示您已成功將 Edge Microgateway 做為 helloworld 服務 Pod 中的補充 Proxy 運作。

後續步驟

請參閱「工作」一節,瞭解如何新增自訂外掛程式、調度部署資源、變更設定,以及其他想執行的工作。