Product Documentation

L7 콘텐츠 스위칭 구성

Dec 29, 2016

NetScaler MAS는 OpenStack과 오케스트레이션하여 NetScaler 인스턴스에 L7(Layer 7) 스위칭 또는 콘텐츠 기반 스위칭 기능을 구성합니다. 콘텐츠 스위칭은 특정 유형의 요청을 특정 서버로 보낸다는 점에서 단순한 부하 분산과 차이가 있습니다. OpenStack에서 NetScaler 인스턴스를 공급자로 하여 L7 구성이 생성되면 NetScaler MAS가 NetScaler 인스턴스를 할당하고, 해당 L7 구성에 따라 콘텐츠 스위칭 및 Responder 구성을 배포합니다. 그러면 NetScaler 인스턴스가 사용자 요청의 응용 프로그램 계층 특성을 기반으로 해당 요청을 배포하고 부하 분산할 수 있습니다. 

OpenStack L7 부하 분산 기능은 부하 분산과 콘텐츠 스위칭을 결합하여 특정 유형의 콘텐츠를 최적으로 제공할 수 있도록 합니다. 이 기능은 콘텐츠에 적용되는 정책만 실행하여 부하 분산 장치의 성능을 개선합니다. 또한 L7 부하 분산 기능은 응용 프로그램 인프라의 효율성을 높입니다. 유형, URI 또는 데이터에 따라 콘텐츠를 구분하는 기능을 통해 응용 프로그램 인프라에서 물리적 리소스를 더욱 효과적으로 할당할 수 있습니다. 예를 들어 최종 사용자가 "http://example-sports.com/about-us"로 브라우징하는 작업은 해당 회사와 서비스에 대한 콘텐츠를 호스팅하는 서버 풀에서 처리되며, 사용자가 "http://example-sports.com/shopping-cart-football"로 브라우징하는 작업은 온라인 구매를 지원하는 다른 서버 풀에서 처리됩니다. 

L7 스위칭에서 부하 분산 장치는 콘텐츠 스위칭 가상 서버로 구현되어 사용자의 HTTP 요청을 받고 해당 요청을 응용 프로그램 서버로 분산시킵니다. L7 스위칭 또는 콘텐츠 스위칭을 통해 한 곳에서 다양한 백엔드 서비스(예: 웹 응용 프로그램, 웹 서비스 포털, 웹 메일은 물론 모바일 관리, 다양한 언어의 콘텐츠 등)에 액세스할 수 있습니다. 즉, 사용자에게 제공하는 모든 서비스에 대해 하나의 공용 IP 주소를 제공할 수 있습니다.

저수준 부하 분산과 달리 L7 스위칭에서는 풀의 모든 서버가 동일한 콘텐츠를 포함할 필요가 없습니다. L7 스위칭을 사용한 부하 분산 장치 구성에서는 서로 다른 풀의 응용 프로그램 또는 백엔드 서버가 서로 다른 콘텐츠를 갖는 것으로 예상합니다. L7 스위치는 URI, 호스트, HTTP 헤더 또는 기타 응용 프로그램 메시지 내 요소를 기반으로 요청을 보낼 수 있습니다. 응용 프로그램 서버는 기본적으로 특정 유형의 콘텐츠를 처리해야 합니다. 예를 들어 한 서버는 이미지만 처리하고, 한 서버는 PHP 및 ASP와 같은 서버 측 스크립팅 언어를 실행하며, 한 서버는 HTML, CSS, JavaScript와 같은 정적 콘텐츠를 처리할 수 있습니다.

L7 규칙

다음 특성이 트래픽을 평가하기 위한 규칙에 적용되며 규칙에 정의된 값과 비교됩니다.

  • hostname: HTTP 요청의 호스트 이름이 규칙의 값 매개 변수와 비교됩니다. (예: "www.example-sports.com")
  • path: HTTP URI의 경로 부분이 규칙의 값 매개 변수와 비교됩니다. (예: "www.example-sports.com/shopping-cart/football_pump.html")
  • file_type: URI의 마지막 부분이 규칙의 값 매개 변수와 비교됩니다. (예: txt, html, jpg, png, xls 등)
  • header: 키 매개 변수에 정의된 헤더가 규칙의 값 매개 변수와 비교됩니다.
  • cookie: 키 매개 변수를 통해 이름이 지정된 쿠키가 규칙의 값 매개 변수와 비교됩니다. 쿠키 요청 헤더 필드 값에는 해당 URL에 저장되는 정보의 이름 및 값 쌍이 포함됩니다. 일반적인 구문은 다음과 같습니다. Cookie: name=value. 예를 들어 ‘football-‘로 시작되는 값을 갖는 ‘stores’라는 이름의 쿠키를 찾는 규칙은 다음과 같습니다. type = Cookie, compare_type=StartsWith, key = stores value = football-.

