本主題說明如何啟用非 SNI 用戶端、HTTP 用戶端,以及兩者的組合,以便搭配 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 spec: hostnames: - "*" ports: - number: 443 protocol: HTTPS tls: credentialName: credential_name mode: SIMPLE #optional minProtocolVersion: TLS_AUTO selector: app: istio-ingressgateway enableNonSniClient: true
其中:
- route_name 是您為 CRD 指定的名稱。
- credential_name 是部署至叢集的 Kubernetes 密鑰名稱,其中包含虛擬主機的 TLS 憑證。您可以使用下列
kubectl指令找出憑證名稱:kubectl -n apigee 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
- 將變更套用至「
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