구성해야 하는 NSX-T Data Center 리소스로는 오버레이 전송 영역, Tier-0 논리적 라우터, 노드 VM 연결을 위한 논리적 스위치, Kubernetes 노드용 IP 블록 및 SNAT용 IP 풀 등이 있습니다.

중요: NSX-T Data Center 2.4 이상에서 실행 중인 경우 고급 네트워킹 및 보안 탭을 사용하여 NSX-T 리소스를 구성해야 합니다.

NCP 구성 파일 ncp.ini에서 NSX-T Data Center 리소스는 UUID 또는 이름을 사용하여 지정됩니다.

오버레이 전송 영역

NSX Manager에 로그인하고 시스템 > 패브릭 > 전송 영역으로 이동합니다. 컨테이너 네트워킹에 사용되는 오버레이 전송 영역을 찾거나 새 영역을 생성합니다.

ncp.ini[nsx_v3] 섹션에 overlay_tz 옵션을 설정하여 클러스터에 대한 오버레이 전송 영역을 지정합니다. 이 단계는 선택 사항입니다. overlay_tz를 설정하지 않으면 NCP가 Tier-0 라우터에서 오버레이 전송 영역 ID를 자동으로 검색합니다.

Tier-0 논리적 라우팅

NSX Manager에 로그인하고 고급 네트워킹 및 보안 > 네트워킹 > 라우터로 이동합니다. 컨테이너 네트워킹에 사용되는 라우터를 찾거나 새 라우터를 생성합니다.

ncp.ini[nsx_v3] 섹션에 tier0_router 옵션을 설정하여 클러스터에 대한 Tier-0 논리적 라우터를 지정합니다.

참고: 라우터는 활성-대기 모드로 생성해야 합니다.

논리적 스위치

노드가 데이터 트래픽에 사용하는 vNIC는 오버레이 논리적 스위치에 연결해야 합니다. 노드의 관리 인터페이스를 NSX-T Data Center에 연결하면 설정이 더 쉬워지지만 반드시 그렇게 할 필요는 없습니다. NSX Manager에 로그인하고 고급 네트워킹 및 보안 > 네트워킹 > 스위칭 > 스위치로 이동하여 논리적 스위치를 생성할 수 있습니다. 스위치에서 논리적 포트를 생성하고 노드 vNIC를 논리적 스위치에 연결합니다. 논리적 포트에는 다음과 같은 태그가 있어야 합니다.
  • 태그: <cluster_name>, 범위: ncp/cluster
  • 태그: <node_name>, 범위: ncp/node_name
<cluster_name> 값은 ncp.ini[coe] 섹션에 있는 cluster 옵션 값과 일치해야 합니다.

Kubernetes 포드용 IP 블록

NSX Manager에 로그인하고 고급 네트워킹 및 보안 > 네트워킹 > IPAM으로 이동하여 IP 블록을 하나 이상 생성합니다. CIDR 형식으로 IP 블록을 지정합니다.

ncp.ini[nsx_v3] 섹션에 container_ip_blocks 옵션을 설정하여 Kubernetes 포드에 대한 IP 블록을 지정합니다.

비 SNAT 네임스페이스(Kubernetes의 경우) 또는 클러스터(PCF의 경우)에 대한 IP 블록을 생성할 수도 있습니다.

ncp.ini[nsx_v3] 섹션에 no_snat_ip_blocks 옵션을 설정하여 비 SNAT IP 블록을 지정합니다.

NCP가 실행되는 동안 비 SNAT IP 블록을 생성하면 NCP를 다시 시작해야 합니다. 그렇지 않으면, NCP는 고갈될 때까지 공유 IP 블록을 계속 사용합니다.

참고: IP 블록을 생성할 때 접두사는 NCP의 구성 파일 ncp.ini에 있는 subnet_prefix 매개 변수의 값보다 크지 않아야 합니다. 자세한 내용은 ncp-rc.yml의 ncp.ini에 대한 Configmap 항목을 참조하십시오.

