NetScaler CPX를 사용하여 Kubernetes 환경에서 횡적 트래픽 부하 분산

2017년 10월 5일

NetScaler CPX를 Kubernetes 클러스터에 배포하여 클러스터에서 컨테이너화된 응용 프로그램의 부하를 분산할 수 있습니다. NetScaler CPX는 다음 Kubernetes 버전에서 지원됩니다.

  • 1.5.x
  • 1.6.x

Kubernetes에 대한 자세한 내용은 http://kubernetes.io/docs/을 참조하십시오.

기본적으로, Kubernetes 클러스터에 NetScaler CPX를 배포하면 이는 기본적인 부하 분산 기능을 제공하는 Kubernetes의 kube-proxy를 대체합니다. kube-proxy를 NetScaler CPX로 교체하면 부하 분산 기능 외에도 NetScaler MAS(Management and Analytics System)를 사용해 다음과 같은 이점을 얻을 수 있습니다.

  • 클러스터에서 응용 프로그램 환경에 대한 가시성 확보
  • 클러스터에서 NetScaler CPX 인스턴스 관리 및 모니터링
  • StyleBook 기능을 사용하여 응용 프로그램의 복잡한 NetScaler 구성을 쉽게 관리

NetScaler MAS에 대한 자세한 내용은 NetScaler Management and Analytics System 제품 설명서를 참조하십시오.

NetScaler CPX가 Kubernetes 환경에서 횡적 트래픽 흐름의 부하를 분산하는 방법

Kubernetes 클러스터를 배포한 후에는 NetScaler MAS에서 Kubernetes 환경 세부 정보를 제공해 NetScaler MAS와 클러스터를 통합해야 합니다. NetScaler MAS는 서비스, 끝점, 수신 규칙 등 Kubernetes 리소스의 변경 사항을 모니터링합니다.

Kubernetes 클러스터에 NetScaler CPX 인스턴스를 배포하면 NetScaler CPX 인스턴스가 자동으로 NetScaler MAS에 등록됩니다. 등록 프로세스의 일부로 NetScaler MAS는 NetScaler CPX 인스턴스 IP 주소에 대한 정보와 NITRO REST API를 사용하여 구성하기 위해 인스턴스에 연결할 포트를 파악합니다.

NetScaler MAS의 Stylebook 엔진은 NetScaler MAS가 서비스, 끝점, 수신 규칙 등 Kubernetes에서 수집하는 모든 정보를 처리합니다. Stylebook 엔진은 기존에 프로비저닝된 Stylebook(com.citrix.adc.stylebooks/1.0/cs-lb-mon)을 사용하여 부하 분산에 필요한 가상 서버 및 서비스 그룹과 같은 NetScaler 관련 구성을 생성하고 NetScaler CPX 인스턴스에 해당 구성을 적용합니다. StyleBook에 대한 자세한 내용은 Stylebook을 참조하십시오.

다음 그림은 NetScaler CPX가 Kubernetes 클러스터에서 횡적 트래픽 흐름의 부하를 분산하는 방법을 보여줍니다. 지역화된 이미지

이 예에서는 Kubernetes 클러스터의 노드 1과 노드 2에 프런트 엔드 서비스 및 백엔드 서비스의 인스턴스가 포함되어 있습니다. NetScaler CPX 인스턴스가 노드 1 및 노드 2에 배포되면 NetScaler CPX가 자동으로 NetScaler MAS와 함께 등록됩니다. NetScaler MAS에서 Kubernetes 클러스터 세부 정보를 구성하여 NetScaler MAS와 Kubernetes 클러스터를 수동으로 통합해야 합니다.

