NSX ALB 作为 L7 输入控制器

要在 Kubernetes 集群中使用 NSX Advanced Load Balancer 作为输入控制器,您必须具有 NSX ALB Enterprise 版本。或者,也可以使用 Contour 作为 Tanzu Kubernetes Grid 集群中的输入控制器。

在 Tanzu Kubernetes Grid 中通过 AKO 集成时,NSX ALB 支持三种输入模式:NodePort、ClusterIP 和 NodePortLocal。根据您的要求选择类型。

NodePort

选择对 NSX ALB 输入使用 NodePort 模式时,输入后端服务必须为 NodePort 模式。在此类型中,网络流量在到达 Pod 之前从客户端路由到 NSX ALB SE,然后路由到集群节点。NSX ALB SE 将流量路由到 节点,并且 kube-proxy 可帮助将流量从节点路由到目标 Pod。

下图介绍了如何在 NodePort 模式下路由网络流量:

NodePort 模式下的网络流量

NodePort 模式支持在不同的集群之间共享 NSX ALB SE。但是,这种类型的服务可能会公开集群中的端口,因为它需要使用 NodePort 模式后端服务。此外,还需要为 kube-proxy 提供一个额外的跃点,以将流量从节点路由到 Pod。

要在管理集群上配置 NodePort 输入模式,请执行以下操作:

  1. 创建 AKODeploymentConfig CR 对象,如下所示:

    apiVersion: networking.tkg.tanzu.vmware.com/v1alpha1
    kind: AKODeploymentConfig
    metadata:
      name: install-ako-for-l7-node-port
    spec:
      adminCredentialRef:
        name: avi-controller-credentials
        namespace: tkg-system-networking
      certificateAuthorityRef:
        name: avi-controller-ca
        namespace: tkg-system-networking
      controller: 10.191.192.137
      cloudName: Default-Cloud
      serviceEngineGroup: Default-Group
      clusterSelector:
        matchLabels:
          nsx-alb-node-port-l7: "true"
      controlPlaneNetwork:
        cidr: 10.191.192.0/20
        name: VM Network
      dataNetwork:
        cidr: 10.191.192.0/20
        name: VM Network
      extraConfigs:
        cniPlugin: antrea
        disableStaticRouteSync: true
        ingress:
          defaultIngressController: true # optional, if set to false, you need to specify ingress class in your ingress object
          disableIngressClass: false  # required
          serviceType: NodePort       # required
          shardVSSize: SMALL
          nodeNetworkList:            # required
          - networkName: VM Network
            cidrs:
            - 10.191.192.0/20
    
  2. 在管理集群上应用更改:

    kubectl --context=MGMT-CLUSTER-CONTEXT apply -f install-ako-for-l7-node-port.yaml
    
  3. 要在工作负载集群上启用 NodePort 输入模式,请创建工作负载集群配置 YAML 文件,然后添加以下字段:

    AVI_LABELS: '{"nsx-alb-node-port-l7":"true"}'
    
  4. 使用 tanzu cluster create 命令创建工作负载集群。

有关将工作负载集群部署到 vSphere 的详细信息,请参见创建工作负载集群

现在,NSX ALB 输入服务提供程序配置为在具有与 install-ako-l7-node-port AKODeploymentConfig 对象中集群选择器匹配的 AVI_LABELS 的工作负载集群上使用 NodePort 模式。

ClusterIP

在 ClusterIP 模式下,网络流量从客户端路由到 NSX ALB SE,然后再路由到 Pod。此模式需要 ClusterIP 作为输入后端服务类型。NSX ALB SE 利用静态路由将流量路由到 Pod。

下图介绍了如何在 ClusterIP 模式下路由网络流量:

ClusterIP 模式下的网络流量

ClusterIP 模式通过将网络流量直接从 SE 路由到 Pod 来简化网络流量。此模式还可以防止在集群中公开端口。但是,在此模式下,无法在集群之间共享 SE,因为必须将 SE 连接到集群。

要启用此功能,请执行以下操作:

  1. 创建 AKODeploymentConfig CR 对象,如下所示:

    apiVersion: networking.tkg.tanzu.vmware.com/v1alpha1
    kind: AKODeploymentConfig
    metadata:
      name: install-ako-for-l7-cluster-ip
    spec:
      adminCredentialRef:
        name: avi-controller-credentials
        namespace: tkg-system-networking
      certificateAuthorityRef:
        name: avi-controller-ca
        namespace: tkg-system-networking
      controller: 10.191.192.137
      cloudName: Default-Cloud
      serviceEngineGroup: SEG-2   # must be unique, can only be used for one cluster
      clusterSelector:
        matchLabels:
          nsx-alb-cluster-ip-l7: "true"
      controlPlaneNetwork:
        cidr: 10.191.192.0/20
        name: VM Network
      dataNetwork:
        cidr: 10.191.192.0/20
        name: VM Network
      extraConfigs:
        cniPlugin: antrea
        disableStaticRouteSync: false # required
        ingress:
          defaultIngressController: true # optional, if set to false, you need to specify ingress class in your ingress object
          disableIngressClass: false  # required
          serviceType: ClusterIP      # required
          shardVSSize: SMALL 
          nodeNetworkList:            # required
          - networkName: VM Network
            cidrs:
            - 10.191.192.0/20
    
    
  2. 在管理集群上应用更改:

    kubectl --context=MGMT-CLUSTER-CONTEXT apply -f install-ako-for-l7-cluster-ip.yaml
    
  3. 要在工作负载集群上启用 ClusterIP Ingress 模式,请创建工作负载集群配置 YAML 文件,然后添加以下字段:

    AVI_LABELS: '{"nsx-alb-cluster-ip-l7":"true"}'
    
  4. 使用 tanzu cluster create 命令创建工作负载集群。

