啟用非 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 是您給予自訂資源 (CR) 的名稱。
    • 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

    Helm

    helm upgrade ENV_GROUP apigee-virtualhost/ \
      --namespace apigee \
      --atomic \
      --set envgroup=ENV_GROUP_NAME \
      -f OVERRIDES_FILE.yaml
    

    apigeectl

    $APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE.yaml --settings virtualhosts --env $ENVIRONMENT

使用須知

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

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

  • 如果叢集有一個以上的環境群組,會發生什麼情況?如果虛擬主機共用相同的鍵/憑證組合,是否可行?

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

  • 為什麼要建立 ApigeeRoute 而非 Gateway?

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

  • 如何為 Apigee 設定非 SNI 用戶端?

    如果您的 Apigee 執行個體是透過 Google 負載平衡器公開,則負載平衡器會支援非 SNI 用戶端,如負載平衡器說明文件所述。否則,如果您透過內部 PSC 端點或 VPC 公開 Apigee 執行個體,則 Apigee 執行個體預設會支援非 SNI 用戶端。

啟用 HTTP 用戶端

本節說明 HTTP 用戶端與 Apigee hybrid 的支援情形。

  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

    Helm

    helm upgrade ENV_GROUP apigee-virtualhost/ \
      --namespace apigee \
      --atomic \
      --set envgroup=ENV_GROUP_NAME \
      -f OVERRIDES_FILE.yaml
    

    apigeectl

    $APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE.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

    Helm

    helm upgrade ENV_GROUP apigee-virtualhost/ \
      --namespace apigee \
      --atomic \
      --set envgroup=ENV_GROUP_NAME \
      -f OVERRIDES_FILE.yaml
    

    apigeectl

    $APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE.yaml --settings virtualhosts --env $ENVIRONMENT