SNAT용 IP 풀

NSX Manager의 IP 풀은 SNAT 규칙을 사용하여 포드 IP를 변환하고 SNAT/DNAT 규칙을 사용하여 수신 컨트롤러를 노출하는 데 사용되는 IP 주소(Openstack 유동 IP와 동일) 할당에 사용됩니다. 이러한 IP 주소를 외부 IP라고도 합니다.

여러 Kubernetes 클러스터가 동일한 외부 IP 풀을 사용합니다. 각 NCP 인스턴스는 관리하는 Kubernetes 클러스터에 대해 이 풀의 하위 집합을 사용합니다. 기본적으로 포드 서브넷에 대해 동일한 서브넷 접두사가 사용됩니다. 다른 서브넷 크기를 사용하려면 ncp.ini[nsx_v3] 섹션에서 external_subnet_prefix 옵션을 업데이트합니다.

ncp.ini[nsx_v3] 섹션에 external_ip_pools 옵션을 설정하여 SNAT에 대한 IP 풀을 지정할 수 있습니다.

구성 파일을 변경하고 NCP를 다시 시작하여 다른 IP 풀로 변경할 수 있습니다.

SNAT IP 풀을 특정 Kebernetes 네임스페이스 또는 PCF 조직으로 제한

다음 태그를 IP 풀에 추가하여 SNAT IP 풀의 IP를 할당할 수 있는 Kubernetes 네임스페이스 또는 PCF 조직을 지정할 수 있습니다.
  • Kubernetes 네임스페이스의 경우: scope: ncp/owner, tag: ns:<namespace_UUID>
  • PCF 조직의 경우: scope: ncp/owner, tag: org:<org_UUID>
다음 명령 중 하나를 사용하여 네임스페이스 또는 조직 UUID를 가져올 수 있습니다.
kubectl get ns -o yaml
cf org <org_name> --guid
다음에 유의하십시오.
  • 각 태그는 하나의 UUID를 지정해야 합니다. 동일한 풀에 대해 여러 개의 태그를 생성할 수 있습니다.
  • 이전 태그를 기반으로 일부 네임스페이스 또는 조직에 IP를 할당한 후 태그를 변경했다면 이러한 IP는 Kubernetes 서비스 또는 PCF 애플리케이션의 SNAT 구성이 변경되거나 NCP가 다시 시작될 때까지 회수되지 않습니다.
  • 네임스페이스 및 PCF 조직 소유자 태그는 선택 사항입니다. 이러한 태그가 없으면 모든 네임스페이스 또는 PCF 조직이 SNAT IP 풀에서 할당된 IP를 가질 수 있습니다.

서비스에 대한 SNAT IP 풀 구성

서비스에 주석을 추가하여 서비스에 대한 SNAT IP 풀을 구성할 수 있습니다. 예를 들면 다음과 같습니다.
    apiVersion: v1
    kind: Service
    metadata:
      name: svc-example
      annotations:
        ncp/snat_pool: <external IP pool ID or name>
      selector:
        app: example
    ...

ncp/snat_pool에서 지정한 IP 풀에는 태그 scope: ncp/owner, tag: cluster:<cluster_name>이 있어야 합니다.

NCP는 이 서비스에 대한 SNAT 규칙을 구성합니다. 규칙의 소스 IP는 백엔드 포드 집합입니다. 대상 IP는 지정된 외부 IP 풀에서 할당된 SNAT IP입니다. NCP가 SNAT 규칙을 구성할 때 오류가 발생하면 서비스에 ncp/error.snat: <error> 주석이 추가됩니다. 다음과 같은 오류가 발생할 수 있습니다.
  • IP_POOL_NOT_FOUND - NSX Manager에서 SNAT IP 풀을 찾을 수 없습니다.
  • IP_POOL_EXHAUSTED - SNAT IP 풀이 모두 사용되었습니다.
  • IP_POOL_NOT_UNIQUE - ncp/snat_pool에서 지정한 풀이 NSX Manager에서 여러 풀을 나타냅니다.
  • SNAT_POOL_ACCESS_DENY - 풀의 소유자 태그와 할당 요청을 보내는 서비스의 네임스페이스가 일치하지 않습니다.
  • SNAT_RULE_OVERLAPPED - 새 SNAT 규칙을 생성했지만 SNAT 서비스의 포드가 다른 SNAT 서비스에도 속해 있습니다. 즉, 동일한 포드에 대해 SNAT 규칙이 여러 개 있습니다.
  • POOL_ACCESS_DENIED - ncp/snat_pool에서 지정한 IP 풀에 태그 scope: ncp/owner, tag: cluster:<cluster_name>가 없거나 풀의 소유자 태그가 할당 요청을 전송 중인 서비스의 네임스페이스와 일치하지 않습니다.