有关将工作负载集群部署到 vSphere 的详细信息,请参见创建工作负载集群

现在,NSX ALB 输入服务提供程序配置为在具有与 install-ako-l7-cluster-ip AKODeploymentConfig 对象中集群选择器匹配的 AVI_LABELS 的工作负载集群上使用 ClusterIP 模式。

要在其他工作负载集群上启用 ClusterIP 输入模式,您必须在 Avi 控制器中创建新的 SE,然后创建新的 AKODeploymentConfig 对象以指定新 SE 的名称,然后再在管理集群上应用该文件。

NodePortLocal(适用于 Antrea CNI)

如果使用 Antrea 作为 CNI,则可以在 NSX ALB 上启用 NodePortLocal 输入模式。它利用 Antrea 的 NodePortLocal 功能直接将流量从 SE 路由到 Pod。在此模式下,网络流量从客户端路由到 NSX ALB SE,然后再路由到 Pod。此模式需要 ClusterIP 作为输入后端类型。此外,ANTREA_NODEPORTLOCAL 配置变量必须在 Tanzu Kubernetes Grid 中设置为 true。有关 Antrea 中的 NodePortLocal 功能的详细信息,请参见 Antrea Documentation 中的 NodePortLocal (NPL)

下图介绍了如何在 NodePortLocal 模式下路由网络流量:

NodePortLocal 模式下的网络流量

NodePortLocal 模式通过将网络流量直接从 SE 路由到 Pod 来简化网络流量。此模式支持集群的共享 SE,并防止在集群中公开端口。

要在现有管理集群上配置 NodePortLocal 输入模式,请执行以下操作:

  1. 创建 AKODeploymentConfig CR 对象,如下所示:

    apiVersion: networking.tkg.tanzu.vmware.com/v1alpha1
    kind: AKODeploymentConfig
    metadata:
      name: install-ako-for-l7-node-port-local
    spec:
      adminCredentialRef:
        name: avi-controller-credentials
        namespace: tkg-system-networking
      certificateAuthorityRef:
        name: avi-controller-ca
        namespace: tkg-system-networking
      controller: 10.191.192.137
      cloudName: Default-Cloud
      serviceEngineGroup: Default-Group
      clusterSelector:
        matchLabels:
          nsx-alb-node-port-local-l7: "true"
      controlPlaneNetwork:
        cidr: 10.191.192.0/20
        name: VM Network
      dataNetwork:
        cidr: 10.191.192.0/20
        name: VM Network
      extraConfigs:
        cniPlugin: antrea
        disableStaticRouteSync: true
        ingress:
          defaultIngressController: true # optional, if set to false, you need to specify ingress class in your ingress object
          disableIngressClass: false  # required
          serviceType: NodePortLocal  # required
          shardVSSize: SMALL
          nodeNetworkList:            # required
          - networkName: VM Network
            cidrs:
            - 10.191.192.0/20
    
    
  2. 在管理集群上应用更改:

    kubectl --context=MGMT-CLUSTER-CONTEXT apply -f install-ako-for-l7-node-port-local.yaml
    
  3. 要在工作负载集群上启用 NodePortLocal 输入模式,请创建工作负载集群配置 YAML 文件,然后添加以下字段:

    AVI_LABELS: '{"nsx-alb-node-port-local-l7":"true"}'
    
    ANTREA_NODEPORTLOCAL: "true"
    
  4. 使用 tanzu cluster create 命令创建工作负载集群。

现在,NSX ALB 输入服务提供程序配置为在具有与 install-ako-l7-node-port-local AKODeploymentConfig 对象中集群选择器匹配的 AVI_LABELS 的工作负载集群上使用 NodePortLocal 模式。

管理集群中的 NSX ALB L7 输入支持

如果使用 NSX ALB 作为集群端点 VIP 提供程序,则管理集群中仅支持 NodePort 输入模式。如果不使用 NSX ALB 作为集群端点 VIP 提供程序,则支持所有三种输入模式。

要在管理集群中启用 L7 输入,请执行以下操作:

  1. 编辑管理集群中的 AKODeploymentConfig 文件:

    kubectl --context=MGMT-CLUSTER-CONTEXT edit adc install-ako-for-management-cluster
    
  2. 在打开的文件中,修改 spec.extraConfigs.ingress 字段,如以下示例中所示:

      extraConfigs:
        cniPlugin: antrea
        disableStaticRouteSync: true
        ingress:
          defaultIngressController: true # optional, if set to false, you need to specify ingress class in your ingress object
          disableIngressClass: false  # required
          serviceType: NodePort       # required
          shardVSSize: SMALL
          nodeNetworkList:            # required
          - networkName: VM Network
            cidrs:
            - 10.191.192.0/20
    
    
check-circle-line exclamation-circle-line close-line
Scroll to top icon