內部負載平衡器 (ILB) 會從指派給組織的內部 IP 集區,公開組織內的服務。組織外部的任何端點都無法存取 ILB 服務。
根據預設,您可以從組織中的任何叢集,存取相同專案中的 ILB 服務。預設專案網路政策不允許您從專案外部存取任何專案資源,這項限制也適用於 ILB 服務。如果平台管理員 (PA) 設定的專案網路政策允許其他專案存取您的專案,則同一組織中的其他專案也可以存取 ILB 服務。
事前準備
如要設定 ILB,您必須:
- 擁有您要設定負載平衡器的專案。詳情請參閱「建立專案」一文。
具備必要的身分和存取權角色:
- 請要求 IAM 機構組織管理員授予您負載平衡器管理員 (
load-balancer-admin) 角色。 - 如果是全域 ILB,請要求 IAM 機構組織管理員授予您全域負載平衡器管理員 (
global-load-balancer-admin) 角色。詳情請參閱「預先定義的角色說明」。
- 請要求 IAM 機構組織管理員授予您負載平衡器管理員 (
為共用叢集建立內部負載平衡器
您可以為共用叢集建立全域或可用區 ILB。全域 ILB 的範圍涵蓋整個 GDC Universe。可用區 ILB 的範圍僅限於建立時指定的可用區。詳情請參閱「全域和可用區負載平衡器」。
在 GDC 中使用三種不同方法建立 ILB:
- 使用 gdcloud CLI 建立全域或可用區 ILB。
- 使用網路 Kubernetes 資源模型 (KRM) API 建立全域或可用區 ILB。
- 直接在 Kubernetes 叢集使用 Kubernetes Service。這種方法僅適用於可用區 ILB。
您可以使用 KRM API 和 gdcloud CLI 指定 Pod 或 VM 工作負載。如果直接從 Kubernetes 叢集使用 Kubernetes Service,則只能指定建立 Service 物件的叢集中的工作負載。
建立可用區 ILB
使用 gdcloud CLI、KRM API 或 Kubernetes 叢集中的 Kubernetes Service,建立可用區 ILB:
gdcloud
使用 gdcloud CLI 建立指定 Pod 或 VM 工作負載的 ILB。
這個 ILB 會指定專案中符合 Backend 物件定義標籤的所有工作負載。
如要使用 gdcloud CLI 建立 ILB,請按照下列步驟操作:
建立
Backend資源,定義 ILB 的端點:gdcloud compute backends create BACKEND_NAME \ --labels=LABELS \ --project=PROJECT_NAME \ --zone=ZONE \ --cluster-name=CLUSTER_NAME更改下列內容:
BACKEND_NAME:您為後端資源選擇的名稱,例如my-backend。LABELS:這個選取器會定義要用於這個後端資源的 Pod 和 VM 之間的端點。例如:app=web。PROJECT_NAME:專案名稱。ZONE::用於這項叫用作業的可用區。如要為所有需要可用區旗標的指令預設該旗標,請執行:gdcloud config set core/zone ZONE。可用區旗標僅適用於多可用區環境。這是選填欄位。CLUSTER_NAME:定義的選取器範圍僅限於這個叢集。如未指定這個欄位,系統會選取所有具有指定標籤的端點。這是選填欄位。
如果這個 ILB 是用於 Pod 工作負載,請略過這個步驟。如果您要為 VM 工作負載設定 ILB,請定義 ILB 的健康狀態檢查類型。舉例來說,如要建立 TCP 健康狀態檢查,請按照下列方式定義:
gdcloud compute health-checks create tcp HEALTH_CHECK_NAME \ --check-interval=CHECK_INTERVAL \ --healthy-threshold=HEALTHY_THRESHOLD \ --timeout=TIMEOUT \ --unhealthy-threshold=UNHEALTHY_THRESHOLD \ --port=PORT \ --zone=ZONE更改下列內容:
HEALTH_CHECK_NAME:您為健康狀態檢查資源選擇的名稱,例如my-health-check。CHECK_INTERVAL:從某個探測開始到下一個探測開始的時間間隔,以秒為單位。如省略或設為 0,則預設為5。不建議將逾時時間設為超過 checkInterval。HEALTHY_THRESHOLD:端點必須通過的連續探測次數,才能視為健康狀態良好。如省略或設為 0,則預設為5。TIMEOUT:判定失敗前等待的時間 (以秒為單位)。如省略或設為 0,則預設為5。不建議將逾時時間設為超過 checkInterval。UNHEALTHY_THRESHOLD:端點必須連續失敗的探測次數,才會判定為健康狀態不良。如省略或設為 0,則預設為2。PORT:執行健康狀態檢查的通訊埠。預設值為80。這是選填欄位。ZONE:您要建立這個 ILB 的可用區。
建立
BackendService資源,並在其中加入先前建立的Backend資源:gdcloud compute backend-services create BACKEND_SERVICE_NAME \ --project=PROJECT_NAME \ --target-ports=TARGET_PORTS \ --zone=ZONE \ --health-check=HEALTH_CHECK_NAME更改下列內容:
BACKEND_SERVICE_NAME:為這項後端服務選擇的名稱。TARGET_PORTS:以半形逗號分隔的目標通訊埠清單,由這項後端服務轉譯,其中每個目標通訊埠都會指定通訊協定、轉送規則上的通訊埠,以及後端執行個體上的通訊埠。您可以指定多個目標通訊埠。這個欄位必須採用protocol:port:targetport格式,例如TCP:80:8080。這是選填欄位。HEALTH_CHECK_NAME:健康狀態檢查資源的名稱。這是選填欄位。只有在為 VM 工作負載設定 ILB 時,才需要加入這個欄位。
將
BackendService資源新增至先前建立的Backend資源:gdcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --backend=BACKEND_NAME \ --project=PROJECT_NAME \ --zone=ZONE建立內部
ForwardingRule資源,定義服務可用的 VIP:gdcloud compute forwarding-rules create FORWARDING_RULE_INTERNAL_NAME \ --backend-service=BACKEND_SERVICE_NAME \ --cidr=CIDR \ --ip-protocol-port=PROTOCOL_PORT \ --load-balancing-scheme=INTERNAL \ --zone=ZONE \ --project=PROJECT_NAME更改下列內容:
BACKEND_SERVICE_NAME:後端服務的名稱。FORWARDING_RULE_INTERNAL_NAME:您為轉送規則選擇的名稱。CIDR:這是選填欄位。如未指定,系統會自動從可用區 IP 集區保留IPv4/32CIDR。指定與這項轉送規則位於相同命名空間的Subnet資源名稱。Subnet資源代表可用區子網路的要求和分配資訊。如要進一步瞭解Subnet資源,請參閱「自訂資源範例」。PROTOCOL_PORT:要在轉送規則上公開的通訊協定和通訊埠。這個欄位的格式必須為ip-protocol=TCP:80。公開的通訊埠必須與實際應用程式在容器內公開的通訊埠相同。
如要驗證設定的 ILB,請確認每個建立的物件是否符合
Ready條件。向 VIP 發出curl要求,驗證流量:如要取得指派的 VIP,請說明轉送規則:
gdcloud compute forwarding-rules describe FORWARDING_RULE_INTERNAL_NAME向轉送規則中
PROTOCOL_PORT欄位指定的通訊埠傳送curl要求,驗證流量:curl http://FORWARDING_RULE_VIP:PORT更改下列內容:
FORWARDING_RULE_VIP:轉送規則的 VIP。PORT:轉送規則中PROTOCOL_PORT欄位的通訊埠編號。
API
使用 KRM API 建立 ILB,指定 Pod 或 VM 工作負載。這個 ILB 會指定專案中符合 Backend 物件定義標籤的所有工作負載。
如要使用 KRM API 建立可用區 ILB,請按照下列步驟操作:
建立
Backend資源,定義 ILB 的端點。為工作負載所在的每個可用區建立Backend資源:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.gdc.goog/v1 kind: Backend metadata: namespace: PROJECT_NAME name: BACKEND_NAME spec: clusterName: CLUSTER_NAME endpointsLabels: matchLabels: app: server EOF更改下列內容:
MANAGEMENT_API_SERVER:可用區 Management API 伺服器的 kubeconfig 路徑。詳情請參閱「切換至可用區情境」。PROJECT_NAME:專案名稱。BACKEND_NAME:Backend資源的名稱。CLUSTER_NAME:此為選填欄位。這個欄位會指定叢集,將定義的選取器範圍限制在該叢集內。這個欄位不適用於 VM 工作負載。如果Backend資源未包含clusterName欄位,指定的標籤會套用至專案中的所有工作負載。
您可以為每個可用區使用相同的
Backend資源,也可以為每個可用區建立具有不同標籤集的Backend資源。如果這個 ILB 是用於 Pod 工作負載,請略過這個步驟。如果您要為 VM 工作負載設定 ILB,請為 ILB 定義健康狀態檢查:
kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.gdc.goog/v1 kind: HealthCheck metadata: namespace: PROJECT_NAME name: HEALTH_CHECK_NAME spec: tcpHealthCheck: port: PORT timeoutSec: TIMEOUT checkIntervalSec: CHECK_INTERVAL healthyThreshold: HEALTHY_THRESHOLD unhealthyThreshold: UNHEALTHY_THRESHOLD EOF更改下列內容:
HEALTH_CHECK_NAME:您為健康狀態檢查資源選擇的名稱,例如my-health-check。PORT:執行健康狀態檢查的通訊埠。預設值為80。TIMEOUT:判定失敗前等待的時間 (以秒為單位)。如省略或設為 0,則預設為5。不建議將逾時時間設為超過 checkInterval。CHECK_INTERVAL:從某個探測開始到下一個探測開始的時間間隔,以秒為單位。如省略或設為 0,則預設為5。不建議將逾時時間設為超過 checkInterval。HEALTHY_THRESHOLD:端點必須通過的連續探測次數,才能視為健康狀態良好。如省略或設為 0,則預設為2。UNHEALTHY_THRESHOLD:端點必須連續失敗的探測次數,才會判定為健康狀態不良。如省略或設為 0,則預設為2。
使用先前建立的
Backend資源建立BackendService物件。如果您要為 VM 工作負載設定 ILB,請加入HealthCheck資源。kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.gdc.goog/v1 kind: BackendService metadata: namespace: PROJECT_NAME name: BACKEND_SERVICE_NAME spec: backendRefs: - name: BACKEND_NAME healthCheckName: HEALTH_CHECK_NAME EOF更改下列內容:
BACKEND_SERVICE_NAME:您為BackendService資源選擇的名稱。HEALTH_CHECK_NAME:先前建立的HealthCheck資源名稱。如果您要為 Pod 工作負載設定 ILB,請勿加入這個欄位。
建立內部
ForwardingRule資源,定義服務可用的 VIP。kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.gdc.goog/v1 kind: ForwardingRuleInternal metadata: namespace: PROJECT_NAME name: FORWARDING_RULE_INTERNAL_NAME spec: cidrRef: name: CIDR_NAME ports: - port: PORT protocol: PROTOCOL backendServiceRef: name: BACKEND_SERVICE_NAME EOF更改下列內容:
FORWARDING_RULE_INTERNAL_NAME:您為ForwardingRuleInternal資源選擇的名稱。CIDR_NAME:cidrRef為選填欄位。如未指定,系統會自動從可用區 IP 集區保留IPv4/32CIDR。指定與這項轉送規則位於相同命名空間的Subnet資源名稱。Subnet資源代表可用區子網路的要求和分配資訊。如要進一步瞭解Subnet資源,請參閱「自訂資源範例」。PORT:使用ports欄位指定 L4 通訊埠陣列,封包會轉送至使用這項轉送規則設定的後端。至少須指定一個通訊埠。使用port欄位指定通訊埠編號。公開的通訊埠必須與實際應用程式在容器內公開的通訊埠相同。PROTOCOL:轉送規則使用的通訊協定,例如TCP。ports陣列中的項目必須如下所示:ports: - port: 80 protocol: TCP
如要驗證設定的 ILB,請確認每個建立的物件是否符合
Ready條件。向 VIP 發出curl要求,驗證流量:如要取得 VIP,請使用
kubectl get:kubectl get forwardingruleinternal -n PROJECT_NAME輸出內容如下:
NAME BACKENDSERVICE CIDR READY ilb-name BACKEND_SERVICE_NAME 10.200.32.59/32 True向轉送規則中
PORT欄位指定的通訊埠傳送curl要求,驗證流量:curl http://FORWARDING_RULE_VIP:PORT將
FORWARDING_RULE_VIP替換為轉送規則的 VIP。
Kubernetes 服務
如要在 GDC 中建立 ILB,請在 Kubernetes 叢集中建立 LoadBalancer 類型的 Kubernetes Service 物件。這個 ILB 只會指定建立 Service 物件的叢集中的工作負載。
如要使用 Service 物件建立 ILB,請按照下列步驟操作:
為
LoadBalancer類型的Service定義建立 YAML 檔案。您必須使用networking.gke.io/load-balancer-type: internal註解,將 ILB 服務設計為內部服務。以下
Service物件是 ILB 服務範例:apiVersion: v1 kind: Service metadata: annotations: networking.gke.io/load-balancer-type: internal name: ILB_SERVICE_NAME namespace: PROJECT_NAME spec: ports: - port: 1234 protocol: TCP targetPort: 1234 selector: k8s-app: my-app type: LoadBalancer更改下列內容:
ILB_SERVICE_NAME:ILB 服務的名稱。PROJECT_NAME:專案中包含後端工作負載的命名空間。
port欄位會設定您在 VIP 位址上公開的前端通訊埠。targetPort欄位會設定後端通訊埠,用於轉送後端工作負載的流量。負載平衡器支援網路位址轉譯 (NAT)。前端和後端通訊埠可以不同。在
Service定義的selector欄位中,指定 Pod 或虛擬機器做為後端工作負載。選取器會比對您指定的標籤與工作負載上的標籤,定義要將哪些工作負載做為這項服務的後端工作負載。
Service只能選取與您定義Service的專案和叢集相同的後端工作負載。如要進一步瞭解服務選取,請參閱 https://kubernetes.io/docs/concepts/services-networking/service/。
將
Service定義檔儲存在與後端工作負載相同的專案中。ILB 服務只能選取與Service定義位於相同叢集的工作負載。將
Service定義檔套用至叢集:kubectl apply -f ILB_FILE將
ILB_FILE替換為 ILB 服務的Service定義檔案名稱。建立 ILB 服務時,服務會取得 IP 位址。您可以查看服務狀態,取得 ILB 服務的 IP 位址:
kubectl -n PROJECT_NAME get svc ILB_SERVICE_NAME更改下列內容:
PROJECT_NAME:專案中包含後端工作負載的命名空間。ILB_SERVICE_NAME:ILB 服務的名稱。
輸出內容應與下列範例類似:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ilb-service LoadBalancer 10.0.0.1 10.0.0.1 1234:31930/TCP 22hCLUSTER-IP和EXTERNAL-IP欄位必須顯示相同的值,也就是 ILB 服務的 IP 位址。根據專案的專案網路政策,組織中的其他叢集現在可以存取這個 IP 位址。如果沒有輸出內容,請確認您已成功建立 ILB 服務。
GDC 支援服務的網域名稱系統 (DNS) 名稱。不過,這些名稱僅適用於 ILB 服務的相同叢集。如要從其他叢集存取 ILB 服務,則必須使用 IP 位址。
建立全域 ILB
使用 gdcloud CLI 或 KRM API 建立全域 ILB。
gdcloud
使用 gdcloud CLI 建立指定 Pod 或 VM 工作負載的 ILB。
這個 ILB 會指定專案中符合 Backend 物件定義標籤的所有工作負載。Backend 自訂資源必須限定在可用區範圍內。
如要使用 gdcloud CLI 建立 ILB,請按照下列步驟操作:
建立
Backend資源,定義 ILB 的端點:gdcloud compute backends create BACKEND_NAME \ --labels=LABELS \ --project=PROJECT_NAME \ --cluster-name=CLUSTER_NAME \ --zone=ZONE更改下列內容:
BACKEND_NAME:您為後端資源選擇的名稱,例如my-backend。LABELS:這個選取器會定義要用於這個後端資源的 Pod 和 VM 之間的端點。例如:app=web。PROJECT_NAME:專案名稱。CLUSTER_NAME:定義的選取器範圍僅限於這個叢集。如未指定這個欄位,系統會選取所有具有指定標籤的端點。這是選填欄位。ZONE::用於這項叫用作業的可用區。如要為所有需要可用區旗標的指令預設該旗標,請執行:gdcloud config set core/zone ZONE。可用區旗標僅適用於多可用區環境。這是選填欄位。
如果這個 ILB 是用於 Pod 工作負載,請略過這個步驟。如果您要為 VM 工作負載設定 ILB,請為 ILB 定義健康狀態檢查:
gdcloud compute health-checks create tcp HEALTH_CHECK_NAME \ --check-interval=CHECK_INTERVAL \ --healthy-threshold=HEALTHY_THRESHOLD \ --timeout=TIMEOUT \ --unhealthy-threshold=UNHEALTHY_THRESHOLD \ --port=PORT \ --global更改下列內容:
HEALTH_CHECK_NAME:您為健康狀態檢查資源選擇的名稱,例如my-health-check。CHECK_INTERVAL:從某個探測開始到下一個探測開始的時間間隔,以秒為單位。如省略或設為 0,則預設為5。不建議將逾時時間設為超過 checkInterval。HEALTHY_THRESHOLD:宣告失敗前等待的時間。如省略或設為 0,則預設為5。TIMEOUT:判定失敗前等待的時間 (以秒為單位)。如省略或設為 0,則預設為5。不建議將逾時時間設為超過 checkInterval。UNHEALTHY_THRESHOLD:端點必須連續失敗的探測次數,才會判定為健康狀態不良。如省略或設為 0,則預設為2。PORT:執行健康狀態檢查的通訊埠。預設值為80。這是選填欄位。
建立
BackendService資源,並在其中加入先前建立的Backend資源:gdcloud compute backend-services create BACKEND_SERVICE_NAME \ --project=PROJECT_NAME \ --target-ports=TARGET_PORTS \ --health-check=HEALTH_CHECK_NAME \ --global更改下列內容:
BACKEND_SERVICE_NAME:為這項後端服務選擇的名稱。TARGET_PORTS:以半形逗號分隔的目標通訊埠清單,由這項後端服務轉譯,其中每個目標通訊埠都會指定通訊協定、轉送規則上的通訊埠,以及後端執行個體上的通訊埠。您可以指定多個目標通訊埠。這個欄位必須採用protocol:port:targetport格式,例如TCP:80:8080。這是選填欄位。HEALTH_CHECK_NAME:健康狀態檢查資源的名稱。這是選填欄位。只有在為 VM 工作負載設定 ILB 時,才需要加入這個欄位。
將
BackendService資源新增至先前建立的Backend資源:gdcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --backend-zone BACKEND_ZONE \ --backend=BACKEND_NAME \ --project=PROJECT_NAME \ --global建立內部
ForwardingRule資源,定義服務可用的 VIP:gdcloud compute forwarding-rules create FORWARDING_RULE_INTERNAL_NAME \ --backend-service=BACKEND_SERVICE_NAME \ --cidr=CIDR \ --ip-protocol-port=PROTOCOL_PORT \ --load-balancing-scheme=INTERNAL \ --project=PROJECT_NAME \ --global更改下列內容:
FORWARDING_RULE_INTERNAL_NAME:您為轉送規則選擇的名稱。CIDR:Subnet資源的名稱,與這項轉送規則位於相同命名空間。Subnet資源代表全域子網路的要求和分配資訊。如要進一步瞭解Subnet資源,請參閱「自訂資源範例」。如未指定,系統會自動從全域 IP 集區保留IPv4/32CIDR。這是選填欄位。PROTOCOL_PORT:要在轉送規則上公開的通訊協定和通訊埠。這個欄位的格式必須為ip-protocol=TCP:80。公開的通訊埠必須與實際應用程式在容器內公開的通訊埠相同。
如要驗證設定的 ILB,請確認每個建立的物件是否符合
Ready條件。向 VIP 發出curl要求,驗證流量:如要取得指派的 VIP,請說明轉送規則:
gdcloud compute forwarding-rules describe FORWARDING_RULE_INTERNAL_NAME --global向轉送規則中
PROTOCOL_PORT欄位指定的通訊埠傳送curl要求,驗證流量:curl http://FORWARDING_RULE_VIP:PORT更改下列內容:
FORWARDING_RULE_VIP:轉送規則的 VIP。PORT:轉送規則中PROTOCOL_PORT欄位的通訊埠編號。
API
使用 KRM API 建立 ILB,指定 Pod 或 VM 工作負載。這個 ILB 會指定專案中符合 Backend 物件定義標籤的所有工作負載。如要使用 KRM API 建立可用區 ILB,請按照下列步驟操作:
建立
Backend資源,定義 ILB 的端點。為工作負載所在的每個可用區建立Backend資源:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: Backend metadata: namespace: PROJECT_NAME name: BACKEND_NAME spec: clusterName: CLUSTER_NAME endpointsLabels: matchLabels: app: server EOF更改下列內容:
MANAGEMENT_API_SERVER:全域 Management API 伺服器的 kubeconfig 路徑。詳情請參閱「切換至全域情境」。PROJECT_NAME:專案名稱。BACKEND_NAME:Backend資源的名稱。CLUSTER_NAME:此為選填欄位。這個欄位會指定叢集,將定義的選取器範圍限制在該叢集內。這個欄位不適用於 VM 工作負載。如果Backend資源未包含clusterName欄位,指定的標籤會套用至專案中的所有工作負載。
您可以為每個可用區使用相同的
Backend資源,也可以為每個可用區建立具有不同標籤集的Backend資源。如果這個 ILB 是用於 Pod 工作負載,請略過這個步驟。如果您要為 VM 工作負載設定 ILB,請為 ILB 定義健康狀態檢查:
apiVersion: networking.global.gdc.goog/v1 kind: HealthCheck metadata: namespace: PROJECT_NAME name: HEALTH_CHECK_NAME spec: tcpHealthCheck: port: PORT timeoutSec: TIMEOUT checkIntervalSec: CHECK_INTERVAL healthyThreshold: HEALTHY_THRESHOLD unhealthyThreshold: UNHEALTHY_THRESHOLD更改下列內容:
HEALTH_CHECK_NAME:您為健康狀態檢查資源選擇的名稱,例如my-health-check。PORT:執行健康狀態檢查的通訊埠。預設值為80。TIMEOUT:判定失敗前等待的時間 (以秒為單位)。如省略或設為 0,則預設為5。不建議將逾時時間設為超過 checkInterval。CHECK_INTERVAL:從某個探測開始到下一個探測開始的時間間隔,以秒為單位。如省略或設為 0,則預設為5。不建議將逾時時間設為超過 checkInterval。HEALTHY_THRESHOLD:端點必須通過的連續探測次數,才能視為健康狀態良好。如省略或設為 0,則預設為2。UNHEALTHY_THRESHOLD:端點必須連續失敗的探測次數,才會判定為健康狀態不良。如省略或設為 0,則預設為2。
由於這是全域 ILB,請在全域 API 中建立健康狀態檢查。
使用先前建立的
Backend資源建立BackendService物件。如果您要為 VM 工作負載設定 ILB,請加入HealthCheck資源。kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: BackendService metadata: namespace: PROJECT_NAME name: BACKEND_SERVICE_NAME spec: backendRefs: - name: BACKEND_NAME zone: ZONE healthCheckName: HEALTH_CHECK_NAME targetPorts: - port: PORT protocol: PROTOCOL targetPort: TARGET_PORT EOF更改下列內容:
BACKEND_SERVICE_NAME:您為BackendService資源選擇的名稱。HEALTH_CHECK_NAME:先前建立的HealthCheck資源名稱。如果您要為 Pod 工作負載設定 ILB,請勿加入這個欄位。ZONE:建立Backend資源的可用區。您可以在backendRefs欄位中指定多個後端。例如:- name: my-be zone: Zone-A - name: my-be zone: Zone-BtargetPorts為選填欄位。這項資源會列出BackendService資源轉譯的通訊埠。如要使用這個物件,請提供下列值:PORT:服務公開的通訊埠。PROTOCOL:流量必須符合的第 4 層通訊協定。僅支援 TCP 和 UDP。TARGET_PORT:PORT值轉譯後的通訊埠,例如8080。在特定物件中,TARGET_PORT的值不得重複。targetPorts的範例如下:targetPorts: - port: 80 protocol: TCP targetPort: 8080
建立內部
ForwardingRule資源,定義服務可用的 VIP。kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ForwardingRuleInternal metadata: namespace: PROJECT_NAME name: FORWARDING_RULE_INTERNAL_NAME spec: cidrRef: name: CIDR_NAME ports: - port: PORT protocol: PROTOCOL backendServiceRef: name: BACKEND_SERVICE_NAME EOF更改下列內容:
FORWARDING_RULE_INTERNAL_NAME:您為ForwardingRuleInternal資源選擇的名稱。CIDR_NAME:Subnet資源的名稱,與這項轉送規則位於相同命名空間。Subnet資源代表全域子網路的要求和分配資訊。如要進一步瞭解Subnet資源,請參閱「自訂資源範例」。如未指定,系統會自動從全域 IP 集區保留IPv4/32CIDR。這是選填欄位。PORT:使用ports欄位指定 L4 通訊埠陣列,封包會轉送至使用這項轉送規則設定的後端。至少須指定一個通訊埠。使用port欄位指定通訊埠編號。公開的通訊埠必須與實際應用程式在容器內公開的通訊埠相同。PROTOCOL:轉送規則使用的通訊協定,例如TCP。ports陣列中的項目必須如下所示:ports: - port: 80 protocol: TCP
如要驗證設定的 ILB,請確認每個建立的物件是否符合
Ready條件。向 VIP 發出curl要求,驗證流量:如要取得 VIP,請使用
kubectl get:kubectl get forwardingruleinternal -n PROJECT_NAME輸出內容如下:
NAME BACKENDSERVICE CIDR READY ilb-name BACKEND_SERVICE_NAME 10.200.32.59/32 True在轉送規則的
PORT欄位中指定通訊埠,並向該通訊埠的 VIP 傳送curl要求,測試流量:curl http://FORWARDING_RULE_VIP:PORT將
FORWARDING_RULE_VIP替換為轉送規則的 VIP。
為標準叢集建立內部負載平衡器
您可以為標準叢集建立可用區 ILB,但不支援全域 ILB。可用區 ILB 的範圍僅限於建立時指定的可用區。詳情請參閱「全域和可用區負載平衡器」。
直接在 Kubernetes 叢集使用 Kubernetes Service,為標準叢集建立可用區 ILB。如果直接從 Kubernetes 叢集使用 Kubernetes Service,則只能指定建立 Service 物件的叢集中的工作負載。
為標準叢集建立可用區 ILB
如要在 GDC 中建立 ILB,請在 Kubernetes 叢集中建立 LoadBalancer 類型的 Kubernetes Service 物件。這個 ILB 只會指定建立 Service 物件的叢集中的工作負載。
如要使用 Service 物件建立 ILB,請按照下列步驟操作:
為
LoadBalancer類型的Service定義建立 YAML 檔案。您必須使用networking.gke.io/load-balancer-type: internal註解,將 ILB 服務設計為內部服務。以下
Service物件是 ILB 服務範例:apiVersion: v1 kind: Service metadata: annotations: networking.gke.io/load-balancer-type: internal name: ILB_SERVICE_NAME namespace: ILB_SERVICE_NAMESPACE spec: ports: - port: 1234 protocol: TCP targetPort: 1234 selector: k8s-app: my-app type: LoadBalancer更改下列內容:
ILB_SERVICE_NAME:ILB 服務的名稱。ILB_SERVICE_NAMESPACE:包含後端工作負載的命名空間。
port欄位會設定您在 VIP 位址上公開的前端通訊埠。targetPort欄位會設定後端通訊埠,用於轉送後端工作負載的流量。負載平衡器支援網路位址轉譯 (NAT)。前端和後端通訊埠可以不同。在
Service定義的selector欄位中,指定要用做後端工作負載的 Pod。選取器會比對您指定的標籤與工作負載上的標籤,定義要將哪些工作負載做為這項服務的後端工作負載。
Service只能選取與您定義Service的專案和叢集相同的後端工作負載。如要進一步瞭解服務選取,請參閱 https://kubernetes.io/docs/concepts/services-networking/service/。
將
Service規格儲存為 YAML 檔案。在下列指令中,將檔案名稱替換為 ILB_FILE。ILB 服務只能選取與Service定義位於相同叢集的工作負載。將
Service定義檔套用至叢集:export KUBECONFIG=KUBECONFIG_PATH kubectl apply -f ILB_FILE更改下列內容:
ILB_FILE:ILB 服務的Service定義檔案名稱。KUBECONFIG_PATH:標準叢集的 kubeconfig 檔案路徑。
建立 ILB 服務時,服務會取得 IP 位址。您可以查看服務狀態,取得 ILB 服務的 IP 位址:
kubectl -n ILB_SERVICE_NAMESPACE get svc ILB_SERVICE_NAME更改下列內容:
ILB_SERVICE_NAMESPACE:包含後端工作負載的命名空間。ILB_SERVICE_NAME:ILB 服務的名稱。KUBECONFIG_PATH:標準叢集的 kubeconfig 檔案路徑。
輸出內容大致如下:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ilb-service LoadBalancer 10.0.0.1 198.51.0.1 1234:31930/TCP 22h現在,組織中的其他叢集可以根據專案的專案網路政策存取這個 IP 位址。
選取 VM 做為負載平衡器的後端
如要將 VM 連結至負載平衡器,請按照下列步驟操作:
確認 VM 的標籤與負載平衡器設定中使用的標籤選取器相符。
舉例來說,如果 VM 沒有適當的標籤,您可以將相應可用區後端物件的指定標籤新增至 VM:
kubectl --kubeconfig MANAGEMENT_API_SERVER label virtualmachine VM_NAME -n PROJECT_NAMELABEL更改下列內容:
LABEL:與負載平衡器設定中的LabelSelector相符的標籤,例如app=server。VM_NAME:要連結的虛擬機器名稱。PROJECT_NAME:專案名稱。
確認伺服器監聽的通訊埠與
HealthCheck物件中指定的通訊埠相同。