This site will be decommissioned on December 31st 2024. After that date content will be available at techdocs.broadcom.com.

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