비교 유형

L7 정책은 트래픽을 평가할 때 규칙에 정의된 특성과 다음 식을 비교합니다.

  • regex: 일치하는 Perl 유형의 정규식
  • starts_with: 시작 문자열
  • ends_with: 끝 문자열
  • contains: 포함 문자열
  • equal_to: 같은 문자열

참고: hostname, path, header 및 cookie 특성은 모든 비교 유형을 지원하지만 file_type 특성은 regex 및 equal_to만 지원합니다.

L7 정책

L7 정책은 수신되는 HTTP 트래픽을 처리하고 정책에 정의된 모든 규칙과 일치하는 경우 "true" 값을 반환합니다. 

모든 L7 정책에서 모든 규칙은 AND 연산자와 논리적으로 연결됩니다. 요청이 모든 규칙과 일치해야만 정책이 "true" 값을 반환합니다. 부하 분산 장치가 수행하는 작업은 정책에서 반환되는 값을 기반으로 합니다. 동일한 작업을 수행하는 보조 정책을 만들어 규칙 간에 논리적 OR 연산을 수행할 수 있습니다.

예를 들어 수신되는 HTTP 요청에 "EXAMPLE-SPORTS," "SPORTS-FOOTBALL" 또는 "EXAMPLE-FOOTBALL"이라는 단어가 포함될 수 있는 정책 하나를 만들 수 있습니다. 그러면 부하 분산 장치가 이러한 요청을 Example-sports 전자 상거래 회사의 서버 풀로 전달하는 적절한 작업을 수행하여 요청된 콘텐츠를 처리합니다. 동일한 작업을 수행하지만 "example-sports," "example-sports-football" 또는 "example-football"과 일치하는 또 다른 정책을 만들 수 있습니다. 사용자가 이러한 6개의 키워드 중 어느 하나를 사용하여 HTTP 요청을 보내면 부하 분산 장치는 해당 요청을 Example-Sports 서버에 전달합니다.

정책에 정의된 규칙에 따라 L7 정책은 다음 작업 중 하나를 수행할 수 있습니다.

  • 풀로 리디렉션 - L7 정책에 연결된 규칙을 통해 식별된 응용 프로그램 서버 풀에 요청을 전달합니다. 즉, 도메인 이름에 따라 특정 부하 분산 장치 풀로 요청을 보내는 응용 프로그램 규칙을 만들 수 있습니다. 예를 들어 example-football.com에 대한 일부 요청은 pool_1로 보내고 example-sports-online_purchase.com에 대한 다른 요청을 pool_2로 보내는 규칙을 만들 수 있습니다.
  • URL로 리디렉션 - 위치 응답 헤더에 새 위치가 포함된 리디렉션 HTTP 응답을 클라이언트에 보냅니다. 브라우저가 주소 표시줄을 새 위치로 업데이트하고 새 요청을 실행합니다. 사용 사례는 다양합니다. 예를 들어 웹 사이트 주소가 변경된 경우 요청을 삭제하는 대신 새 주소로 요청을 리디렉션할 수 있습니다. 또는 웹 사이트 유지 관리 중에 사용자를 읽기 전용 사이트로 리디렉션할 수 있습니다.
  • 거부 - 요청을 거부하고 추가 작업을 수행하지 않습니다. 예를 들어 제한된 웹 페이지에 대한 사용자의 액세스를 거부하는 401 Unauthorized(권한 없음) 응답을 반환할 수 있습니다.

