고가용성 애플리케이션 구성

IBM Cloud® Code Engine 애플리케이션을 여러 리전에 배포하여 리전별 장애에 대한 복원력을 높일 수 있습니다. 이 예제에서는 IBM Cloud Internet Services 를 사용하고 있지만, 다른 제공업체를 사용할 수도 있습니다. 이 예제에서는 사용자 정의 도메인도 사용합니다.

전제조건

  • 애플리케이션에 example.com 과 같은 사용자 지정 도메인 이름이 있어야 합니다. 이 도메인 이름은 Code Engine 애플리케이션에 사용됩니다.
  • Cloud Internet Services (CIS)의 인스턴스를 설정하십시오.
  • Cloud Internet Services (CIS) 에 도메인 이름을 추가하십시오. Cloud Internet Services (CIS)에 도메인 이름을 등록하면 도메인 이름에 대한 제어를 Cloud Internet Services (CIS)에 위임하는 것입니다. 이 단계를 완료하는 데 시간이 걸릴 수 있습니다.

다른 지역에서 프로젝트 작성

세 개의 서로 다른 지역에서 Code Engine 프로젝트를 작성하십시오. 공통 이름 지정 패턴 및 공유 태그를 사용할 수 있습니다.

예를 들어, CLI를 사용하거나 콘솔에서 au-syd, eu-debr-sao 리젼에 global-app-project 라는 프로젝트를 작성하십시오.

여러 지역의 프로젝트
이름 상태 태그 위치 리소스 그룹 작성 날짜
global-app-project 준비 global-app 시드니(au-syd) 기본값
global-app-project 준비 global-app 프랑크푸르트(eu-de) 기본값 2분
global-app-project 준비 global-app 상파울루(br-sao) 기본값 3분

자세한 정보는 프로젝트 관리 를 참조하십시오.

여러 리전에 앱을 배포하세요

이제 프로젝트가 여러 지역에 작성되었으므로 각 프로젝트에 애플리케이션을 배치하십시오.

예를 들어, codeengine/helloworld 앱을 배치하십시오.

  1. Code Engine 프로젝트 페이지에서 작성한 프로젝트 중 하나의 이름을 클릭하십시오.

  2. 애플리케이션 을 클릭한 후 작성 을 클릭하여 새 애플리케이션을 작성하십시오.

  3. 다음 설정으로 앱을 구성하십시오.

    1. 애플리케이션의 이름을 global-app 로 지정하십시오.
    2. 앱에 사용할 컨테이너 이미지를 지정하려면 ‘기존 컨테이너 이미지 사용’을 선택하세요.
    3. 이미지 참조를 위해 icr.io/codeengine/helloworld 를 입력하십시오.
    4. 자원 및 스케일링 섹션에서 최소 인스턴스 수를 1로 설정하십시오. 최소 인스턴스 수를 1로 설정하면 CIS 인스턴스에서 상태 검사를 사용으로 설정하여 정상 상태의 풀로 트래픽을 라우팅할 수 있도록 풀의 가용성을 모니터할 수 있습니다.
    5. 나머지 옵션은 기본 설정으로 두고 작성을 클릭하십시오.
  4. 이러한 단계를 반복하여 각 프로젝트에서 애플리케이션을 작성하십시오.

애플리케이션 배치에 대한 자세한 정보는 애플리케이션 배치를 참조하십시오.

사용자 정의 도메인에 대한 인증서 생성

