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 模式。在此類型中,網路流量會從用戶端路由到 NSX ALB SE,接著路由到叢集節點,然後才會抵達網繭。NSX ALB SE 會將流量路由到節點,且 kube-proxy 會協助將流量從節點路由到目標網繭。

下圖說明在 NodePort 模式下如何路由網路流量:

NodePort 模式下的網路流量

NodePort 模式支援在不同的叢集之間共用 NSX ALB SE。但是,這種類型的服務可能會公開叢集中的連接埠,因為它需要使用 NodePort 模式後端服務。此外,還需要為 kube-proxy 提供額外的躍點,以將流量從節點路由到網繭。

若要在管理叢集上設定 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 入口服務提供者,以便使該提供者在其 AVI_LABELSinstall-ako-l7-node-port AKODeploymentConfig 物件中的叢集選擇器相符的工作負載叢集中,使用 NodePort 模式。

ClusterIP

在 ClusterIP 模式下,網路流量會從用戶端路由到 NSX ALB SE,然後再路由到網繭。此模式需要 ClusterIP 作為入口後端服務類型。NSX ALB SE 會利用靜態路由,將流量路由到網繭。

下圖說明在 ClusterIP 模式下如何路由網路流量:

ClusterIP 模式下的網路流量

ClusterIP 模式會將網路流量直接從 SE 路由到網繭,來簡化網路流量。此模式還能防止在叢集中公開連接埠。但是,在此模式下,無法在叢集之間共用 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 入口模式,請建立工作負載叢集組態 YAML 檔案,並新增以下欄位:

    AVI_LABELS: '{"nsx-alb-cluster-ip-l7":"true"}'
    
  4. 使用 tanzu cluster create 命令來部署工作負載叢集。

如需有關將工作負載叢集部署到 vSphere 的詳細資訊,請參閱建立工作負載叢集

現在,已設定 NSX ALB 入口服務提供者,以便使該提供者在其 AVI_LABELSinstall-ako-l7-cluster-ip AKODeploymentConfig 物件中的叢集選擇器相符的工作負載叢集上,使用 ClusterIP 模式。

若要在其他工作負載叢集上啟用 ClusterIP 入口模式,您必須在 Avi 控制器中建立新的 SE,然後建立新的 AKODeploymentConfig 物件以指定新 SE 的名稱,然後再將該檔案套用至管理叢集。

NodePortLocal (適用於 Antrea CNI)

如果使用 Antrea 作為 CNI,您可以在 NSX ALB 上啟用 NodePortLocal 入口模式。它會利用 Antrea 的 NodePortLocal 功能,直接將流量從 SE 路由到網繭。在此模式下,網路流量會從用戶端路由到 NSX ALB SE,然後再路由到網繭。此模式需要 ClusterIP 作為入口後端類型。此外,ANTREA_NODEPORTLOCAL 組態變數必須在 Tanzu Kubernetes Grid 中設定為 true。如需有關 Antrea 中的 NodePortLocal 功能的詳細資訊,請參閱 Antrea 說明文件中的 NodePortLocal (NPL)

下圖說明在 NodePortLocal 模式下如何路由網路流量:

NodePortLocal 模式下的網路流量

NodePortLocal 模式會將網路流量直接從 SE 路由到網繭,來簡化網路流量。此模式支援叢集共用 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 入口服務提供者,以便使該提供者在其 AVI_LABELSinstall-ako-l7-node-port-local AKODeploymentConfig 物件中的叢集選擇器相符的工作負載叢集中,使用 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