클라이언트가 프런트 엔드 서비스를 요청하는 경우 수신 리소스는 두 노드에 대한 프런트 엔드 서비스의 인스턴스 간 부하를 분산해야 합니다. 프런트 엔드 서비스의 인스턴스에 클러스터의 백엔드 서비스에 있는 정보가 필요한 경우, 이 인스턴스는 해당 노드의 NetScaler CPX 인스턴스에 요청을 보냅니다. 해당 NetScaler CPX 인스턴스는 클러스터의 백엔드 서비스 간 요청의 부하를 분산함으로써 횡적 트래픽 흐름을 제공합니다.

Kubernetes 클러스터의 노드에 NetScaler CPX 인스턴스 배포

NetScaler CPX 인스턴스를 Kubernetes 클러스터의 노드에 Kubernetes 포드로 배포할 수 있습니다. NetScaler CPX 인스턴스는 디먼 세트 또는 매니페스트로 배포될 수 있습니다.

  • 디먼 세트 – NetScaler CPX 인스턴스를 디먼 세트 리소스로 배포하면 NetScaler CPX 인스턴스를 해당 노드의 포드로 배포할 수 있고 NetScaler CPX 인스턴스가 Kubernetes 클러스터와 결합된 새 노드에 배포되도록 보장할 수도 있습니다. 새 노드가 클러스터와 결합하면 디먼 세트에 지정된 NetScaler CPX 인스턴스가 자동으로 노드에 설치됩니다.
  • 매니페스트 – Kubernetes 매니페스트는 Kubernetes 개체 배포와 구성 지침을 포함한 YAML 또는 JSON 형식의 파일입니다. NetScaler CPX 인스턴스의 Kubernetes 매니페스트를 생성하고 이를 노드의 특정 디렉터리에 배치할 수 있습니다. 각 노드의 kubelet이 이 디렉터리를 모니터링하고 매니페스터에 지정된 대로 NetScaler CPX 인스턴스인 개체를 만듭니다.

사전 요구 사항

이러한 유형의 배포에서는 다음을 확인하십시오.

  • Kubernetes 클러스터를 만듭니다. 자세한 내용은 http://kubernetes.io/docs/를 참조하십시오.

    참고:

    NetScaler CPX는 Kubernetes v1.7을 지원합니다.

  • 최신 버전의 NetScaler CPX를 Docker Store에서 받아 사용하십시오.
  • NetScaler MAS를 배포합니다. 지침은 http://docs.citrix.com/ko-kr/netscaler-mas/11-1/single-server-deployment.html을 참조하십시오.
  • NetScaler MAS에 Kubernetes 클러스터를 구성합니다. 지침은Kubernetes 환경의 수신 컨트롤러로 NetScaler MAS 사용을 참조하십시오.
  • NetScaler MAS 서버의 지문을 확인합니다. 지문을 얻으려면 다음을 수행하십시오.
    1. NetScaler MAS에 로그온합니다.
    2. System(시스템) > System Administration(시스템 관리)으로 이동하고 View SSL Certificate(SSL 인증서 보기)을 클릭합니다.
    3. Certificate Details(인증서 세부 정보) 페이지의 Fingerprint(지문) 필드에서 NetScaler MAS 서버의 지문을 복사합니다.

지역화된 이미지

NetScaler CPX 인스턴스를 디먼 세트로 배포

디먼 세트 접근 방법을 통해 NetScaler CPX 인스턴스를 노드의 포드로 배포할 수 있습니다. 그러면 자동으로 이 인스턴스가 Kubernetes 클러스터를 결합한 각 새 노드에서 포드로 배포됩니다.

NetScaler CPX 인스턴스를 디먼 세트로 배포하려면 YAML 파일 또는 JSON 스크립트를 작성해야 합니다. 이 파일 또는 스크립트는 컨테이너 유형, CPX 이미지 파일 이름, NetScaler MAS 서버 IP 주소 및 NetScaler MAS 서버 지문을 지정합니다.