콘텐츠 스위칭 구성은 콘텐츠 스위칭 가상 서버, 부하 분산 가상 서버 및 서비스로 구성된 부하 분산 설정, 콘텐츠 스위칭 정책으로 구성됩니다. 콘텐츠 스위칭 가상 서버 및 정책을 만든 후에 각 정책을 콘텐츠 스위칭 가상 서버에 바인딩합니다. 정책을 콘텐츠 스위칭 가상 서버에 바인딩할 때 대상 부하 분산 가상 서버를 지정합니다. 요청이 콘텐츠 스위칭 가상 서버에 도달하면 가상 서버가 연결된 콘텐츠 스위칭 정책을 해당 요청에 적용합니다. 정책의 우선 순위에 따라 콘텐츠 스위칭 가상 서버에 바인딩된 정책이 평가되는 순서가 정의됩니다.

수신기 ID가 있는 모든 풀은 트래픽이 전환되는 가상 서버의 기본 풀로 할당될 수 있습니다. 풀이 수신기에 약하게 바인딩되며 L7 정책의 적용을 통해서만 수신기에 연결됩니다.  또한 수신기에 연결할 필요 없이 부하 분산 장치 아래에 직접 풀을 만들 수도 있습니다. 그 경우 풀이 "pending_create" 상태로 생성됩니다. L7 정책이 수신기와 강하게 바인딩되기 때문에 풀이 "active" 상태가 되고 트래픽 요청을 받도록 하려면 풀 ID가 포함된 L7 정책을 만들고 적용해야 합니다. 

풀은 여러 L7 정책을 통해 처리될 수 있지만 하나 이상의 정책이 연결되어 있는 경우 "active" 상태로 유지됩니다. 마지막 정책이 제거되면 또 다른 정책을 만들고 연결할 때까지 풀이 "pending_create" 상태에 있게 됩니다. 풀 자체를 제거할 경우, 수신될 모든 HTTP 요청이 기본 풀로 리디렉션됩니다.

OpenStack L7 정책과 NetScaler 엔터티 간 매핑

OpenStack

NetScaler 엔터티

설명

REDIRECT_TO_POOL 작업을 수행하는 L7 정책

콘텐츠 스위칭 정책 > 콘텐츠 스위칭 작업

NetScaler MAS는 콘텐츠 스위칭 가상 서버에 바인딩되고 콘텐츠 스위칭 작업에 연결된 콘텐츠 스위칭 정책을 만들어서 콘텐츠를 검색하고 사용자에게 표시하는 대상 풀의 응용 프로그램 서버를 지정합니다.

REDIRECT_TO_URL 작업을 수행하는 L7 정책

Responder 정책 > Responder 작업

NetScaler MAS는 콘텐츠 스위칭 가상 서버에 바인딩되고 Responder 작업에 연결된 Responder 정책을 만들어 사용자에게 표시할 대상 URL을 지정합니다.

REJECT 작업을 수행하는 L7 정책

Responder 정책 > 요청 삭제

NetScaler MAS는 콘텐츠 스위칭 가상 서버에 바인딩되고 Responder 작업에 연결된 Responder 정책을 만들어 요청을 삭제합니다.

"true"로 평가된 L7 정책 작업이 트래픽을 "create_pending" 상태인 풀로 리디렉션할 경우 NetScaler MAS는 부하 분산 가상 서버와 함께 지정된 풀을 구현합니다. NetScaler MAS는 L7 정책에서 콘텐츠 스위칭 정책을 만들고 해당 콘텐츠 스위칭 작업을 사용하여 해당 풀에 연결된 부하 분산 가상 서버로 요청을 리디렉션합니다. 보조 L7 정책이 동일한 풀로 리디렉션하는 경우 NetScaler MAS는 콘텐츠 스위칭 정책과 콘텐츠 스위칭 작업을 만들어 해당 풀에 연결된 기존 부하 분산 가상 서버로 트래픽을 리디렉션합니다.

정책 위치 지정

OpenStack의 L7 정책 평가는 우선 순위에 따라 결정됩니다. OpenStack에서는 기본적으로 정책이 생성된 순서대로 우선 순위가 할당됩니다. 먼저 생성된 정책에 "1"번이 지정되고 이후에 생성된 정책에 이어서 번호가 지정됩니다. 하지만 정책의 우선 순위를 변경하여 다른 우선 순위를 할당할 수 있습니다. 정책은 항상 우선 순위에 따라 평가됩니다.  특정 요청과 일치하는 첫 번째 정책이 항상 먼저 실행됩니다.

