Cloud 환경설정

본 부록에서는 JEUS를 클라우드 환경에서 이용하는 방법에 대해서 설명한다.

개요

클라우드 서버가 정상 동작하기 위해서는 다음의 설정들이 필요하다.

  • JEUS_HOME/lib/csp 경로에 있는 Cloud Service Provider(CSP) 파일 중 사용하는 클라우드 환경에 적합한 파일을 JEUS_HOME/lib/system 경로에 위치시킨다.

  • JEUS 클라우드 라이선스를 JEUS_HOME/license 경로에 위치시킨다.

  • 클라우드 서버들을 같은 SCF 그룹으로 묶기 위해서는 다음 중 하나를 설정해야 한다.

    • -Djeus.scf.group-id 속성을 같은 값으로 설정한다.

    • JEUS_HOME/domains/<DOMAIN_NAME>/config/domain.xml 파일의 <id> 값을 같은 값으로 설정한다.

 

클라우드 환경별 세부 설정 방법은 아래 각 절을 참조한다.

Kubernetes

컨테이너 관리의 자동화 오픈 소스 플랫폼인 Kunbernetes은 대부분의 PaaS 클라우드에서 제공하는 리소스 형태이다. 본 절에서는 Docker, Kubernetes 기반의 PaaS 클라우드를 제공하는 OpenShift를 예제로 설정 방법을 설명한다.

 

JEUS를 OpenShift에서 이용하기 위한 환경을 구축하기 전에 다음의 준비가 완료되어 있는지 확인한다.

 

다음은 OpenShift(Kubernetes)에서 JEUS 이용을 위한 설정 및 예시이다.

  1. 마스터/노드 서버를 실행한다.

  2. 마스터의 API 서버를 이용하기 위한 권한을 부여한다. ([참고] Kubernetes 공식 문서)

    컨테이너에 기동된 JEUS간 정보를 공유하기 위해 마스터의 API 서버를 이용한다. OpenShift(Kubernetes)의 계정은 기본적으로 API 서버에 접근이 매우 제약적이기 때문에 적절한 권한을 부여해야 한다.

    다음은 설정 파일의 예이다. 확장자는 .yaml으로 저장한다.

    clusterRoleExample.yaml
    //db-font-size 90%kind: ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: pod-reader
    rules:
    - apiGroups: [""] # "" indicates the core API group
      resources: ["*"]
      verbs: ["get", "watch", "list"]
    clusterRoleBindingExample.yaml
    //db-font-size 90%kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: read-pods
    subjects:
    - kind: Group
      name: system:serviceaccounts
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: ClusterRole
      name: pod-reader
      apiGroup: rbac.authorization.k8s.io
  3. 마스터의 API 서버를 이용하기 위한 컨테이너 환경변수를 설정한다. ([참고] Kubernetes 공식 문서)

    다음은 설정 파일의 예이다. 확장자는 .yaml으로 저장한다.

    jeusContainerExample.yaml
    ...
    spec:
      containers:
      - name: jeus-container
        env:
        - name: API_VERSION
          value: "v1"
        - name: KUBERNETES_NAMESPACE
          value: "default"
    ...

    JEUS는 다음 컨테이너 환경 변수를 사용한다. 해당 환경 변수는 Pod 배포 파일에 반드시 입력해야 한다.

    환경 변수 설명

    API_VERSION

    마스터 API 서버의 버전 정보를 표시한다.

    KUBERNETES_NAMESPACE

    Pod의 네임스페이스를 표시한다. 같은 네임스페이스를 갖는 Pod들의 정보만 얻기 위해 사용할 수 있다.

  4. Pod 배포 파일 생성(배포) 및 Pod 상태를 체크한다.

AWS

AWS 클라우드는 PaaS, IaaS 클라우드를 모두 지원한다. PaaS 클라우드에서 JEUS를 사용할 경우 Kubernetes 기반의 PaaS인 EKS 리소스로 환경을 구축하고 JEUS를 기동한다. 본 절에서는 AWS IaaS 리소스인 EC2에서 JEUS 클라우드 서버 사용을 위한 설정 방법을 설명한다.

EKS 리소스로 환경 구축 방법은 AWS 공식 문서를 참고하고, JEUS 기동 방법은 Kubernetes 절을 참고한다.

 

