[Jira Server/Data Center] AWS ELB와 통합 하기

 문제

Jira를 AWS ELB와 통합 하고 싶어요.

 해결책

AWS ELB를, AWS EC2환경에 설치된 JIRA/JIRA 데이터 센터용 리버스 프록시/로드 밸런서로 구성하는 방법을 설명합니다.

  1. AWS Security Groups 을 구성합니다.
    EC2 instance에 대한 AWS Security Groups에서 아래 4가지 포트가 허용되어야 합니다.
    이를 통해 Jira 접근성 테스트를 할 수 있을뿐만 아니라 ELB가 EC2 instance에서 Jira와 통신할 수 있습니다.

    • 8080

    • 8081

    • 8082

    • 80

  2. Tomcat을 설정합니다.

    1. 하나 또는 두 개의 proxy 커넥터 역할을 하고 다른 하나는 proxy 우회용(troubleshooting 용)으로 사용하도록 Tomcat 커넥터를 구성합니다.

      1. JIRA_Install/conf/server.xml 파일에서 설정이 가능합니다.

        <Connector port="8080" maxThreads="150" minSpareThreads="25" connectionTimeout="20000" enableLookups="false" maxHttpHeaderSize="8192" protocol="HTTP/1.1" useBodyEncodingForURI="true" redirectPort="8443" acceptCount="100" disableUploadTimeout="true"/>
    2. 위 커넥터의 복사본을 2개 만들고, 아래 세 가지의 내용을 모두 수정합니다.

      <!-- 1. Add proxyName and proxyPort to the original connector that uses port 8080 - This connector is to be used for HTTP access via AWS ELB --> <Connector port="8080" maxThreads="150" minSpareThreads="25" connectionTimeout="20000" enableLookups="false" maxHttpHeaderSize="8192" protocol="HTTP/1.1" useBodyEncodingForURI="true" redirectPort="8443" acceptCount="100" disableUploadTimeout="true" proxyName="jira.aws.elb" proxyPort="80"/> <!-- 2. Add proxyName, proxyPort, scheme, and secure to the second connector - modify it to use port 8081 - This connector is to be used for HTTPS access via AWS ELB --> <Connector port="8081" maxThreads="150" minSpareThreads="25" connectionTimeout="20000" enableLookups="false" maxHttpHeaderSize="8192" protocol="HTTP/1.1" useBodyEncodingForURI="true" redirectPort="8443" acceptCount="100" disableUploadTimeout="true" proxyName="jira.aws.elb" proxyPort="443" scheme="https" secure="true"/> <!-- 3. Modify the third connector to use port 8082 without adding anything else - This connector is to be used for bypassing proxy e.g. JIRA can be accessed directly via http://ec2-hostname:8082 --> <Connector port="8082" maxThreads="150" minSpareThreads="25" connectionTimeout="20000" enableLookups="false" maxHttpHeaderSize="8192" protocol="HTTP/1.1" useBodyEncodingForURI="true" redirectPort="8443" acceptCount="100" disableUploadTimeout="true"/>
    3. JIRA를 다시 시작하고 다음을 통해 액세스할 수 있는지 확인합니다.(모두 Proxy 우회)

      1. http://ec2-hostname:8080

      2. http://ec2-hostname:8081

      3. http://ec2-hostname:8082

  3. HTTP 액세스를 위한 ELB 구성

    1. EC2 관리에서 대상 그룹으로 이동하여 다음과 같이 새 대상 그룹을 생성합니다.

      • 이름: ELB-HTTP-access

      • 프로토콜: HTTP

      • 포트: 80

    2. 대상 그룹에 대상 추가

      • 위의 대상 그룹 선택 → 대상 탭 열기 → 편집으로 이동합니다.

      • 실행 중인 JIRA instance를 선택합니다.(그렇지 않은 경우 위의 2.3단계를 다시 확인합니다)

      • 포트를 8080 으로 수정합니다.

      • 등록된 항목에 추가합니다.

    3. EC2 관리에서 Load Balancers로 이동하여 아래과 같이 새 Load Balancers를 생성합니다.

      • 유형: Application Load Balancer

      • 이름: JIRA-ELB

      • 로드 밸런서 프로토콜: HTTP

      • 로드 밸런서 포트: 80

      • 가용 영역: EC2 instance와 동일한 VPC 를 선택한 후 2개의 Availability Zones을 선택합니다.

      • 보안 그룹: 적절한 보안 그룹 선택

      • 대상 그룹: 존재하는 대상 그룹

      • 이름: ELB-HTTP-access

      • 검토 및 만들기

  4. HTTPS 액세스를 위한 ELB 구성

    1. EC2 관리에서 대상 그룹으로 이동하여 다음과 같이 새 대상 그룹을 생성합니다.

      • 이름: ELB-HTTPS-access

      • 프로토콜: HTTP

      • 포트: 80

    2. 대상 그룹에 대상 추가:

      • 위의 대상 그룹 선택 → 대상 탭 열기 → 편집으로 이동합니다.

      • 실행 중인 JIRA instance를 선택합니다.(그렇지 않은 경우 위의 2.3단계를 다시 확인합니다)

      • 포트를 8081 로 수정합니다.

      • 등록된 항목에 추가합니다.

    3. EC2 관리에서 Load Balancers로 이동하여 3.3단계에서 생성한 기존 Load Balancers를 편집합니다.

      • Load Balancers 선택 → 리스너 탭 열기 → 리스너 추가

      • 프로토콜: HTTPS

      • 포트: 443

      • 기본 대상 그룹: ELB-HTTPS-access

      • SSL 인증서 선택 또는 업로드

  5. HTTP-HTTPS 리디렉션 구성하기

    • How do I redirect HTTP traffic on my server to HTTPS on my load balancer? 에 따르면 EC2 instance에 추가 프록시 서비스가 설치되어 있어야 합니다. 이 예시에서는 Nginx를 사용합니다.

      1. EC2 instance에 Nginx를 설치합니다. 이것은 JIRA가 설치된 동일한 인스턴스일 수 있습니다. Ubuntu 14.04 LTS에 Nginx를 설치하는 방법을 참고하여 Nginx가 80포트에서 실행되고 있는지 확인할 수 있습니다.

      2. HTTP에서 HTTPS로 요청을 리디렉션하도록 Nginx구성을 수정합니다.(server_name을 수정합니다)

        server { listen 80; server_name jira.aws.elb; if ($http_x_forwarded_proto != "https") { rewrite ^(.*)$ https://$server_name$REQUEST_URI permanent; } }
      3. Nginx를 다시 시작합니다.

      4. ELB-HTTP 액세스 대상 그룹을 편집합니다.(3.b 단계 참조):

        • 포트 8080에서 수신 대기 중인 현재 대상을 제거합니다.

        • Nginx가 실행 중인 EC2 instance를 선택합니다.

        • 포트를  80(기본값)으로 수정합니다.

        • 등록된 항목에 추가합니다.

  6. JIRA 데이터 센터를 사용하는 경우

    • JIRA Data Center를 사용하는 경우 3.2단계 및/또는 4.2단계에서와 같이 모든 JIRA 노드를 대상 그룹에 추가할 수 있습니다. 올바른 instances를 선택하고 올바른 Tomcat 포트를 사용하기만 하면 됩니다.
      (모든 노드에 대해 Tomcat을 유사하게 구성할 수 있습니다. 2단계 참조)
      또한, 다음 단계에 따라 Load Balancer Stickiness를 활성화해야 합니다.

      1. 해당 대상 그룹 선택 → 설명 탭 열기 → 속성을 편집 합니다.

      2. Load Balancer generated cookie stickiness를 활성화 합니다.

      3. 저장합니다.

 


허가하여야하는 Port 및 설정 방안이 구성되어있으며 ALB쪽에 인증서가 정상적으로 반영되어있다면
Tomcat의 server.xml 파일에서 reverse proxy 설정을 구성해주시면 정상적으로 서비스가 됩니다.

예시 이미지

 관련 문서