您可以將類型為 LoadBalancer 的 Kubernetes 服務設定為使用靜態 IP 位址。執行此功能之前,請瞭解最低元件需求、重要的安全考量事項和叢集強化指引。
對類型為 LoadBalancer 的服務使用靜態 IP
通常,定義 LoadBalancer 類型的 Kubernetes 服務時,會取得負載平衡器指派的暫時 IP 位址。
也可以為負載平衡器指定靜態 IP 位址。建立服務時,會使用您指派的靜態 IP 位址佈建負載平衡器執行個體。
loadBalancerIP
參數和 IP 位址值,在此範例中為
10.11.12.49
。
kind: Service apiVersion: v1 metadata: name: load-balancer-service-with-static-ip spec: selector: app: hello-world tier: frontend ports: - protocol: "TCP" port: 80 targetPort: 80 type: LoadBalancer loadBalancerIP: 10.11.12.49
對於 NSX Advanced Load Balancer,使用安裝負載平衡器時為其設定的 IPAM 集區中的 IP 位址。建立服務並指派靜態 IP 位址後,負載平衡器會將其標記為已配置,並按照暫時 IP 位址生命週期的管理方式來管理此 IP 位址的生命週期。也就是說,如果移除服務,則 IP 位址會取消指派並可供重新配置。
對於 NSX-T 負載平衡器,有兩個選項可供使用。預設機制與 NSX Advanced Load Balancer 相同:使用安裝負載平衡器時為其設定的 IP 集區中的 IP 位址。指派靜態 IP 位址後,負載平衡器會自動將其標記為已配置並管理其生命週期。
第二個 NSX-T 選項是手動預先配置靜態 IP 位址。在此案例中,使用的 IP 位址不屬於指派給負載平衡器的外部負載平衡器 IP 集區,而是從浮動 IP 集區中取得。在此案例中,請使用 NSX Manager 手動管理 IP 位址的配置和生命週期。
重要的安全考量事項和強化需求
使用此功能時,有一個潛在的安全性問題需要注意。如果開發人員能夠修補 Service.status.loadBalancerIP
值,開發人員可能會劫持以已修補 IP 位址為目的地的叢集中的流量。具體來說,如果具有 patch
權限的 Role 或 ClusterRole 已繫結至執行此功能之叢集上的服務或使用者帳戶,則該帳戶擁有者可以使用自己的認證發出 kubectl
命令,以及變更指派給負載平衡器的靜態 IP 位址。
若要避免對負載平衡器服務使用靜態 IP 配置所帶來的潛在安全性影響,您必須強化要執行此功能的每個叢集。為此,您為任何開發人員定義的 Role 或 ClusterRole 不得允許對 apiGroups:""
和 resources: services/status
使用 patch
動詞。範例角色程式碼片段示範了在執行此功能時不得執行的操作。
- apiGroups: - "" resources: - services/status verbs: - patch
kubectl --kubeconfig <KUBECONFIG> auth can-i patch service/status
如果命令傳回 yes
,則使用者具有修補權限。請參閱 Kubernetes 說明文件中的〈檢查 API 存取權〉,以取得詳細資訊。
若要為開發人員授與叢集存取權,請參閱。授與開發人員對 TKG 服務 叢集的 vCenter SSO 存取權.如需瞭解可自訂的範例角色範本,請參閱將預設網繭安全性原則套用至 TKG 服務叢集。對於如何限制叢集存取的範例,請參閱 https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-example。