엔터프라이즈 환경에서 회사 도메인 관리자와 함께 작업하여 필요한 인증서를 확보하십시오. 그러나 사용자 정의 도메인이 제어 내에 있고 자체 인증되지 않은 인증서를 신속하게 작성하려는 경우 선택적으로 Let's Encrypt 서비스 및 Certbot 을 사용하여 인증서를 얻을 수 있습니다.

  1. Certbot을 설치하십시오. Certbot은 CA와 서버 간의 상호작용을 자동화하기 위한 ACME(Automatic Certificate Management Environment) 프로토콜의 클라이언트입니다. Let's Encrypt 서비스는 이 클라이언트를 사용하여 도메인 소유권을 확인하고 인증서를 발행합니다. Certbot 지시사항 페이지에서 Other 를 소프트웨어로 선택하고 워크스테이션의 운영 체제를 선택하여 Certbot 명령행을 설치하는 데 적용 가능한 정보를 얻으십시오.

  2. 다음 명령어를 실행하여 인증서를 생성하십시오. 이 예제 명령은 example.comwww.example.com 사용자 정의 도메인에 대한 인증서를 작성합니다. 사용자 고유의 사용자 정의 도메인에 대한 명령을 업데이트해야 합니다.

    certbot certonly --manual --preferred-challenges dns --email webmaster@example.com --server https://acme-v02.api.letsencrypt.org/directory --agree-tos --domain example.com --domain www.example.com
    
  3. 도메인을 소유하는지 확인하려면 이전 단계에서 요청한 도메인에 대해 TXT 레코드를 Certbot 도구 출력과 함께 제공된 값으로 설정하십시오 (예: _acme_challenge.example.com_acme_challenge.ww.example.com). TXT 레코드를 설정한 후 Certbot 명령을 계속하십시오.

  4. Certbot은 Let's Encrypt에서 서명한 인증서를 검색합니다. 인증서가 저장되는 위치는 Certbot 출력에서 제공됩니다. fullchain.pemprivkey.pem 파일을 찾으십시오.

TLS 시크릿 생성하기

Code Engine 에서 인증서를 저장할 ‘ TLS ’ 시크릿을 생성하세요.

  1. Code Engine 프로젝트 페이지에서 작성한 프로젝트 중 하나의 이름을 클릭하십시오.
  2. Secrets와 configmaps를 선택하세요.
  3. 작성을 클릭하십시오.
  4. TLS secret을 클릭하세요.
  5. 이름으로 global-tls을(를) 입력하십시오.
  6. fullchain.pem 파일의 컨텐츠를 인증서 체인 필드에 복사하십시오.
  7. privkey.pem 파일의 컨텐츠를 개인 키 필드에 복사하십시오.
  8. 작성을 클릭하십시오.
  9. 앞서 생성한 각 프로젝트에서 ‘ TLS ’ 시크릿을 생성하려면 이 단계를 반복하세요.

자세한 정보는 시크릿에 대한 작업 을 참조하십시오.

사용자 정의 도메인 맵핑 구성

앱이 배치된 후 해당 앱에 대한 사용자 정의 도메인 맵핑을 구성하십시오.

  1. Code Engine 프로젝트 페이지에서 작성한 프로젝트 중 하나의 이름을 클릭하십시오.
  2. '응용 프로그램'을 선택합니다.
  3. global-app 애플리케이션을 선택하세요.
  4. 도메인 맵핑을 선택하십시오.
  5. 가시성을 위해 공용 을 선택하십시오.
  6. 작성 을 클릭하여 사용자 정의 도메인 맵핑을 작성하십시오.
  7. ‘선택’을 클릭하여 기존 ‘ TLS ’ 시크릿을 선택한 다음, ‘ global-tls ’을 선택합니다.
  8. 완전한 도메인 이름을 입력하십시오 (예: www.example.com).
  9. CNAME 대상 값을 기록해 두십시오. CIS에서 도메인에 대한 라우팅을 설정하려면 이 값이 필요합니다.
  10. 앱 이름이 global-app 인지 확인하십시오.
  11. 작성을 클릭하십시오.
  12. 이 단계를 반복하여 작성한 각 애플리케이션에 대한 사용자 정의 도메인 맵핑을 작성하십시오.

상태 검사 구성

애플리케이션을 작성할 때 최소 인스턴스 수 를 1로 설정합니다. 각 지역에서 실행 중인 앱의 인스턴스가 항상 있으므로 CIS 인스턴스에서 상태 검사를 설정하여 풀의 가용성을 모니터할 수 있습니다. 상태 검사를 설정하면 트래픽이 항상 실행 중인 인스턴스로 라우팅되어 앱의 가용성이 높아집니다.

  1. CIS 인스턴스에서 안정성 > 글로벌 로드 밸런서 > 상태 검사로 이동하십시오.
  2. 작성을 클릭하십시오.
  3. 상태 검사의 이름을 애플리케이션 이름과 동일하게 지정하십시오. global-app.
  4. 모니터 유형HTTPS 로 설정하고 포트443 로 설정하십시오.
  5. 나머지 옵션에 대해서는 기본값을 그대로 사용하십시오. codeengine/helloworld 앱 이외의 앱을 사용하는 경우 앱에 필요한 옵션을 조정하십시오.
  6. 작성을 클릭하십시오.

