Product Documentation

NetScaler MAS의 API 프록시 서버 역할

Nov 08, 2016

NetScaler MAS는 자체적인 관리 및 분석 기능을 위한 NITRO REST API 요청을 수신할 수 있을 뿐만 아니라 관리되는 인스턴스의 REST API 프록시 서버 역할도 수행할 수 있습니다. REST API 클라이언트는 API 요청을 관리되는 인스턴스로 직접 보내는 대신 NetScaler MAS로 API 요청을 보낼 수 있습니다. NetScaler MAS는 직접 응답해야 하는 API 요청과 변경되지 않은 상태로 관리되는 인스턴스로 전달해야 하는 API 요청을 구분할 수 있습니다.

API 프록시 서버인 NetScaler MAS는 다음과 같은 이점을 제공합니다.

  • API 요청의 유효성 검사. NetScaler MAS는 구성된 보안 및 RBAC(역할 기반 액세스 제어) 정책에 대해 모든 API 요청의 유효성을 검사합니다. 또한 NetScaler MAS는 테넌트를 인식하며 API 작업이 테넌트 경계를 넘지 않도록 보장합니다.

  • 중앙 집중식 감사. NetScaler MAS는 관리되는 인스턴스와 관련된 모든 API 작업의 감사 로그를 유지 관리합니다.

  • 세션 관리. NetScaler MAS는 관리되는 인스턴스와의 세션을 유지 관리해야 하는 API 클라이언트의 작업 부담을 덜어줍니다.

NetScaler MAS가 API 프록시 서버로 작동하는 방식

NetScaler MAS가 요청을 관리되는 인스턴스로 전달하도록 하려면 API 요청에 다음 HTTP 헤더 중 하나를 포함하도록 API 클라이언트를 구성합니다.

  • _MPS_API_PROXY_MANAGED_INSTANCE_NAME. 관리되는 인스턴스의 이름입니다.
  • _MPS_API_PROXY_MANAGED_INSTANCE_IP. 관리되는 인스턴스의 IP 주소입니다.
  • _MPS_API_PROXY_MANAGED_INSTANCE_ID. 관리되는 인스턴스의 ID입니다.

API 요청에 이러한 HTTP 헤더가 있으면 NetScaler MAS가 관리되는 인스턴스로 전달해야 하는 API 요청으로 식별할 수 있습니다. 헤더의 값은 NetScaler MAS가 요청을 전달해야 하는 관리되는 인스턴스를 식별하는 데 사용됩니다. 

다음 그림에 이 흐름이 설명되어 있습니다.
 

localized image

위 그림에서 볼 수 있는 것처럼, 요청에 이러한 HTTP 헤더 중 하나가 나타나면 NetScaler MAS는 요청을 다음과 같이 처리합니다.

  1. NetScaler MAS는 요청을 수정하지 않은 상태로 인스턴스 API 프록시 엔진으로 요청을 전달합니다.

  2. 인스턴스 API 프록시 엔진은 API 요청을 유효성 검사기로 전달하고 API 요청의 세부 정보를 감사 로그에 기록합니다.

  3. 유효성 검사기는 요청이 구성된 보안 정책, RBAC 정책, 테넌트 경계 등을 위반하지 않는지 확인합니다. 또한 관리되는 인스턴스가 사용 가능한지 여부를 확인하는 검사와 같은 추가적인 검사를 수행합니다.

API 요청이 유효하고 관리되는 인스턴스로 전달될 수 있으면 NetScaler MAS는 인스턴스 세션 관리자가 유지 관리하는 세션을 식별한 다음 해당 요청을 관리되는 인스턴스로 보냅니다.

NetScaler MAS를 API 프록시 서버로 사용하는 방법

다음 예제에서는 API 클라이언트가 IP 주소가 192.0.2.5인 NetScaler MAS 서버로 보내는 REST API 요청을 보여 줍니다. NetScaler MAS는 변경되지 않은 요청을 IP 주소가 192.0.2.10인 관리되는 인스턴스로 전달해야 합니다. 모든 예제에서 _MPS_API_PROXY_MANAGED_INSTANCE_IP 헤더를 사용합니다.

