NSX ALB come controller di ingresso L7

Per utilizzare NSX Advanced Load Balancer come controller di ingresso nel cluster Kubernetes, è necessario disporre della versione Enterprise di NSX ALB. In alternativa, è possibile utilizzare Contour come controller di ingresso nei cluster Tanzu Kubernetes Grid.

Quando è integrato tramite AKO in Tanzu Kubernetes Grid, NSX ALB supporta tre modalità di ingresso: NodePort, ClusterIP e NodePortLocal. Scegliere un tipo in base alle proprie esigenze.

NodePort

Quando si sceglie di utilizzare la modalità NodePort per l'ingresso di NSX ALB, il servizio back-end di ingresso deve essere in modalità NodePort. In questo tipo, il traffico di rete viene instradato dal client a NSX ALB SE e quindi ai nodi del cluster prima che raggiunga i pod. NSX ALB SE instrada il traffico ai nodi e kube-proxy consente di instradare il traffico dai nodi ai pod di destinazione.

Il diagramma seguente descrive come viene instradato il traffico di rete nella modalità NodePort:

Traffico di rete in modalità NodePort

La modalità NodePort supporta anche la condivisione di NSX ALB SE tra cluster diversi. Tuttavia, questo tipo di servizio può esporre una porta nel cluster perché richiede l'utilizzo del servizio back-end della modalità NodePort. Richiede inoltre un hop aggiuntivo affinché kube-proxy instradi il traffico dal nodo al pod.

Per configurare la modalità di ingresso NodePort in un cluster di gestione:

  1. Creare un oggetto CR AKODeploymentConfig nel modo seguente:

    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. Applicare le modifiche nel cluster di gestione:

    kubectl --context=MGMT-CLUSTER-CONTEXT apply -f install-ako-for-l7-node-port.yaml
    
  3. Per abilitare la modalità di ingresso NodePort nei cluster del carico di lavoro, creare un file YAML di configurazione del cluster del carico di lavoro e aggiungere il campo seguente:

    AVI_LABELS: '{"nsx-alb-node-port-l7":"true"}'
    
  4. Distribuire il cluster del carico di lavoro utilizzando il comando tanzu cluster create.

Per ulteriori informazioni sulla distribuzione dei cluster del carico di lavoro in vSphere, vedere Creazione dei cluster del carico di lavoro.

Il provider del servizio di ingresso NSX ALB è ora configurato per utilizzare la modalità NodePort sui cluster del carico di lavoro che hanno le AVI_LABELS corrispondenti al selettore del cluster nell'oggetto AKODeploymentConfig install-ako-l7-node-port.

ClusterIP

In modalità ClusterIP, il traffico di rete viene instradato dal client a NSX ALB SE e quindi ai pod. Questa modalità richiede ClusterIP come tipo di servizio backend in ingresso. NSX ALB SE instrada il traffico ai pod sfruttando le route statiche.

Il diagramma seguente descrive come viene instradato il traffico di rete nella modalità ClusterIP:

Traffico di rete in modalità ClusterIP

La modalità ClusterIP semplifica il traffico di rete instradandolo direttamente da SE ai pod. Questa modalità impedisce inoltre l'esposizione delle porte in un cluster. Tuttavia, in questa modalità, gli SE non possono essere condivisi tra cluster perché un SE deve essere collegato a un cluster.

Per abilitare questa funzionalità:

  1. Creare un oggetto CR AKODeploymentConfig nel modo seguente:

    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. Applicare le modifiche nel cluster di gestione:

    kubectl --context=MGMT-CLUSTER-CONTEXT apply -f install-ako-for-l7-cluster-ip.yaml
    
  3. Per abilitare la modalità di ingresso ClusterIP nei cluster del carico di lavoro, creare un file YAML di configurazione del cluster del carico di lavoro e aggiungere il campo seguente:

    AVI_LABELS: '{"nsx-alb-cluster-ip-l7":"true"}'
    
  4. Distribuire il cluster del carico di lavoro utilizzando il comando tanzu cluster create.

Per ulteriori informazioni sulla distribuzione dei cluster del carico di lavoro in vSphere, vedere Creazione dei cluster del carico di lavoro.

Il provider di servizi di ingresso NSX ALB è ora configurato per utilizzare la modalità ClusterIP sui cluster del carico di lavoro che hanno le AVI_LABELS corrispondenti al selettore del cluster nell'oggetto AKODeploymentConfig install-ako-l7-cluster-ip.

Per abilitare la modalità di ingresso ClusterIP in altri cluster del carico di lavoro, è necessario creare un nuovo SE nel controller Avi e quindi creare un nuovo oggetto AKODeploymentConfig che specifica il nome del nuovo SE prima di applicare il file nel cluster di gestione.

NodePortLocal (per la CNI di Antrea)

Se si utilizza Antrea come CNI, è possibile abilitare la modalità di ingresso NodePortLocal in NSX ALB. Sfrutta la funzionalità NodePortLocal di Antrea per instradare direttamente il traffico da SE al pod. In questa modalità, il traffico di rete viene instradato dal client a NSX ALB SE e quindi ai pod. Questa modalità richiede ClusterIP come tipo di back-end di ingresso. Inoltre, la variabile di configurazione ANTREA_NODEPORTLOCAL deve essere impostata su true in Tanzu Kubernetes Grid. Per ulteriori informazioni sulla funzionalità NodePortLocal in Antrea, vedere NodePortLocal (NPL) nella documentazione di Antrea.

Il diagramma seguente descrive come viene instradato il traffico di rete nella modalità NodePortLocal:

Traffico di rete in modalità NodePortLocal

La modalità NodePortLocal semplifica il traffico di rete instradandolo direttamente da SE ai pod. Questa modalità supporta gli SE condivisi per i cluster e impedisce l'esposizione delle porte in un cluster.

Per configurare la modalità di ingresso NodePortLocal in un cluster di gestione esistente:

  1. Creare un oggetto CR AKODeploymentConfig nel modo seguente:

    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. Applicare le modifiche nel cluster di gestione:

    kubectl --context=MGMT-CLUSTER-CONTEXT apply -f install-ako-for-l7-node-port-local.yaml
    
  3. Per abilitare la modalità di ingresso NodePortLocal nei cluster del carico di lavoro, creare un file YAML di configurazione del cluster del carico di lavoro e aggiungere il campo seguente:

    AVI_LABELS: '{"nsx-alb-node-port-local-l7":"true"}'
    
    ANTREA_NODEPORTLOCAL: "true"
    
  4. Distribuire il cluster del carico di lavoro utilizzando il comando tanzu cluster create.

Il provider di servizi di ingresso NSX ALB è ora configurato per utilizzare la modalità NodePortLocal sui cluster del carico di lavoro che hanno le AVI_LABELS corrispondenti al selettore del cluster nell'oggetto AKODeploymentConfig install-ako-l7-node-port-local.

Supporto dell'ingresso L7 di NSX ALB nel cluster di gestione

Se si utilizza NSX ALB come provider VIP dell'endpoint del cluster, nel cluster di gestione è supportata solo la modalità di ingresso NodePort. Se non si utilizza NSX ALB come provider VIP dell'endpoint del cluster, sono supportate tutte e tre le modalità di ingresso.

Per abilitare l'ingresso L7 nel cluster di gestione:

  1. Modificare il file AKODeploymentConfig nel cluster di gestione:

    kubectl --context=MGMT-CLUSTER-CONTEXT edit adc install-ako-for-management-cluster
    
  2. Nel file che verrà aperto, modificare il campo spec.extraConfigs.ingress come illustrato nell'esempio seguente:

      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