정책을 만들 때는 다음 사항에 유의하십시오.

  • 기존 정책과 동일한 우선 순위를 새 정책에 할당하는 경우 새 정책이 우선적으로 적용되고 기존 정책의 우선 순위가 밀려납니다. 필요한 경우 정책이 평가되는 순서를 유지하기 위해 다른 정책의 우선 순위도 낮아집니다.
  • 우선 순위를 지정하지 않고 새 정책을 생성하는 경우 새 정책이 목록에 추가되기만 합니다.
  • 새 정책을 만들고 목록에 이미 있는 정책의 개수보다 큰 위치를 할당하는 경우 새 정책이 목록에 추가될 때 다음으로 사용 가능한 우선 순위를 갖습니다. 예를 들어 우선 순위가 1, 2, 3인 A, B, C 정책이 있는 경우 정책을 만들고 우선 순위를 8로 할당하면 새 정책의 우선 순위가 4가 됩니다.
  • 목록에 정책을 추가하거나 목록에서 정책을 삭제하면 번호를 건너뛰지 않고 정책 위치 값들이 1부터 재지정됩니다. 예를 들어 위치 값이 1, 2, 3, 4인 A, B, C, D 정책이 있을 때 목록에서 B 정책을 삭제하면 C 정책이 두 번째 위치로, D 정책이 세 번째 위치로 변경됩니다.

NetScaler MAS에서는 항상 csvserver에 연결된 기본 정책이 우선 순위 1을 갖습니다. 이 기본 정책은 lbvserver가 모든 시점에 처리해야 하는 TCP 연결 수를 지정합니다.  따라서 NetScaler에서 해당 Responder 정책과 콘텐츠 스위칭 정책이 생성되는 경우 이러한 정책에는 항상 해당 L7 정책보다 하나 더 높은 우선 순위가 할당됩니다. 예를 들어 L7 정책의 우선 순위가 1로 평가되면 콘텐츠 스위칭 정책이 우선 순위 2를 갖도록 생성되고, 마찬가지로, L7 정책의 우선 순위가 2로 평가되면 Responder 정책이 우선 순위 3를 갖도록 생성됩니다.

OpenStack에서는 "reject" 및/또는 "redirect_to_url" 정책이 먼저 평가된 후 "redirect_to_pool" 정책이 평가됩니다. NetScaler 인스턴스에서는 Responder 정책이 항상 먼저 평가되어 요청을 삭제하거나 사용자에게 리디렉션된 웹 주소를 표시하며, 콘텐츠 스위칭 정책이 마지막에 평가됩니다. 콘텐츠 스위칭 정책과 Responder 정책이 상호 배타적인 경우 일반적으로 이 평가 순서가 충돌을 일으키지 않습니다. 즉, 두 L7 정책이 동일한 식을 가져서는 안 됩니다. 충돌을 방지하기 위해 파생된 식이 Responder 정책과 콘텐츠 스위칭 정책에 추가되어야 합니다. 예를 들어 "sports-football.com"에 대한 모든 요청을 거부하는 식 하나와 "example-sports-football.com"에 대한 모든 요청을 허용하는 식 하나를 작성합니다. 요청을 거부하는 모든 Responder 정책이 평가 목록 최상위에 배열되고, 웹 이동용 Responder 정책이 그 다음에, 콘텐츠 스위칭 정책이 그 다음에 배열되도록 L7 정책을 만듭니다.

NetScaler MAS에서는 항상 csvserver에 연결된 기본 정책이 우선 순위 1을 갖습니다. 이 기본 정책은 lbvserver가 모든 시점에 처리해야 하는 TCP 연결 수를 지정합니다.  따라서 NetScaler에서 해당 Responder 정책과 콘텐츠 스위칭 정책이 생성되는 경우 이러한 정책에는 항상 해당 L7 정책보다 하나 더 높은 우선 순위가 할당됩니다. 예를 들어 L7 정책의 우선 순위가 1로 평가되면 콘텐츠 스위칭 정책이 우선 순위 2를 갖도록 생성되고, 마찬가지로, L7 정책의 우선 순위가 2로 평가되면 Responder 정책이 우선 순위 3를 갖도록 생성됩니다. 

