클라우드 환경설정

본 부록에서는 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
    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
    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

kube-provider를 사용하는 경우 clusterRole 및 clusterRoleBinding 설정이 필수이며, kube-dns-provider를 사용하는 경우에는 해당 설정이 불필요하다.

  1. 마스터의 API 서버를 이용하기 위한 컨테이너 환경변수를 설정한다. ([참고] Kubernetes 공식 문서)

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

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

    JEUS에서 제공하는 provider는 다음과 같다.

    Provider 설명

    kube-provider

    Kubernetes API 서버에 기동된 Pod의 IP를 요청하며 SCF ID가 같은 서버들과 클러스터링을 진행한다.

    kube-dns-provider

    Kubernetes DNS 쿼리를 통해 주소의 목록을 제공 받은 후 SCF가 서버의 이름과 주소의 매핑을 따로 관리한다.

    kube-provider는 다음 컨테이너 환경 변수를 사용한다. 해당 환경 변수는 Pod 배포 파일에 설정해야 한다.

    환경 변수 설명

    API_VERSION

    마스터 API 서버의 버전을 지정한다. (필수)

    KUBERNETES_NAMESPACE

    Pod의 네임스페이스를 지정하며, 동일한 네임스페이스를 갖는 Pod 정보만 조회할 때 사용한다. (필수)

    MASTER_PROTOCOL

    마스터 호스트의 프로토콜을 지정한다.

    KUBERNETES_SERVICE_HOST

    마스터 호스트의 주소를 지정한다.

    KUBERNETES_SERVICE_PORT

    마스터 호스트의 포트를 지정한다.

    KUBERNETES_CLIENT_CERTIFICATE_FILE

    클라이언트 인증서 파일의 경로를 지정한다.

    KUBERNETES_CLIENT_KEY_FILE

    클라이언트 키 파일의 경로를 지정한다.

    KUBERNETES_CLIENT_KEY_PASSWORD

    클라이언트 키의 암호를 지정한다.

    KUBERETES_CLIENT_KEY_ALGORITHM

    클라이언트 키의 알고리즘을 지정한다.

    KUBERNETES_CA_CERTIFICATE_FILE

    CA 인증서 파일의 경로를 지정한다.

    KUBERNETES_LABELS

    동일한 네임스페이스 내에서 클러스터를 분리하는 데 사용한다.

    kube-dns-provider는 다음 컨테이너 환경 변수를 사용한다. 해당 환경 변수는 Pod 배포 파일에 설정해야 한다.

    환경 변수 설명

    KUBERNETES_SUBDOMAIN

    DNS 도메인 값으로, 해당 DNS를 통해 멤버 이름을 가져올 때 사용한다. (필수)

    kube-dns-provider 사용 시 Service.yaml 내 spec.clusterIP: None 설정이 필요하다.

  2. 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 그룹핑을 확인한다.