다음에 유의하십시오.
  • 서비스를 구성하기 전에 ncp/snat_pool에 지정된 풀이 NSX-T Data Center에 이미 있어야 합니다.
  • NSX-T Data Center에서 서비스에 대한 SNAT 규칙의 우선 순위는 프로젝트의 우선 순위보다 높습니다.
  • 포드가 여러 SNAT 규칙으로 구성된 경우 규칙 하나만 작동합니다.
  • 주석을 변경하고 NCP를 다시 시작하여 다른 IP 풀로 변경할 수 있습니다.

네임스페이스에 대한 SNAT IP 풀 구성

네임스페이스에 주석을 추가하여 네임스페이스에 대한 SNAT IP 풀을 구성할 수 있습니다. 예를 들면 다음과 같습니다.
    apiVersion: v1
    kind: Namespace
    metadata:
      name: ns-sample
      annotations:
        ncp/snat_pool: <external IP pool ID or name>
    ...
NCP는 이 네임스페이스에 대한 SNAT 규칙을 구성합니다. 규칙의 소스 IP는 백엔드 포드 집합입니다. 대상 IP는 지정된 외부 IP 풀에서 할당된 SNAT IP입니다. NCP가 SNAT 규칙을 구성할 때 오류가 발생하면 네임스페이스에 ncp/error.snat: <error> 주석이 추가됩니다. 다음과 같은 오류가 발생할 수 있습니다.
  • IP_POOL_NOT_FOUND - NSX Manager에서 SNAT IP 풀을 찾을 수 없습니다.
  • IP_POOL_EXHAUSTED - SNAT IP 풀이 모두 사용되었습니다.
  • IP_POOL_NOT_UNIQUE - ncp/snat_pool에서 지정한 풀이 NSX Manager에서 여러 풀을 나타냅니다.
  • POOL_ACCESS_DENIED - ncp/snat_pool에서 지정한 IP 풀에 태그 scope: ncp/owner, tag: cluster:<cluster_name>가 없거나 풀의 소유자 태그가 할당 요청을 전송 중인 네임스페이스와 일치하지 않습니다.
다음에 유의하십시오.
  • 주석에 하나의 SNAT IP 풀만 지정할 수 있습니다.
  • ncp.ini에는 SNAT IP 풀을 지정할 필요가 없습니다.
  • ncp/snat_pool에서 지정한 IP 풀에는 태그 scope: ncp/owner, tag: cluster:<cluster_name>이 있어야 합니다.
  • ncp/snat_pool에서 지정한 IP 풀에 네임스페이스 태그 scope: ncp/owner, tag: ns:<namespace_UUID>도 있을 수 있습니다.
  • ncp/snat_pool 주석이 누락된 경우 네임스페이스는 클러스터에 대한 SNAT IP 풀을 사용합니다.
  • 주석을 변경하고 NCP를 다시 시작하여 다른 IP 풀로 변경할 수 있습니다.

PAS App에 대한 SNAT 풀 구성

