您可以创建 CRD (CustomResourceDefinition) 来监控 NSX 负载均衡器的使用情况,以及创建额外的 NSX 第 7 层负载均衡器来处理默认负载均衡器无法处理的 Ingress 工作负载。这些 CRD 不会用于缩放为 Kubernetes LoadBalancer 服务创建的第 4 层负载均衡器。

在管理器模式下,从 NCP 2.5.1 开始支持此功能。在策略模式下,从 NCP 3.0.1 开始支持此功能。

这些 CRD 包括:
  • NSXLoadBalancerMonitor - 此 CRD 用于报告 NSX 负载均衡器的使用情况统计信息。在策略模式下,此 CRD 将仅监控使用 LoadBalancer CRD 创建的命名空间负载均衡器。
  • LoadBalancer - 此 CRD 用于创建新的 NSX 负载均衡器。此资源的定义位于 NCP YAML 文件中。在策略模式下和 PKS 部署中,这是命名空间资源。在管理器模式部署中,这是集群范围的资源。
在管理器模式下,请执行以下步骤以启用此功能:
  • k8s 部分中的 enable_lb_crd 选项设置为 True
  • 使用以下命令应用 NCP YAML 文件:

    kubectl apply -f ncp-<platform>.yaml

在策略模式下,请执行以下步骤以启用此功能:
  • 如果您已将 NCP 从以前的版本升级到 3.0.1,请使用以下命令删除旧 CRD 定义:
    kubectl delete crd nsxlbmonitors.vmware.com
    kubectl delete crd loadbalancers.vmware.com
  • k8s 部分中的 enable_lb_crdenable_vnet_crd 选项设置为 True
  • 使用以下命令应用 NCP YAML 文件的策略版本:

    kubectl apply -f ncp-<platform>-policy.yaml

在管理器模式下,要创建新的 NSX 负载均衡器,请应用定义 LoadBalancer CRD 的 YAML 文件。例如,
apiVersion: vmware.com/v1alpha1
kind: LoadBalancer
metadata:
    name: cluster1-lbs0
spec:
    httpConfig: {}
在策略模式下,需要使用 VirtualNetwork 创建 LoadBalancer。例如,
apiVersion: vmware.com/v1alpha1
kind: VirtualNetwork
metadata:
    name: vnet
---
apiVersion: vmware.com/v1alpha1
kind: LoadBalancer
metadata:
    name: cluster1-lbs0
spec:
    virtualNetworkName: vnet # Set to match VirtualNetwork object name
    httpConfig: {}

此 YAML 文件将创建小型的 NSX 负载均衡器,并创建一对无持久性、SSL 或 X 转发设置的第 7 层虚拟服务器。虚拟服务器的 IP 从为负载均衡器配置的默认外部池进行分配。默认情况下,端口为 80 和 443。如果自定义端口包含在 HTTP HOST 标头中,则支持非标准端口。

要查看 LoadBalancer CRD 的创建状态,请运行以下命令:
kubectl get lb <name of the LoadBalancer> -o yaml
结果类似于以下内容:
status:
 conditions:
 - status: "True"
   type: Ready
 httpVirtualIP: <realized virtual IP>

此结果表示创建成功。如果创建失败,status 将为 "False",并且不会提供虚拟 IP。

您还可以自定义 NSX 负载均衡器和虚拟服务器的设置。要为虚拟服务器配置 IP 和端口,请运行以下命令:
spec:
    httpConfig:
        virtualIP: <ip address, default to auto-allocate>
        port: <port number, default to 80>
要指定会话关联性和 X 转发模式,请运行以下命令:
spec:
    httpConfig:
         xForwardedFor: <INSERT or REPLACE, default to None>
         affinity:
             type: <source_ip or cookie, default to None>
             timeout: <timeout number, default to 10800>
要配置 TLS 设置,请运行以下命令:
spec:
    httpConfig:
        tls:
            port: <tls port number, default to 443>
            secretName: <name of secret, default to None>
            secretNamespace: <namespace of secret, default to None>
请注意,即使将 HTTP 和 HTTPS 端口设置为非默认值,由于存在 Kubernetes 限制,当显示 Ingress 状态时,Ingress 打印机将始终显示默认端口值(80 和 443)。您仍应使用配置的端口访问 Ingress。例如,
curl -I -HHost:tea.example.com http://$INGRESS_IP:$CRD_LB_HTTP_PORT/tea

您可以在创建 LoadBalancer 之前或之后创建密钥。要更新证书,请先移除 LoadBalancer 规范中的 secretNamesecretNamespace,更新密钥的数据,然后使用上述配置重新附加相同的密钥。或者,也可以通过创建新密钥并更新 secretNamesecretNamespace 来实现此目的。请注意,不支持在不同的 CRD 负载均衡器之间共享相同的密钥数据。您必须使用不同的证书配置 CRD 负载均衡器。

要查看 NSX 负载均衡器的状态和统计信息,请运行以下命令:
kubectl get lbm
此命令将列出所有 NSXLoadBlancerMonitor,每个 NSX 负载均衡器将具有一个 NSXLoadBlancerMonitor。此时会显示以下信息:
  • 使用情况 - NSX 负载均衡器上的工作负载数量。
  • 流量 - 每个虚拟服务器的汇总统计信息。
  • 运行状况 - 此字段有两个维度:
    • servicePressureIndex - 此维度表示负载均衡器的性能。它提供了两个值:评分和严重性。
    • infraPressureIndex - 此维度表示底层基础架构组件的性能。在 NCP 2.5.1 中,此值并非始终准确。
    • 字段 metrics 为计算运行状况评分时考虑的参数提供了相关概念。

当负载均衡器的 servicePressureIndexHIGH 时,您可以将 Ingress 工作负载迁移到其他负载均衡器,该负载均衡器必须是默认负载均衡器或使用 LoadBalancer CRD 创建的负载均衡器。

要将 Ingress 放置在专用负载均衡器上,请向 Ingress 规范中添加一个注释。例如,
 annotations:
   nsx/loadbalancer: <name of the LoadBalancer CRD>

如果缺少该注释或将该注释设置为 null,则会将 Ingress 放置在默认的 NSX 负载均衡器上。