本主題說明如何啟用非 SNI 用戶端,以便與 Apigee hybrid 搭配使用。
如何設定非 SNI 用戶端
本節說明如何在 Apigee hybrid 中啟用非 SNI (伺服器名稱指示) 用戶端支援功能。非 SNI 用戶端會使用 443 連接埠,如果您想將混合式執行階段執行個體與 Google Cloud Load Balancing 整合,或用戶端不支援 SNI,就必須使用非 SNI 用戶端。- 建立 ApigeeRoute 自訂資源定義 (CRD)。請確認
enableNonSniClient
已設為true
:apiVersion: apigee.cloud.google.com/v1alpha1 kind: ApigeeRoute metadata: name: ROUTE_NAME namespace: APIGEE_NAMESPACE 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_NAMESPACE get ApigeeRoutes -o=yaml | grep credentialName
hostnames
必須設為萬用字元「*」。
- 開啟覆寫檔案,並進行下一個步驟所述的變更。
- 針對每個環境群組,請將 ApigeeRoute 名稱新增至
additionalGateways
屬性。例如:virtualhosts: - name: default sslCertPath: ./certs/fullchain.pem sslKeyPath: ./certs/privkey.pem additionalGateways: ["ROUTE_NAME"]
- 儲存 CRD 檔案。例如:
ApigeeRoute.yaml
- 將 CRD 套用至叢集:
kubectl apply -f ApigeeRoute.yaml -n APIGEE_NAMESPACE
- 將變更套用至
virtualhosts
。如果您已在 Shell 中設定 $ENV_GROUP 環境變數,則可在下列指令中使用該變數:helm upgrade $ENV_GROUP apigee-virtualhost/ \ --namespace APIGEE_NAMESPACE \ --atomic \ --set envgroup=$ENV_GROUP \ -f OVERRIDES_FILE.yaml
使用須知
- 如果叢集包含多個機構,會發生什麼情況?
由於 ingress 位於特定連接埠 (443) 的叢集層級,且 ApigeeRoute CRD 只能有一個金鑰/憑證組合,因此所有組織都必須共用相同的金鑰/憑證組合。
- 如果叢集有一個以上的環境群組,會發生什麼情況?如果虛擬主機共用相同的鍵/憑證組合,是否可行?
所有環境群組中的所有主機名稱都必須使用相同的金鑰/憑證組合。
- 為什麼要建立 ApigeeRoute 而非 Gateway?
ApigeeRoutes 可由 Apigee 驗證,但Gateway (Istio CRD) 則無法。從技術層面來說,即使是 Gateway 也能運作,但我們可以透過驗證 webhook 避免潛在的設定錯誤。
- 如何為 Apigee 設定非 SNI 用戶端?
如果您的 Apigee 執行個體是透過 Google 負載平衡器公開,則負載平衡器會支援非 SNI 用戶端,如負載平衡器說明文件所述。否則,如果您透過內部 PSC 端點或 VPC 公開 Apigee 執行個體,則 Apigee 執行個體預設會支援非 SNI 用戶端。