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

다음 태그를 IP 풀에 추가하여 SNAT IP 풀의 IP를 할당할 수 있는 Kubernetes 네임스페이스 또는 TAS 조직을 지정할 수 있습니다.
  • Kubernetes 네임스페이스의 경우: scope: ncp/owner, tag: ns:<namespace_UUID>
  • TAS 조직의 경우: scope: ncp/owner, tag: org:<org_UUID>
다음 명령 중 하나를 사용하여 네임스페이스 또는 조직 UUID를 가져올 수 있습니다.
kubectl get ns -o yaml
cf org <org_name> --guid
다음에 유의하십시오.
  • 각 태그는 하나의 UUID를 지정해야 합니다. 동일한 풀에 대해 여러 개의 태그를 생성할 수 있습니다.
  • 이전 태그를 기반으로 일부 네임스페이스 또는 조직에 IP를 할당한 후 태그를 변경했다면 이러한 IP는 Kubernetes 서비스 또는 TAS 애플리케이션의 SNAT 구성이 변경되거나 NCP가 다시 시작될 때까지 회수되지 않습니다.
  • 네임스페이스 및 TAS 조직 소유자 태그는 선택 사항입니다. 이러한 태그가 없으면 모든 네임스페이스 또는 TAS 조직이 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_RULE_OVERLAPPED - 새 SNAT 규칙을 생성했지만 SNAT 서비스의 포드가 다른 SNAT 서비스에도 속해 있습니다. 즉, 동일한 포드에 대해 SNAT 규칙이 여러 개 있습니다.
  • POOL_ACCESS_DENIED - ncp/snat_pool에서 지정한 IP 풀에 태그 scope: ncp/owner, tag: cluster:<cluster_name>가 없거나 풀의 소유자 태그가 할당 요청을 전송 중인 서비스의 네임스페이스와 일치하지 않습니다. 오류를 수정한 후에는 NCP를 다시 시작하거나 ncp/snat_pool 주석을 제거했다가 다시 추가해야 합니다.
다음에 유의하십시오.
  • 서비스를 구성하기 전에 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>가 없거나 풀의 소유자 태그가 할당 요청을 전송 중인 네임스페이스와 일치하지 않습니다. 오류를 수정한 후에는 NCP를 다시 시작하거나 ncp/snat_pool 주석을 제거했다가 다시 추가해야 합니다.
다음에 유의하십시오.
  • 주석에 하나의 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 풀로 변경할 수 있습니다.

서비스에 대한 SNAT IP 주소 구성

서비스에 주석을 추가하여 서비스에 대한 SNAT IP 주소를 구성할 수 있습니다. 예를 들면 다음과 같습니다.
    apiVersion: v1
    kind: Service
    metadata:
      name: svc-example
      annotations:
        ncp/static_snat_ip: "1.2.3.4"
    ...
주석 ncp/snat_pool도 지정한 경우 SNAT IP 주소는 지정된 SNAT 주소 풀에 있어야 합니다. 그렇지 않은 경우 ncp.ini에 지정된 외부 IP 풀에 있어야 합니다. 오류가 없는 경우 NCP는 이 서비스에 대해 주석이 지정된 SNAT IP 주소를 사용하여 SNAT 규칙을 생성하거나 업데이트합니다. 서비스의 ncp/snat_ip_status에 SNAT 규칙 구성 중 상태가 주석으로 추가됩니다. 가능한 값은 다음과 같습니다.
  • IP_ALLOCATED_SUCCESSFULLY
  • IP_ALREADY_ALLOCATED - IP 주소가 이미 할당되었습니다.
  • IP_NOT_IN_POOL - IP 주소가 SNAT IP 풀에 없습니다.
  • IP_POOL_EXHAUSTED - SNAT IP 풀이 모두 사용되었습니다.
  • SNAT_PROCESS_FAILED - 알 수 없는 오류가 발생했습니다.

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

