使用外部負載平衡器公開入口閘道
總覽
您可以使用 Cloud Service Mesh 部署及管理服務網格中的入口網關。您可以進一步使用 Cloud Service Mesh 為叢集設定負載平衡,方法是使用外部負載平衡器 (叢集外的實體或軟體負載平衡器) 將流量傳送至輸入網關。
本頁面說明如何使用 Cloud Service Mesh 設定外部負載平衡器。或者,您也可以設定含有多個後端設定的入口。
事前準備
如要完成本文件中的步驟,您需要下列資源:
- 已安裝 Cloud Service Mesh 的 Kubernetes 叢集。 
- 外部負載平衡器,可存取叢集執行所在的節點。您可以使用負載平衡器的外部 IP 位址,將這個外部負載平衡器設定為叢集入口閘道的前端。 
設定環境
請在可存取您要使用的叢集的工作站上執行下列指令。請確認 kubectl 工具已設定為使用叢集專屬的叢集背景資訊。
- 設定環境變數。 - export ASM_INGRESSGATEWAY_NAMESPACE=asm-ingressgateway export ASM_INGRESSGATEWAY_DEPLOYMENT_NAME=asm-ingressgateway export ASM_INGRESSGATEWAY_SERVICE_NAME=asm-ingressgateway export ASM_INGRESSGATEWAY_NODE_LABEL=asm-ingressgateway
- 設定外部負載平衡器的 - IP address。- export EXTERNAL_LB_IP_ADDRESS=EXTERNAL_LB_IP_ADDRESS
- [\Optional/] 為輸入閘道節點加上標籤。這可確保閘道會部署至叢集中的特定節點。 - kubectl label nodes INGRESSGATEWAY_NODE_IP ${ASM_INGRESSGATEWAY_NODE_LABEL}=- INGRESSGATEWAY_NODE_IP:Kubernetes 叢集中代管輸入閘道的節點。針對您擁有的所有入口節點執行此 kubectl指令。
 
- INGRESSGATEWAY_NODE_IP:Kubernetes 叢集中代管輸入閘道的節點。針對您擁有的所有入口節點執行此 
建立入口閘道
完成本節的操作說明前,您必須先決定控制平面實作方式。請按照「找出控制層實作項目」一文中的操作說明進行。
- 建立命名空間。這個命名空間用於部署入口網關。 - kubectl create namespace ${ASM_INGRESSGATEWAY_NAMESPACE}
- 啟用要用於插入的命名空間。步驟取決於控制層實作。 - 代管 (TD)- 將預設的注入標籤套用至命名空間:
 - kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio.io/rev- istio-injection=enabled --overwrite- 受管理 (Istiod)- 建議做法:執行下列指令,將預設注入標籤套用至命名空間: - kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio.io/rev- istio-injection=enabled --overwrite- 如果您是現有的 Managed Istiod 控制平面使用者:建議您使用預設插入作業,但系統也支援以修訂版本為基礎的插入作業。請按照下列操作說明進行: - 執行下列指令,找出可用的發布版本: - kubectl -n istio-system get controlplanerevision- 輸出結果會與下列內容相似: - NAME AGE asm-managed-rapid 6d7h- 注意:如果上述清單中顯示兩個控制層修訂版本,請移除其中一個。叢集中不支援多個控制平面管道。 - 在輸出內容中, - NAME欄下方的值是修訂版本標籤,對應至 Cloud Service Mesh 版本的發布管道。
- 將修訂版本標籤套用至命名空間: - kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
 - 叢集內- 建議做法:執行下列指令,將預設注入標籤套用至命名空間: - kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio.io/rev- istio-injection=enabled --overwrite- 建議您使用預設插入方式,但系統也支援以修訂版本為基礎的插入方式: 請按照下列操作說明操作: - 使用下列指令,找出 - istiod上的修訂版本標籤:- kubectl get deploy -n istio-system -l app=istiod -o \ jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
- 將修訂標籤套用至命名空間。在下列指令中, - REVISION_LABEL是您在上一個步驟中記下的- istiod修訂版本標籤值。- kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
 