OpenStack에서는 "reject" 및/또는 "redirect_to_url" 정책이 먼저 평가된 후 "redirect_to_pool" 정책이 평가됩니다. NetScaler에서는 Responder 정책이 항상 먼저 평가되어 요청을 삭제하거나 사용자에게 리디렉션된 웹 주소를 표시하며, 콘텐츠 스위칭 정책이 마지막에 평가됩니다. 콘텐츠 스위칭 정책과 Responder 정책이 상호 배타적인 경우 일반적으로 이 평가 순서가 충돌을 일으키지 않습니다. 즉, 두 L7 정책이 유사한 식을 가져서는 안 됩니다. 충돌을 방지하기 위해 파생된 유사한 식이 Responder 정책과 콘텐츠 스위칭 정책에 추가되어야 합니다. 예를 들어 "sports-football.com"에 대한 모든 요청을 거부하는 식 하나와 "example-sports-football.com"에 대한 모든 요청을 허용하는 식 하나를 작성합니다. 요청을 거부하는 모든 Responder 정책이 평가 목록 최상위에 배열되고, 웹 이동용 Responder 정책이 그 다음에, 콘텐츠 스위칭 정책이 그 다음에 배열되도록 L7 정책을 만듭니다.

구성 작업

L7 정책 및 작업 구현은 Neutron LBaaS 명령을 통해 수행됩니다.

OpenStack에서 환경 변수를 설정하고 부하 분산 장치(예: LB1)를 만듭니다. 부하 분산 장치가 생성된 후 수신기와 풀(예: L1, P1, P2)을 만들고 풀에 구성원과 모니터를 추가합니다. 예를 들어 P1은 L1의 기본 풀이고, P2는 LB1에 연결된 풀로서 응용 프로그램 서버를 관리합니다.

명령줄을 사용하여 LBaaS V2를 구성하는 방법에 대한 자세한 내용은 명령줄을 사용하여 LBaaS V2 구성을 참조하십시오.

다음 명령은 정책을 만들고 특정 작업을 정의합니다.

요청을 삭제하는 L7 정책 만들기

명령 복사

neutron lbaas-l7policy-create --name <L7 policy name> --listener <listener name> --action<action-name>

예제:

neutron lbaas-l7policy-create --name policy11 --action REJECT --listener L1

위의 명령은 Responder 정책인 policy11을 만들고 콘텐츠 스위칭 서버에 바인딩하여 요청을 거부합니다. 이 정책에 대한 규칙이 생성되지 않았기 때문에 정책이 "false"로 평가되고 요청이 거부됩니다. 

특정 URL로 요청을 리디렉션하는 L7 정책 생성

명령 복사

neutron lbaas-l7policy-create --name <L7 policy name> --listener <listener name> --action <action-name> --redirect-url <redirect-url>

예제:

neutron lbaas-l7policy-create --name policy12 --action REDIRECT_TO_URL --listener admin-list1 --redirect-url http://example-sports/about-us.html

위의 명령은 특정 URL로 요청을 리디렉션하는 Responder 작업을 만들고, 작업을 포함한 Responder 정책을 만들어 이 정책을 콘텐츠 스위칭 가상 서버에 바인딩합니다. 

명령 복사

neutron lbaas-l7rule-create --type HOST_NAME --compare-type CONTAINS --value <value-string> <L7 policy name>

명령 복사

neutron lbaas-l7rule-create --type PATH --compare-type CONTAINS --value <value-string> <L7 policy name>

위의 두 규칙을 AND 연산자와 연결하여 Responder 정책에 대한 식을 파생할 수 있습니다.

풀로 요청을 리디렉션하는 L7 정책 생성

명령 복사

neutron lbaas-l7policy-create --name <L7 policy name> --listener <listener name> --action <action-name> --redirect-pool <redirect-pool>

예제:

neutron lbaas-l7policy-create --name policy13 --action REDIRECT_TO_POOL --listener admin-list1 --redirect-pool admin-pool2

이것이 첫 번째 L7 정책인 경우 위의 명령은 LB1과 함께 P2를 구현하고 콘텐츠 스위칭 리디렉션 작업을 만들어 요청을 LB1으로 리디렉션합니다. P2가 이미 있는 경우 이 명령은 콘텐츠 스위칭 리디렉션 작업을 만들어 요청을 LB1으로 리디렉션합니다.