네임스페이스에 주석을 추가하여 네임스페이스에 대한 SNAT IP 주소를 구성할 수 있습니다. 예를 들면 다음과 같습니다.
    apiVersion: v1
    kind: Namespace
    metadata:
      name: svc-example
      annotations:
        ncp/static_snat_ip: "1.2.3.4"
    ...
주석 ncp/snat_pool도 지정한 경우 SNAT IP 주소는 지정된 SNAT 주소 풀에 있어야 합니다. 그렇지 않은 경우 ncp.ini에 지정된 외부 IP 풀에 있어야 합니다. 오류가 없는 경우 NCP는 이 네임스페이스에 대해 주석이 지정된 SNAT IP 주소를 사용하여 SNAT 규칙을 생성하거나 업데이트합니다. 네임스페이스의 ncp/snat_ip_status에 SNAT 규칙 구성 중 상태가 주석으로 추가됩니다. 가능한 값은 다음과 같습니다.
  • IP_ALLOCATED_SUCCESSFULLY
  • IP_ALREADY_ALLOCATED - IP 주소가 이미 할당되었습니다.
  • IP_NOT_IN_POOL - IP 주소가 SNAT IP 풀에 없습니다.
  • IP_NOT_REALIZED - NSX-T에서 오류가 발생했습니다.
  • IP_POOL_EXHAUSTED - SNAT IP 풀이 모두 사용되었습니다.
  • SNAT_PROCESS_FAILED - 알 수 없는 오류가 발생했습니다.

TAS App에 대한 SNAT 풀 구성

기본적으로 NCP는 TAS(Tanzu 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만 사용하여 구성할 수 있습니다.
  • 구성을 변경하고 애플리케이션을 푸시하여 다른 IP 풀로 변경할 수 있습니다.

TAS 버전 3에 대한 SNAT 구성

TAS 버전 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

TAS 조직에 대한 SNAT IP 풀 또는 IP 주소 구성

다음 주석을 사용하여 TAS 조직에 대한 SNAT IP 풀 또는 IP 주소를 구성할 수 있습니다.
  • ncp_snat_pool - 풀이 존재해야 하며 태그 scope: ncp/owner, tag: cluster:<cluster_name>이 있어야 합니다.
  • ncp_snat_ip - IP 풀의 특정 주소입니다.
다음에 유의하십시오.
  • ncp_snat_poolncp_snat_ip도 지정한 경우 SNAT IP 주소는 지정된 SNAT 주소 풀에 있어야 합니다.
  • ncp_snat_ip만 지정된 경우 SNAT IP 주소는 ncp.ini에 지정된 외부 IP 풀에 있어야 합니다.
  • ncp_snat_pool을 지정하면 지정된 풀에서 SNAT IP 주소가 할당됩니다.
cf curl 명령을 사용하여 조직에 대한 SNAT IP를 구성할 수 있습니다. 예:
cf curl v3/organizations/<org-guid> -X PATCH  -d '{"metadata": {"annotations": {"ncp_snat_pool": "ann-ip-pool", "ncp_snat_ip": "1.2.3.4"}}}'
다음 명령을 사용하여 org-guid를 가져올 수 있습니다.
cf org <org-name> --guid
다음 명령을 사용하여 ncp_snat_ip 주석을 제거할 수 있습니다.
cf curl v3/organizations/<org-guid> -X PATCH  -d '{"metadata": {"annotations": {"ncp_snat_ip": null}}}'

NSX Manager UI로 이동하여 SNAT 규칙이 성공적으로 생성되었는지 확인할 수 있습니다. 오류를 확인하려면 NCP 로그를 확인하십시오.

NCP 로그에 POOL_ACCESS_DENIED 오류가 표시되면 ncp_snat_pool에서 지정된 IP 풀에 태그 scope: ncp/owner, tag: cluster:<cluster_name>이 없거나 풀의 소유자 태그가 할당 요청을 보내는 조직과 일치하지 않음을 의미합니다. 오류를 수정한 후에는 NCP를 다시 시작하거나 ncp_snat_pool 주석을 제거했다가 다시 추가해야 합니다.