NSX ALB를 L7 수신 컨트롤러로

NSX Advanced Load Balancer를 Kubernetes 클러스터에서 수신 컨트롤러로 사용하려면 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 수신 서비스 제공자가 이제 install-ako-l7-node-port AKODeploymentConfig 개체의 클러스터 선택기와 일치하는 AVI_LABELS가 있는 워크로드 클러스터에서 NodePort 모드를 사용하도록 구성되었습니다.

ClusterIP

ClusterIP 모드에서 네트워크 트래픽은 클라이언트에서 NSX ALB SE로 라우팅된 다음 포드로 라우팅됩니다. 이 모드에서는 수신 백엔드 서비스 유형으로 ClusterIP가 필요합니다. NSX ALB SE는 정적 경로를 활용하여 트래픽을 포드로 라우팅합니다.

다음 다이어그램에서는 네트워크 트래픽이 ClusterIP 모드에서 라우팅되는 방식을 설명합니다.

ClusterIP 모드의 네트워크 트래픽

ClusterIP 모드는 SE에서 포드로 직접 라우팅하여 네트워크 트래픽을 간소화합니다. 이 모드는 클러스터의 포트 노출도 방지합니다. 그러나 이 모드에서는 SE를 클러스터에 연결해야 하기 때문에 클러스터 간에 SES를 공유할 수 없습니다.

이 기능을 사용하도록 설정하려면 다음과 같이 하십시오.

  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 수신 서비스 제공자가 이제 install-ako-l7-cluster-ip AKODeploymentConfig 개체의 클러스터 선택기와 일치하는 AVI_LABELS가 있는 워크로드 클러스터에서 ClusterIP 모드를 사용하도록 구성되었습니다.

다른 워크로드 클러스터에서 ClusterIP 수신 모드를 사용하도록 설정하려면 Avi 컨트롤러에서 새 SE를 생성한 다음, 관리 클러스터에 파일을 적용하기 전에 새 SE의 이름을 지정하는 새 AKODeploymentConfig 개체를 생성해야 합니다.

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에서 포드로 직접 라우팅하여 네트워크 트래픽을 간소화합니다. 이 모드는 클러스터에 대해 공유 SES를 지원하고 클러스터의 포트 노출을 방지합니다.

기존 관리 클러스터에서 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