다음은 샘플 YAML 파일입니다.

    apiVersion: extensions/v1beta1

    kind: DaemonSet

    metadata:

      name: cpx

    spec:

      template:

        metadata:

          name: cpx

          labels:

            app: cpx-daemon

          annotations:

            NETSCALER_AS_APP: "True"

        spec:

          hostNetwork: true

          containers:

            - name: cpx

              image: "<repository>/cpx:12.0-64"

              securityContext:

                 privileged: true

              env:

              - name: "EULA"

                value: "yes"

              - name: "NS_NETMODE"

                value: "HOST"

              - name: "kubernetes_url"

                value: "https://10.217.212.231:6443"

              - name: "NS_MGMT_SERVER"

                value: "10.217.212.226"

              - name: "NS_MGMT_FINGER_PRINT"

                value: "74:EA:04:90:2C:FA:BF:7A:31:C9:52:64:D3:9C:BC:D3:O8:9F:9A:O4"

              - name: "NS_ROUTABLE"

                value: "FALSE"

              - name: "KUBERNETES_TASK_ID"

                valueFrom:

                   fieldRef:

                      fieldPath: metadata.name

              volumeMounts:

              imagePullPolicy: Always

다음 표는 샘플 디먼 세트에서 사용된 섹션, 매개 변수 및 환경 변수에 대해 설명합니다.

섹션 매개 변수 설명
컨테이너 name NetScaler CPX 컨테이너의 이름입니다.
  image 컨테이너 생성을 위한 이미지를 지정합니다.
SecurityContext privileged: true NetScaler CPX 컨테이너가 권한 있는 모드에서 실행되도록 지정합니다.
  name: “EULA” NetScaler CPX 관련 환경 변수로서 https://www.citrix.com/products/netscaler-adc/cpx-express.html에 있는 EULA(최종 사용자 사용권 계약)를 읽고 이해했음을 확인하는 데 필요합니다.
  name: “NS_NETMODE” NetScaler CPX 인스턴스가 호스트 모드에서 시작되도록 지정할 수 있게 해주는 NetScaler CPX 관련 환경 변수입니다. 호스트 모드에서 시작된 인스턴스는 해당 인스턴스의 관리 액세스를 위해 호스트 컴퓨터에 4개의 기본 iptable 규칙을 구성합니다. HTTP의 경우 9995, HTTPS의 경우 9996, SSH의 경우 9997, SNMP의 경우 9998 포트를 사용합니다. 다른 포트를 지정하려면 -e NS_HTTP_PORT, -e NS_HTTPS_PORT, -e NS_SSH_PORT, -e NS_SNMP_PORT와 같은 환경 변수를 사용할 수도 있습니다.
  name: “kubernetes_url” Kubernetes URL을 지정하는 NetScaler CPX 관련 환경 변수입니다.
  name: “NS_MGMT_SERVER” NetScaler MAS 서버 IP 주소를 설명하는 NetScaler CPX 관련 환경 변수입니다. NetScaler CPX 인스턴스가 배포되면 이는 자동으로 이 IP 주소에 NetScaler MAS 서버와 함께 등록합니다.
  name: “NS_MGMT_FINGER_PRINT” NetScaler MAS 지문을 정의하는 NetScaler CPX 관련 환경 변수입니다.
  name: “NS_ROUTABLE” NetScaler CPX 컨테이너가 non-IP-per-container 모드에서 실행되는지 아닌지를 지정하는 NetScaler CPX 관련 환경 변수입니다. 값을 FALSE로 설정하십시오.
  name: “KUBERNETES_TASK_ID” Kubernetes 클러스터에서 NetScaler CPX ID를 식별합니다.
imagePullPolicy   Kubernetes가 이미지를 가져오는 방법을 지정합니다.

매니페스트를 사용하여 NetScaler CPX 인스턴스 배포

Kubernetes 매니페스트는 Kubernetes 개체 배포와 구성 지침을 포함한 YAML 또는 JSON 형식의 파일입니다. NetScaler CPX 인스턴스의 Kubernetes 매니페스트를 생성하고 이를 노드의 특정 디렉터리에 배치할 수 있습니다. 각 노드의 kubelet이 이 디렉터리를 모니터링하고 매니페스터에 지정된 대로 NetScaler CPX 인스턴스인 개체를 만듭니다.

