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

最低需求

在符合下列需求的 Tanzu Kubernetes 叢集上,支援類型為 LoadBalancer 的 Kubernetes 服務的靜態 IP 定址:
元件 最低需求 更多資訊
vCenter Server 和 ESXi vSphere 7.0 Update 2 請參閱版本說明
主管叢集 v1.19.1+vmware.2-vsc0.0.8-17610687 請參閱透過執行 vSphere 命名空間更新來更新 主管叢集
負載平衡器

NSX-T Data Center v3.1

NSX Advanced 20.1.x

請參閱版本說明
Tanzu Kubernetes 版本 其中一個最新的 Tanzu Kubernetes 版本。 請參閱驗證 Tanzu Kubernetes 叢集的更新相容性

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

通常,定義 LoadBalancer 類型的 Kubernetes 服務時,會取得負載平衡器指派的暫時 IP 位址。請參閱Tanzu 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 存取權〉,以取得詳細資訊。

若要為開發人員授與叢集存取權,請參閱向開發人員授與 Tanzu Kubernetes 叢集的存取權。如需瞭解可自訂的範例角色範本,請參閱網繭安全性原則的範例角色。對於如何限制叢集存取的範例,請參閱 https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-example