- 
kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} apply --filename https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-service-mesh-samples/main/docs/ingress-gateway-external-lb/ingress-gateway.yaml預期輸出內容: serviceaccount/asm-ingressgateway created role.rbac.authorization.k8s.io/asm-ingressgateway created rolebinding.rbac.authorization.k8s.io/asm-ingressgateway created deployment.apps/asm-ingressgateway created service/asm-ingressgateway created poddisruptionbudget.policy/asm-ingressgateway created horizontalpodautoscaler.autoscaling/asm-ingressgateway created
- 使用外部負載平衡器 IP 位址修補 - ingressgateway服務。- cat <<EOF > asm-external-ip-patch.yaml spec: externalIPs: - ${EXTERNAL_LB_IP_ADDRESS} loadBalancerIP: ${EXTERNAL_LB_IP_ADDRESS} EOF kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} patch service/${ASM_INGRESSGATEWAY_SERVICE_NAME} --patch "$(cat asm-external-ip-patch.yaml)"
- [選用] 為輸入閘道節點標籤相依性,修補 - ingressgateway部署。- cat <<EOF > asm-ingress-node-label-patch.yaml spec: template: spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: ${ASM_INGRESSGATEWAY_NODE_LABEL} operator: Exists EOF kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} patch deployment/${ASM_INGRESSGATEWAY_DEPLOYMENT_NAME} --patch "$(cat asm-ingress-node-label-patch.yaml)"
設定外部負載平衡器
在本節中,您將設定外部負載平衡器,以便從叢集連線至輸入閘道。
擷取輸入閘道 Service 的通訊埠資訊
- 取得 - NodePorts。- export HTTP_INGRESS_PORT=$(kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} get service/${ASM_INGRESSGATEWAY_SERVICE_NAME} --output jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}') export HTTPS_INGRESS_PORT=$(kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} get service/${ASM_INGRESSGATEWAY_SERVICE_NAME} --output jsonpath='{.spec.ports[?(@.name=="https")].nodePort}') export STATUS_PORT=$(kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} get service/${ASM_INGRESSGATEWAY_SERVICE_NAME} --output jsonpath='{.spec.ports[?(@.name=="status-port")].nodePort}')
- 顯示 - NodePorts。- echo HTTP_INGRESS_PORT=${HTTP_INGRESS_PORT} echo HTTPS_INGRESS_PORT=${HTTPS_INGRESS_PORT} echo STATUS_PORT=${STATUS_PORT}
設定外部負載平衡器
使用上一個步驟顯示的 NodePorts,設定外部負載平衡器和 Ingress 閘道之間的連線。
- 在負載平衡器設定中設定健康狀態檢查。 - hosts: CLUSTER_NODE_IP Protocol: HTTP Port: STATUS_PORT Path: /healthz/ready- CLUSTER_NODE_IP:Kubernetes 叢集中代管入口閘道的節點 IP 位址。這個 IP 位址必須可從外部負載平衡器存取。您可能需要多次設定這項設定,每個叢集節點一次。 
- STATUS_PORT:是 - NodePort,透過該- NodePort公開入口網關的健康狀態 API。您可以從上一個步驟複製這項資訊。叢集中每個節點的值都相同。
 
- 在負載平衡器中設定節點集區,以便將 - HTTP和- HTTPS流量進行路由。請針對通訊埠 80 (- HTTP) 和通訊埠 443 (- HTTPS) 的流量使用下列- IP:PORT設定。- 80 -> CLUSTER_NODE_IP:HTTP_INGRESS_PORT 443 -> CLUSTER_NODE_IP:HTTPS_INGRESS_PORT- CLUSTER_NODE_IP:Kubernetes 叢集中代管入口閘道的節點 IP 位址。這個 IP 位址必須可從外部負載平衡器存取。您可能需要多次設定這項設定,每個叢集節點一次。 
- HTTP_INGRESS_PORT:是 - NodePort,透過該- NodePort公開入口網關的 HTTP 流量。您可以從上一個步驟複製這項資訊。叢集中每個節點的值都相同。
- HTTPS_INGRESS_PORT:是 - NodePort,透過該- NodePort公開入口閘道的 HTTPS 流量。您可以從上一個步驟複製這項資訊。叢集中每個節點的值都相同。
 
如要驗證設定,請確認負載平衡器的健康狀態檢查結果為通過。
後續步驟
- 進一步瞭解安裝及升級閘道