자세한 정보는 상태 검사 설정 을 참조하십시오.

Cloud Internet Services (CIS) 로드 밸런서 구성

사용자 정의 도메인 맵핑이 Ready 상태가 되면 애플리케이션 글로벌 엔드포인트에 대해 Cloud Internet Services (CIS) 로드 밸런서를 구성하십시오. 자세한 정보는 글로벌 로드 밸런서 구성을 참조하십시오.

  1. Cloud Internet Services (CIS) 콘솔의 신뢰성 페이지로 이동하십시오.

  2. 오리진 풀을 선택하고 작성을 클릭하십시오.

    1. 풀의 이름을 global-app-au-syd 로 지정하십시오.
    2. 원본 주소 를 도메인 이름 맵핑의 CNAME 대상으로 설정하십시오.
    3. 호스트 헤더를 도메인 이름으로 설정하십시오.
    4. 상태 검사에서 기존 상태 검사 를 선택한 후 global-app 를 선택하십시오.
    5. 저장 을 클릭하십시오.
    6. 배치된 앱을 포함하는 각 지역에 대해 이러한 단계를 반복하십시오. 대상으로 지정하는 지역을 반영하도록 이름을 변경하십시오. 예를 들어, global-app-de-euglobal-app-br-sao 입니다.
  3. 로드 밸런서를 선택하고 작성을 클릭하십시오.

    1. 로드 밸런서의 이름을 지정하십시오. 이 이름은 사용자 지정 도메인 URL 에 표시됩니다. 예를 들어 사용자 지정 도메인이 global-app.example.com 이고 로드 밸런서의 이름이 global-app 인 경우 URL 은 global-app.example.com 입니다.
    2. 트래픽 조정Geo 로 설정하십시오.
    3. 지리 라우트를 추가하십시오. 모든 CIS 리젼 또는 일부 리젼에 대해서만 라우트를 작성하도록 선택할 수 있습니다.
      • 모든 CIS 리젼에 대한 라우트를 작성하는 경우 작성하는 각 라우트에서 이전에 작성한 모든 오리진 풀을 추가하십시오. 실행 중인 앱을 포함하고 구성 중인 리젼 라우트에 가장 가까운 리젼이 되도록 이를 정렬하십시오. 예를 들어, au-syd, eu-debr-sao 에서 앱을 작성한 경우 Oceana 의 경우 먼저 au-syd 를 넣으십시오. 동유럽 및 서유럽의 경우 de-eu 를 먼저 입력하십시오. 북미와 남미의 경우 br-sao 를 먼저 입력하십시오.
      • 일부 CIS 리젼에 대해서만 라우트를 작성하는 경우 기본 리젼에 대한 라우트를 추가하십시오. 이 라우트는 지정된 리젼을 사용할 수 없을 때 사용할 폴백입니다.
    4. '생성'을 클릭하여 로드 밸런서를 생성합니다.

앱이 사용 가능한지 확인하세요

브라우저를 열고 로드 밸런서 이름과 사용자 정의 도메인 이름을 입력하십시오 (예: www.global-app.example.com ).

이제 애플리케이션의 가용성이 높아집니다.

학습서 정리

  1. CIS에서 글로벌 로드 밸런서 및 오리진 풀을 삭제하십시오.
  2. CIS에서 DNS 레코드를 삭제하십시오. 자세한 정보는 DNS 레코드 삭제 를 참조하십시오.
  3. 작성한 각 프로젝트를 삭제하십시오. 프로젝트를 삭제하면 해당 프로젝트에 포함된 모든 컴포넌트도 삭제됩니다. 자세한 정보는 프로젝트 삭제 를 참조하십시오.

사용자 정의 도메인은 삭제되지 않지만 더 이상 사용자가 작성한 애플리케이션과 연관되지 않습니다.