JEUS 클라우드 서버는 AWS API로부터 얻은 EC2 정보를 기반으로 동작하며, 이를 위해 다음과 같은 설정 과정이 필요하다.

  1. IAM 리소스 사용자에게 EC2 리소스에 접근할 수 있는 적절한 권한을 부여한다. ([참고] AWS 공식 문서)

  2. IAM 리소스 사용자의 Access Key, Secret Key를 발급받는다. ([참고] (AWS 공식 문서)

  3. EC2 인스턴스에 key가 'scfGroup’인 태그를 지정한다. 같은 SCF 그룹에 대해서는 태그에 대해 같은 value를 설정해야 한다. ([참고] AWS 공식 문서)

  4. EC2 인스턴스에 환경 변수를 설정한다.

    JEUS는 AWS API 서버를 이용하기 위해 다음의 인스턴스 환경 변수를 사용한다.

    환경 변수 설명

    AWS_ACCESS_KEY

    IAM 리소스에서 부여받은 Access Key이다. AWS API 서버를 이용하기 위한 토큰 생성에 필요하다.

    AWS_SECRET_KEY

    IAM 리소스에서 부여받은 Secret Key이다. AWS API 서버를 이용하기 위한 토큰 생성에 필요하다.

    AWS_SCF_GROUP

    scfGroup 태그에 대한 value를 입력한다.

  5. EC2 리소스 시작 및 SCF 그룹핑을 확인한다.

Central Session Server

본 절에서는 Kubernetes에서 JEUS Central Session Server를 사용하여 세션을 공유하는 환경 설정 예시를 설명한다.

figure css
환경 구성 예시
Central Session Server 설정
  • 설정 방법

    1. Primary, Backup 서버를 설정한 중앙식 세션 서버 그룹을 생성한다. 그룹에 포함되는 Primary, Backup 서버 정보는 'IP:BASEPORT’를 기준으로 설정한다.

          <jeus-central-session-server-definition>
              <group>
                  <name>Central_Session_Group</name>
                  <servers>
                      <server>
                          <primary>192.168.0.11:9736</primary>
                          <backup>192.168.0.12:9736</backup>
                      </server>
                  </servers>
              </group>
          </jeus-central-session-server-definition>
    2. 중앙식 세션 서버 서버절에 자신이 속한 중앙식 세션 서버 그룹을 설정한다.

      <servers>
          <server>
              <central-session-server>
                  <group-name>Central_Session_Group</group-name>
              </central-session-server>
          </server>
      </servers>
  • 설정 예시

    다음은 Central Session Server에서 사용하는 domain.xml의 일부 설정 예시이다.

    NODE 2의 domain.xml
    <domain>
        <servers>
            <server>
                <name>Central_Session_Server1</name>
                <listeners>
                    <base>base</base>
                    <listener>
                        <name>base</name>
                        <listen-address>192.168.0.11</listen-address>  <!-- 쿠버네티스 노드의 내부 IP -->
                        <listen-port>9736</listen-port>
                        <selectors>1</selectors>
                        <use-dual-selector>false</use-dual-selector>
                        <backlog>128</backlog>
                        <read-timeout>30000</read-timeout>
                        <reserved-thread-num>0</reserved-thread-num>
                    </listener>
                </listeners>
                <central-session-server>
                    <group-name>Central_Session_Group</group-name>
                </central-session-server>
            </server>
        </servers>
        <jeus-central-session-server-definition>
            <group>
                <name>Central_Session_Group</name>
                <servers>
                    <server>
                        <primary>192.168.0.11:9736</primary>  <!-- 쿠버네티스 노드의 내부 IP -->
                        <backup>192.168.0.12:9736</backup>  <!-- 쿠버네티스 노드의 내부 IP -->
                    </server>
                </servers>
            </group>
        </jeus-central-session-server-definition>
    </domain>
    NODE 3의 domain.xml
    <domain>
        <servers>
            <server>
                <name>Central_Session_Server2</name>
                <listeners>
                    <base>base</base>
                    <listener>
                        <name>base</name>
                        <listen-address>192.168.0.12</listen-address>  <!-- 쿠버네티스 노드의 내부 IP -->
                        <listen-port>9736</listen-port>
                        <selectors>1</selectors>
                        <use-dual-selector>false</use-dual-selector>
                        <backlog>128</backlog>
                        <read-timeout>30000</read-timeout>
                        <reserved-thread-num>0</reserved-thread-num>
                    </listener>
                </listeners>
                <central-session-server>
                    <group-name>Central_Session_Group</group-name>
                </central-session-server>
            </server>
        </servers>
        <jeus-central-session-server-definition>
            <group>
                <name>Central_Session_Group</name>
                <servers>
                    <server>
                        <primary>192.168.0.11:9736</primary>  <!-- 쿠버네티스 노드의 내부 IP -->
                        <backup>192.168.0.12:9736</backup>  <!-- 쿠버네티스 노드의 내부 IP -->
                    </server>
                </servers>
            </group>
        </jeus-central-session-server-definition>
    </domain>
    • 중앙식 세션 서버는 scale-in, scale-out 대상으로 설정하지 않는다.

    • 중앙식 세션 서버의 IP 설정은 쿠버네티스 노드 내부 IP로 설정한다.

    • 중앙식 세션 서버 그룹(jeus-central-session-server-definition) 설정은 Cloud Server와 중앙식 세션 서버에 모두 동일하게 적용되어야 한다.

Cloud Server 설정
  • 설정 방법

    1. 서비스 서버(Cloud Server)가 사용할 중앙식 세션 서버 그룹을 설정한다. (중앙식 세션 서버에 설정한 그룹과 동일한 설정)

          <jeus-central-session-server-definition>
              <group>
                  <name>Central_Session_Group</name>
                  <servers>
                      <server>
                          <primary>192.168.0.11:9736</primary>
                          <backup>192.168.0.12:9736</backup>
                      </server>
                  </servers>
              </group>
          </jeus-central-session-server-definition>
    2. cluster-mode를 DOMAIN_WIDE로 설정한다.

    3. JEUS 중앙식 세션 서버를 사용하도록 'CENTRAL’로 설정한다.

         <session-cluster>
              <session-storage>
                  <session-manager-provider>CENTRAL</session-manager-provider>
                  ...
              </session-strage>
          </session-cluster>
  • 설정 예시

    다음은 Coud Server에서 사용하는 domain.xml의 일부 설정 예시이다.

    NODE 1의 domain.xml
    <domain>
        <session-cluster>
            <cluster-mode>DOMAIN_WIDE</cluster-mode>
            <session-storage>
                <name>jeus-session-storage</name>
                <session-manager-provider>CENTRAL</session-manager-provider>
                <scope>
                    <name>DOMAIN_WIDE</name>
                    <session-config>
                        <timeout>30</timeout>
                        <max-session-count>-1</max-session-count>
                        <reload-persistent>false</reload-persistent>
                        <session-cookie>
                            <cookie-name>JSESSIONID</cookie-name>
                            <url-cookie-name>jsessionid</url-cookie-name>
                            <version>0</version>
                            <path>/</path>
                            <max-age>-1</max-age>
                            <secure>false</secure>
                            <http-only>true</http-only>
                            <same-site>Disable</same-site>
                            <partitioned>false</partitioned>
                        </session-cookie>
                    </session-config>
                </scope>
                <central-session-manager>
                    <group-name>Central_Session_Group</group-name>
                </central-session-manager>
            </session-storage>
        </session-cluster>
    
     <!--  세션 서버 측 Central Session Server 그룹 정의와 동일하게 설정 -->
        <jeus-central-session-server-definition>
            <group>
                <name>Central_Session_Group</name>
                <servers>
                    <server>
                        <primary>192.168.0.11:9736</primary>  <!-- 중앙식 세션 서버의 쿠버네티스 노드 내부 IP -->
                        <backup>192.168.0.12:9736</backup>  <!-- 중앙식 세션 서버의 쿠버네티스 노드 내부 IP -->
                    </server>
                </servers>
            </group>
        </jeus-central-session-server-definition>
    </domain>
    • 중앙식 세션 서버 그룹(jeus-central-session-server-definition) 설정은 Cloud Server와 중앙식 세션 서버에 모두 동일하게 적용되어야 한다.

    • 클라우드 환경을 고려하여 세션 클러스터 모드는 DOMAIN_WIDE로 설정한다.