外部負載平衡器 (ELB) 會從指派給專案的集區 IP 位址,將專案外部的服務公開給較大的執行個體外部 IP 集區。
ELB 虛擬 IP (VIP) 位址不會在機構之間發生衝突,且在所有機構中都是唯一的。因此,您只能針對專案外部的用戶端必須存取的服務,使用 ELB 服務。
只要啟用工作負載離開專案,專案內執行的工作負載就能存取 ELB 服務。這種流量模式實際上需要專案的傳出流量,才能返回內部服務。
事前準備
如要設定 ELB 服務,您必須具備下列條件:
- 擁有要設定負載平衡器的專案。詳情請參閱「建立專案」一文。
- 自訂
ProjectNetworkPolicy
(PNP) Ingress 政策,允許流量傳送至這個 ELB 服務。詳情請參閱「設定 PNP,允許流量流向 ELB」。 必要的身分與存取權角色:
- 專案 NetworkPolicy 管理員:有權管理專案命名空間中的專案網路政策。請要求機構 IAM 管理員授予您專案 NetworkPolicy 管理員 (
project-networkpolicy-admin
) 角色。 - 負載平衡器管理員:請機構 IAM 管理員授予您負載平衡器管理員 (
load-balancer-admin
) 角色。
- 專案 NetworkPolicy 管理員:有權管理專案命名空間中的專案網路政策。請要求機構 IAM 管理員授予您專案 NetworkPolicy 管理員 (
設定 PNP,允許流量傳送至 ELB
如要讓 ELB 服務正常運作,您必須設定及套用自訂的ProjectNetworkPolicy
連入政策,允許流量進入這項 ELB 服務。指定外部 CIDR 位址,允許流量傳送至這個 ELB:
kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
apiVersion: networking.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
namespace: PROJECT
name: allow-inbound-traffic-from-external
spec:
policyType: Ingress
subject:
subjectType: UserWorkload
ingress:
- from:
- ipBlock:
cidr: CIDR
ports:
- protocol: TCP
port: PORT
EOF
更改下列內容:
MANAGEMENT_API_SERVER
:管理 API 伺服器的 kubeconfig 路徑。如果您尚未在目標區域中為 API 伺服器產生 kubeconfig 檔案,請參閱「登入」一文瞭解詳情。PROJECT
:GDC 專案名稱。CIDR
:ELB 需要從中存取的外部 CIDR。由於外部負載平衡器使用直接伺服器回傳 (DSR),可保留來源外部 IP 位址,並略過回傳路徑上的負載平衡器,因此必須採用這項政策。PORT
:負載平衡器後方 Pod 的後端通訊埠。這個值位於Service
資源資訊清單的.spec.ports[].targetPort
欄位中。
建立外部負載平衡器
在 GDC 中使用三種不同方法建立 ELB:
- 使用 gdcloud CLI 建立 ELB。
- 使用 Networking Kubernetes 資源模型 (KRM) API 建立 ELB。
您可以使用 KRM API 和 gdcloud CLI,以 Pod 或 VM 工作負載為目標。直接在 Kubernetes 叢集中使用 Kubernetes Service 時,只能以建立 Service
物件的叢集中的工作負載為目標。