本主題說明如何啟用非 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: apigee-ingressgateway enableNonSniClient: true
其中:
- route_name 是您給予自訂資源 (CR) 的名稱。
- 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
: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 的支援情形。
- 建立 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
: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 搭配使用。
- 建立 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
: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