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_pool 및 ncp_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 주석을 제거했다가 다시 추가해야 합니다.