本主題說明如何啟用非 SNI 用戶端、HTTP 用戶端,以及兩者的組合,以便搭配 Apigee Hybrid 使用。
這項設定適用於 Apigee Ingress 閘道和 Anthos 服務網格。
如何設定非 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 spec: hostnames: - "*" ports: - number: 443 protocol: HTTPS tls: credentialName: CREDENTIAL_NAME mode: SIMPLE #optional minProtocolVersion: TLS_AUTO selector: app: APP_NAME enableNonSniClient: true
其中:
- ROUTE_NAME 是您為 CRD 指定的名稱。
- CREDENTIAL_NAME 是部署至叢集的 Kubernetes 密鑰名稱,其中包含虛擬主機的 TLS 憑證。您可以使用下列
kubectl指令找出憑證名稱:kubectl -n apigee get ApigeeRoutes -o=yaml | grep credentialName
- APP_NAME 識別輸入閘道類型:
apigee-ingressgateway,適用於 Apigee Ingress 閘道。istio-ingressgateway,瞭解如何使用 Anthos 服務網格。
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
- 將變更套用至「
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 用戶端支援服務。
- 建立 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必須設為萬用字元「*」。
- 開啟覆寫檔案,然後進行下一個步驟所述的變更。
- 針對每個環境群組,將 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
- 將變更套用至「
virtualhosts」:$APIGEECTL_HOME/apigeectl apply -f overrides.yaml --settings virtualhosts --env $ENVIRONMENT
啟用非 SNI 和 HTTP 用戶端支援
本節說明如何同時啟用非 SNI (通訊埠 443) 和 HTTP (通訊埠 80) 用戶端,以便搭配 Apigee Hybrid 使用。
- 建立 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
- 開啟覆寫檔案,然後進行下一個步驟所述的變更。
- 針對每個環境群組,將 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
- 將變更套用至「
virtualhosts」:$APIGEECTL_HOME/apigeectl apply -f overrides.yaml --settings virtualhosts --env $ENVIRONMENT