可以将 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 地址置备负载均衡器实例。
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
,说明用户具有 patch 权限。有关详细信息,请参见 Kubernetes 文档中的检查 API 访问。
要授予开发人员对集群的访问权限,请参见向开发人员授予 Tanzu Kubernetes 集群访问权限。有关您可以自定义的 Role 模板示例,请参见 Pod 安全策略的示例角色。有关如何限制集群访问权限的示例,请参见 https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-example。