다음은 샘플 매니페스트입니다.

    apiVersion: v1

    kind: Pod

    metadata:

        name: cpx

    annotations:

        NETSCALER_AS_APP: "True"

    spec:

        hostNetwork: true

        containers:

            - name: cpx

              image: "<repository>/cpx:12.0-64"

        securityContext:

        privileged: true

        env:

            - name: "EULA"

            value: "yes”

            - name: "NS_NETMODE"

            value: "HOST"

            - name: "kubernetes_url"

            value: "https://10.217.212.231:6443"

            - name: "NS_MGMT_SERVER"

            value: "10.217.212.226"

            - name: "NS_MGMT_FINGER_PRINT"

            value: "74:EA:04:90:2C:FA:BF:7A:31:C9:52:64:D3:9C:BC:D3:O8:9F:9A:O4"

            - name: "NS_ROUTABLE"

            value: "FALSE"

            - name: "KUBERNETES_TASK_ID"

            valueFrom:

                fieldRef:

                fieldPath: metadata.name

        imagePullPolicy: Always

다음 표는 샘플 매니페스트에서 사용된 섹션, 매개 변수 및 환경 변수에 대해 설명합니다.

섹션 매개 변수 설명
컨테이너 name NetScaler CPX 컨테이너의 이름입니다.
  image 컨테이너 생성을 위한 이미지를 지정합니다.
SecurityContext privileged: true NetScaler CPX 컨테이너가 권한 있는 모드에서 실행되도록 지정합니다.
  name: “EULA” NetScaler CPX 관련 환경 변수로서 https://www.citrix.com/products/netscaler-adc/cpx-express.html에 있는 EULA(최종 사용자 사용권 계약)를 읽고 이해했음을 확인하는 데 필요합니다.
  name: “NS_NETMODE” NetScaler CPX 인스턴스가 호스트 모드에서 시작되도록 지정할 수 있게 해주는 NetScaler CPX 관련 환경 변수입니다. 호스트 모드에서 시작된 인스턴스는 해당 인스턴스의 관리 액세스를 위해 호스트 컴퓨터에 4개의 기본 iptable 규칙을 구성합니다. HTTP의 경우 9995, HTTPS의 경우 9996, SSH의 경우 9997, SNMP의 경우 9998 포트를 사용합니다. 다른 포트를 지정하려면 -e NS_HTTP_PORT, -e NS_HTTPS_PORT, -e NS_SSH_PORT, -e NS_SNMP_PORT와 같은 환경 변수를 사용할 수도 있습니다.
  name: “kubernetes_url” Kubernetes URL을 지정하는 NetScaler CPX 관련 환경 변수입니다.
  name: “NS_MGMT_SERVER” NetScaler MAS 서버 IP 주소를 설명하는 NetScaler CPX 관련 환경 변수입니다. NetScaler CPX 인스턴스가 배포되면 이는 자동으로 이 IP 주소에 NetScaler MAS 서버와 함께 등록합니다.
  name: “NS_MGMT_FINGER_PRINT” NetScaler MAS 지문을 정의하는 NetScaler CPX 관련 환경 변수입니다.
  name: “NS_ROUTABLE” NetScaler CPX 컨테이너가 non-IP-per-container 모드에서 실행되는지 아닌지를 지정하는 NetScaler CPX 관련 환경 변수입니다. 값을 FALSE로 설정하십시오.
  name: “KUBERNETES_TASK_ID” Kubernetes 클러스터에서 NetScaler CPX ID를 식별합니다.
imagePullPolicy   Kubernetes가 이미지를 가져오는 방법을 지정합니다.

NetScaler CPX를 사용하여 Kubernetes 환경에서 횡적 트래픽 부하 분산