啟用非 SNI 和 HTTP 用戶端

本主題說明如何啟用非 SNI 用戶端、HTTP 用戶端,以及兩者的組合,以便搭配 Apigee Hybrid 使用。

如何設定非 SNI 用戶端

本節說明如何在 Apigee Hybrid 中啟用對非 SNI (伺服器名稱指示) 用戶端的支援。非 SNI 用戶端使用連接埠 443,如果您想將混合式執行階段例項與 Google Cloud Load Balancing 整合,或用於不支援 SNI 的用戶端,則必須使用非 SNI 用戶端。
  1. 建立 ApigeeRoute 自訂資源定義 (CRD)。請務必將 enableNonSniClient 設為 true
    apiVersion: apigee.cloud.google.com/v1alpha1
    kind: ApigeeRoute
    metadata:
      name: route_name
      namespace: apigee
    spec:
      hostnames:
      - "*"
      ports:
      - number: 443
        protocol: HTTPS
        tls:
          credentialName: credential_name
          mode: SIMPLE
          #optional
          minProtocolVersion: TLS_AUTO
      selector:
        app: apigee-ingressgateway
      enableNonSniClient: true

    其中:

    • route_name 是您為 CRD 指定的名稱。
    • credential_name 是部署至叢集的 Kubernetes 密鑰名稱,其中包含虛擬主機的 TLS 憑證。您可以使用下列 kubectl 指令找出憑證名稱:
      kubectl -n apigee get ApigeeRoutes -o=yaml | grep credentialName
    • hostnames 必須設為萬用字元「*」。
  2. 開啟覆寫檔案,然後進行下一個步驟所述的變更。
  3. 針對每個環境群組,將 ApigeeRoute 名稱新增至 additionalGateways 屬性。例如:
    virtualhosts:
      - name: default
        sslCertPath: ./certs/fullchain.pem
        sslKeyPath: ./certs/privkey.pem
        additionalGateways: ["route_name"]
  4. 儲存 CRD 檔案。例如:ApigeeRoute.yaml
  5. 將 CRD 套用至叢集:
    kubectl apply -f ApigeeRoute.yaml -n apigee
  6. 將變更套用至「virtualhosts」:
    $APIGEECTL_HOME/apigeectl apply -f overrides.yaml --settings virtualhosts --env $ENVIRONMENT

使用須知

  • 如果叢集有多個機構,會發生什麼情況?

    由於特定連接埠 (443) 的 Ingress 位於叢集層級,且 ApigeeRoute CRD 只能有一組金鑰/憑證,因此所有機構都必須共用同一組金鑰/憑證。

  • 如果叢集有多個環境群組,如果虛擬主機共用同一組金鑰/憑證,是否會正常運作?

    所有環境群組中的所有主機名稱都必須使用相同的金鑰/憑證組合。

  • 為什麼要建立 ApigeeRoute,而不是 Gateway?

    Apigee 可以驗證 ApigeeRoutes,但無法驗證 Gateway (Istio CRD)。從技術上來說,即使是 Gateway 也能運作,但我們可以透過驗證 Webhook 避免潛在的設定錯誤。

啟用 HTTP 用戶端

本節說明與 Apigee Hybrid 搭配使用的 HTTP 用戶端支援服務。

  1. 建立 ApigeeRoute 自訂資源定義 (CRD)。例如:
    apiVersion: apigee.cloud.google.com/v1alpha1
    kind: ApigeeRoute
    metadata:
      name: route_name
      namespace: apigee
    spec:
      hostnames:
      - "*"
      ports:
      - number: 80
        protocol: HTTP
      selector:
        app: istio-ingressgateway
      enableNonSniClient: true

    其中:

    • route_name 是您為 CRD 指定的名稱。
    • hostnames 必須設為萬用字元「*」。
  2. 開啟覆寫檔案,然後進行下一個步驟所述的變更。
  3. 針對每個環境群組,將 ApigeeRoute 名稱新增至 additionalGateways 屬性。例如:
    virtualhosts:
      - name: default
        sslCertPath: ./certs/fullchain.pem
        sslKeyPath: ./certs/privkey.pem
        additionalGateways: ["route_name"]
  4. 儲存 CRD 檔案。例如:ApigeeRoute.yaml
  5. 將 CRD 套用至叢集:
    kubectl apply -f ApigeeRoute.yaml -n apigee
  6. 將變更套用至 virtualhosts
    $APIGEECTL_HOME/apigeectl apply -f overrides.yaml --settings virtualhosts --env $ENVIRONMENT

啟用非 SNI 和 HTTP 用戶端支援

本節說明如何同時啟用非 SNI (通訊埠 443) 和 HTTP (通訊埠 80) 用戶端,以便搭配 Apigee Hybrid 使用。

  1. 建立 ApigeeRoute 自訂資源定義 (CRD)。例如:
    apiVersion: apigee.cloud.google.com/v1alpha1
    kind: ApigeeRoute
    metadata:
      name: route_name
      namespace: apigee
    spec:
      hostnames:
      - "*"
      ports:
      - number: 443
        protocol: HTTPS
        tls:
          credentialName: credential_name
          mode: SIMPLE
          #optional
          minProtocolVersion: TLS_AUTO
      - number: 80
        protocol: HTTP
      selector:
        app: istio-ingressgateway
      enableNonSniClient: true

    其中:

    • route_name 是您為 CRD 指定的名稱。
    • hostname 必須設為萬用字元「*」。
    • credential_name 是部署至叢集的 Kubernetes 密鑰名稱,其中包含虛擬主機的 TLS 憑證。您可以使用下列 kubectl 指令找出憑證名稱:
      kubectl -n apigee get ApigeeRoutes -o=yaml | grep credentialName
  2. 開啟覆寫檔案,然後進行下一個步驟所述的變更。
  3. 針對每個環境群組,將 ApigeeRoute 名稱新增至 additionalGateways 屬性。例如:
    virtualhosts:
      - name: default
        sslCertPath: ./certs/fullchain.pem
        sslKeyPath: ./certs/privkey.pem
        additionalGateways: ["route_name"]
  4. 儲存 CRD 檔案。例如:ApigeeRoute.yaml
  5. 將 CRD 套用至叢集:
    kubectl apply -f ApigeeRoute.yaml -n apigee
  6. 將變更套用至 virtualhosts
    $APIGEECTL_HOME/apigeectl apply -f overrides.yaml --settings virtualhosts --env $ENVIRONMENT