您可以將類型為 LoadBalancer 的 Kubernetes 服務設定為使用靜態 IP 位址。執行此功能之前,請瞭解最低元件需求、重要的安全考量事項和叢集強化指引。

對類型為 LoadBalancer 的服務使用靜態 IP

通常,定義 LoadBalancer 類型的 Kubernetes 服務時,會取得負載平衡器指派的暫時 IP 位址。

也可以為負載平衡器指定靜態 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