기본적으로 NCP는 PAS(Pivotal Application Service) 조직을 위한 SNAT IP를 구성합니다. SNAT IP 풀 정보가 포함된 manifest.xml을 사용하여 애플리케이션을 생성함으로써 애플리케이션을 위한 SNAT IP를 구성할 수 있습니다. 예를 들면 다음과 같습니다.
    applications:
      - name: frontend
        memory: 32M
        disk_quota: 32M
        buildpack: go_buildpack
        env:
          GOPACKAGENAME: example-apps/cats-and-dogs/frontend
          NCP_SNAT_POOL: <external IP pool ID or name>
    ...
NCP는 이 애플리케이션에 대한 SNAT 규칙을 구성합니다. 규칙의 소스 IP는 인스턴스 IP의 집합이고 대상 IP는 외부 IP 풀에서 할당된 SNAT IP입니다. 다음에 유의하십시오.
  • 애플리케이션이 푸시되기 전에 NCP_SNAT_POOL에 지정된 풀이 NSX-T Data Center에 이미 있어야 합니다.
  • 애플리케이션에 대한 SNAT 규칙의 우선 순위는 조직에 대한 SNAT 규칙의 우선 순위보다 높습니다.
  • 애플리케이션은 하나의 SNAT IP만 사용하여 구성할 수 있습니다.
  • 구성을 변경하고 NCP를 다시 시작하여 다른 IP 풀로 변경할 수 있습니다.

PCF 버전 3에 대한 SNAT 구성

PCF 버전 3에서는 다음 두 가지 방법 중 하나로 SNAT를 구성할 수 있습니다.

  • 애플리케이션을 생성할 때 manifest.yml에서 NCP_SNAT_POOL을 구성합니다.
    예를 들어 애플리케이션의 이름이 bread이고 manifest.yml에 다음과 같은 정보가 포함되어 있다고 가정합니다.
    applications:
    - name: bread
      stack: cflinuxfs2
      random-route: true
      env:
        NCP_SNAT_POOL: AppSnatExternalIppool
      processes:
      - type: web
        disk_quota: 1024M
        instances: 2
        memory: 512M
        health-check-type: port
      - type: worker
        disk_quota: 1024M
        health-check-type: process
        instances: 2
        memory: 256M
        timeout: 15
    다음 명령을 실행합니다.
    cf v3-push bread
    cf v3-apply-manifest -f manifest.yml
    cf v3-apps
    cf v3-restart bread
  • cf v3-set-env 명령을 사용하여 NCP_SNAT_POOL을 구성합니다.
    다음 명령을 실행합니다(애플리케이션의 이름이 app3이라고 가정함).
    cf v3-set-env app3 NCP_SNAT_POOL AppSnatExternalIppool
    (optional) cf v3-stage app3 -package-guid <package-guid> (You can get package-guid with "cf v3-packages app3".)
    cf v3-restart app3

(선택 사항)(Kubernetes만 해당) 방화벽 마커 섹션

관리자가 방화벽 규칙을 생성하고 해당 규칙이 NCP가 생성한 네트워크 정책 기반의 방화벽을 방해하지 않게 하려면 NSX Manager에 로그인하고 보안 > 분산 방화벽 > 일반으로 이동한 후 방화벽 섹션을 두 개 생성합니다.

ncp.ini[nsx_v3] 섹션에 bottom_firewall_section_marker 옵션과 top_firewall_section_marker 옵션을 설정하여 마커 방화벽 섹션을 지정합니다.

하단 방화벽 섹션은 상단 방화벽 섹션보다 아래에 있어야 합니다. 이러한 방화벽 섹션을 생성하면 NCP가 분리를 위해 생성하는 모든 방화벽 섹션이 하단 방화벽 섹션의 위에 생성되고 NCP가 정책을 위해 생성하는 모든 방화벽 섹션이 상단 방화벽 섹션의 아래에 생성됩니다. 이러한 마커 섹션을 생성하지 않으면 모든 분리 규칙이 하단에 생성되고 모든 정책 섹션이 상단에 생성됩니다. 클러스터 하나에 값이 동일한 마커 방화벽 섹션을 여러 개 사용할 수 없으며, 이렇게 할 경우 오류가 발생합니다.