API 클라이언트가 NetScaler MAS로 API 요청을 보내려면 먼저 NetScaler MAS에 로그인하고 세션 ID를 얻은 다음 후속 API 요청에 세션 ID를 포함해야 합니다. 로그온 API 요청의 형식은 다음과 같습니다.

로그온하는 API 요청 복사

POST /nitro/v1/config/login HTTP/1.1

Host: 192.0.2.5

Cache-Control: no-cache

object=

{

"login":

    {

        "username":"nsroot",

        "password":"nsroot"

     }

}

로그온 요청에 대한 NetScaler MAS 응답에는 세션 ID가 포함됩니다. 다음 샘플 응답 본문은 세션 ID를 보여 줍니다.

{

  "errorcode": 0,

  "message": "Done",

  "operation": "add",

  "resourceType": "login",

  "username": "***********",

  "tenant_name": "Owner",

  "resourceName": "nsroot",

  "login": [

    {

      "tenant_name": "Owner",

      "permission": "superuser",

      "session_timeout": "36000",

      "challenge_token": "",

      "username": "",

      "login_type": "",

      "challenge": "",

      "client_ip": "",

      "client_port": "-1",

      "cert_verified": "false",

      "sessionid": "##D2BF9C5F40E5B2E884A9C45C89F0ADE24DA8A8169BE6358D39F5D471B73D",

      "token": "b2f3f935e93db6a"

    }

  ]

}

예제 1: 부하 분산 가상 서버 통계 검색

클라이언트는 NetScaler MAS에 다음과 같은 형식으로 API 요청을 보내야 합니다.

부하 분산 가상 서버 통계 검색 복사

GET /nitro/v1/stat/lbvserver HTTP/1.1

Host: 192.0.2.5

_MPS_API_PROXY_MANAGED_INSTANCE_IP: 192.0.2.10

SESSID: ##D2BF9C5F40E5B2E884A9C45C89F0ADE24DA8A8169BE6358D39F5D471B73D

Content-type: application/json

Cache-Control: no-cache

예제 2: 부하 분산 가상 서버 만들기

클라이언트는 NetScaler MAS에 다음과 같은 형식으로 API 요청을 보내야 합니다.

부하 분산 가상 서버 만들기 복사

POST /nitro/v1/config/lbvserver/sample_lbvserver HTTP/1.1

Host: 192.0.2.5

_MPS_API_PROXY_MANAGED_INSTANCE_IP: 192.0.2.10

SESSID: ##D2BF9C5F40E5B2E884A9C45C89F0ADE24DA8A8169BE6358D39F5D471B73D

Content-type: application/vnd.com.citrix.netscaler.lbvserver+json

Accept-type: application/vnd.com.citrix.netscaler.lbvserver+json

Cache-Control: no-cache

{"lbvserver":{"name":"sample_lbvserver","servicetype":"HTTP","ipv46":"10.102.1.11","port":"80"}}

예제 3: 부하 분산 가상 서버 수정

클라이언트는 NetScaler MAS에 다음과 같은 형식으로 API 요청을 보내야 합니다.

부하 분산 가상 서버 수정 복사

PUT /nitro/v1/config/lbvserver HTTP/1.1

Host: 192.0.2.5

SESSID: ##D2BF9C5F40E5B2E884A9C45C89F0ADE24DA8A8169BE6358D39F5D471B73D

_MPS_API_PROXY_MANAGED_INSTANCE_IP: 192.0.2.10

Content-type: application/vnd.com.citrix.netscaler.lbvserver+json

Accept-type: application/vnd.com.citrix.netscaler.lbvserver+json

Cache-Control: no-cache

{"lbvserver":{"name":"sample_lbvserver","appflowlog":"DISABLED"}}

예제 4: 부하 분산 가상 서버 삭제

클라이언트는 NetScaler MAS에 다음과 같은 형식으로 API 요청을 보내야 합니다.

부하 분산 가상 서버 삭제 복사

DELETE /nitro/v1/config/lbvserver/sample_lbvserver HTTP/1.1

Host: 192.0.2.5

SESSID: ##D2BF9C5F40E5B2E884A9C45C89F0ADE24DA8A8169BE6358D39F5D471B73D

_MPS_API_PROXY_MANAGED_INSTANCE_IP: 192.0.2.10

Cache-Control: no-cache