Autonomous Database에 접속된 Kubernetes에서 마이크로 서비스 기반 애플리케이션 배치

개발자 또는 애플리케이션 관리자는 클라우드 네이티브 애플리케이션을 설계 및 관리할 때 프로비저닝 및 유지 관리가 용이하고 설계 및 비즈니스 목표에 집중할 수 있는 인프라가 필요합니다. OCI Kubernetes Engine(OKE)은 클라우드에서 고가용성 및 확장성을 갖춘 마이크로서비스 기반 애플리케이션을 배포 및 실행할 수 있게 해줍니다.

구조

마이크로서비스 아키텍처에서 각 마이크로서비스는 간단한 작업을 수행하고 REST API 요청과 같은 경량 메커니즘을 사용하여 클라이언트 또는 기타 마이크로서비스와 통신합니다.

이 참조 아키텍처는 Kubernetes 클러스터에서 Docker 컨테이너로 배포된 여러 다언어 마이크로서비스로 구성된 전자 상거래 애플리케이션을 위한 것입니다. 데이터 지속성은 Oracle Autonomous Transaction Processing 데이터베이스를 사용하여 달성됩니다. 전자 상거래 애플리케이션의 미디어 및 이미지 파일은 Oracle Cloud Infrastructure Object Storage에 저장됩니다.

다음 다이어그램에는 아키텍처가 설명되어 있습니다.



mushop-인프라-oracle.zip

구조에는 다음과 같은 구성 요소가 있습니다.

  • 지역

    Oracle Cloud Infrastructure 리전은 하나 이상의 데이터 센터, 호스팅 가용성 도메인을 포함하는 지역화된 지리적 영역입니다. 지역은 다른 지역과 독립적이며, 먼 거리가 그들을 분리 할 수 있습니다 (국가 또는 대륙에 걸쳐).

  • 가용성 도메인

    가용성 도메인은 한 지역 내의 독립형 독립 데이터 센터입니다. 각 가용성 도메인의 물리적 리소스는 결함 허용을 제공하는 다른 가용성 도메인의 리소스와 격리됩니다. 가용성 도메인은 전원 또는 냉각과 같은 인프라 또는 내부 가용성 도메인 네트워크를 공유하지 않습니다. 따라서 한 가용성 도메인의 장애가 해당 영역의 다른 가용성 도메인에 영향을 미치지 않아야 합니다.

  • 결함 도메인

    장애 도메인은 하나의 가용성 도메인에 있는 하드웨어와 인프라 그룹입니다. 각 가용성 도메인에는 독립적인 전원 및 하드웨어를 갖춘 3개의 장애 도메인이 있습니다. OCI Kubernetes Engine은 여러 장애 도메인에 걸쳐 클러스터의 노드 배포를 처리합니다. 따라서 컨테이너화된 응용 프로그램은 결함 도메인 내의 물리적 서버 오류, 시스템 유지 관리 및 정전으로부터 보호됩니다.

  • VCN(가상 클라우드 네트워크) 및 서브넷

    VCN은 Oracle Cloud Infrastructure 지역에서 설정한 맞춤형 소프트웨어 정의 네트워크입니다. 기존의 데이터 센터 네트워크와 마찬가지로 VCN을 통해 네트워크 환경을 제어할 수 있습니다. VCN에는 VCN 생성 후 변경할 수 있는 겹치지 않는 CIDR 블록이 여러 개 있을 수 있습니다. VCN을 서브넷으로 분할할 수 있습니다. 서브넷은 지역 또는 가용성 도메인으로 범위가 지정될 수 있습니다. 각 서브넷은 VCN의 다른 서브넷과 겹치지 않는 연속적인 주소 범위로 구성됩니다. 생성 후 서브넷의 크기를 변경할 수 있습니다. 서브넷은 공용 또는 전용일 수 있습니다.

  • 서비스 게이트웨이

    서비스 게이트웨이는 VCN에서 Oracle Cloud Infrastructure Object Storage와 같은 다른 서비스로의 액세스를 제공합니다. VCN에서 Oracle 서비스로의 트래픽은 Oracle 네트워크 패브릭을 통해 이동하며 인터넷을 순회하지 않습니다.

  • NAT(Network Address Translation) 게이트웨이

    NAT 게이트웨이를 사용하면 VCN의 전용 리소스가 들어오는 인터넷 연결에 리소스를 노출하지 않고도 인터넷의 호스트에 액세스할 수 있습니다.

  • 인터넷 게이트웨이

    인터넷 게이트웨이는 VCN의 공용 서브넷과 공용 인터넷 간의 트래픽을 허용합니다.

  • 자율운영 트랜잭션 처리(ATP)

    Oracle Autonomous Transaction Processing은 트랜잭션 처리 워크로드에 최적화된 자율 구동, 자가 보안 및 자가 복구 데이터베이스 서비스입니다. 하드웨어를 구성 또는 관리하거나 소프트웨어를 설치할 필요가 없습니다. Oracle Cloud Infrastructure는 데이터베이스 생성, 백업, 패치, 업그레이드 및 튜닝을 처리합니다.

  • 오브젝트 스토리지

    OCI Object Storage는 데이터베이스 백업, 분석 데이터, 이미지 및 비디오와 같은 리치 콘텐츠 등 모든 콘텐츠 유형의 대량의 구조적 및 비구조적 데이터에 대한 액세스를 제공합니다. 인터넷 또는 클라우드 플랫폼 내에서 직접 데이터를 안전하고 안전하게 저장할 수 있습니다. 성능 또는 서비스 안정성이 저하되지 않고 스토리지를 확장할 수 있습니다.

    이 아키텍처에서 애플리케이션의 미디어 자산은 표준 스토리지 클래스의 버킷에 있는 Oracle Cloud Infrastructure Object Storage에 저장됩니다.

  • Kubernetes Engine

    Oracle Cloud Infrastructure Kubernetes Engine(OCI Kubernetes Engine 또는 OKE)는 컨테이너화된 애플리케이션을 클라우드에 배치하는 데 사용할 수 있는 확장 가능한 전담 관리 서비스입니다. 애플리케이션에 필요한 컴퓨트 리소스를 지정하면 Kubernetes Engine이 기존 테넌시의 Oracle Cloud Infrastructure에서 프로비저닝합니다. OKE는 Kubernetes를 사용하여 호스트 클러스터 전반에서 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화합니다.

    다음 다이어그램은 이 아키텍처에서 컨테이너화된 마이크로서비스 간의 상호 작용을 보여줍니다.



    mushop-infrastructure-확장-oracle.zip

    공용 인터넷의 트래픽은 DNS 서비스에서 WAF(웹 애플리케이션 방화벽)를 통해 로드 밸런서로 라우팅되며, 로드 밸런서는 수신 요청을 Nginx(수신) 마이크로서비스로 전달합니다. 수신 마이크로서비스는 트래픽을 라우터(Traefik) 마이크로서비스로 전송합니다. 요청의 특성에 따라 라우터 마이크로서비스는 요청의 경로를 애플리케이션의 적절한 마이크로서비스로 지정합니다. 다른 마이크로서비스와의 상호 작용 외에도 많은 마이크로서비스가 Oracle Cloud Infrastructure 서비스(OCI Object Storage, OCI API Gateway, OCI Functions, OCI Email Delivery, OCI Streaming, Oracle Autonomous Database)와 상호 작용합니다.

권장사항

다음 권장 사항을 시작점으로 사용하십시오. 요구 사항은 여기에 설명된 구조와 다를 수 있습니다.
  • VCN

    VCN을 생성할 때 VCN의 서브넷에 연결하려는 리소스 수에 따라 필요한 CIDR 블록 수와 각 블록의 크기를 결정합니다. 표준 전용 IP 주소 공간 내에 있는 CIDR 블록을 사용합니다.

    프라이빗 접속을 설정하려는 다른 네트워크(Oracle Cloud Infrastructure, 온프레미스 데이터 센터 또는 다른 클라우드 제공자)와 겹치지 않는 CIDR 블록을 선택합니다.

    VCN을 생성한 후 해당 CIDR 블록을 변경, 추가 및 제거할 수 있습니다.

    서브넷을 설계할 때는 트래픽 플로우 및 보안 요구사항을 고려하십시오. 특정 계층 또는 역할 내의 모든 리소스를 동일한 서브넷에 연결합니다. 이 서브넷은 보안 경계 역할을 할 수 있습니다.

    지역 서브넷을 사용합니다.

    주:

    이 아키텍처를 구현하는 Terraform 코드는 Oracle 서비스 네트워크에 Oracle Autonomous Transaction Processing 데이터베이스를 프로비저닝합니다. 데이터베이스에 대한 프라이빗 끝점만 표시하려는 경우 아키텍처 다이어그램에 표시된 대로 Terraform 코드를 조정하여 프라이빗 서브넷에 데이터베이스를 연결할 수 있습니다.
  • OCI Kubernetes 엔진

    이 아키텍처에서 Kubernetes 클러스터의 워커 노드는 VM.Standard2.1 구성을 사용하며 Oracle Linux에서 실행됩니다. 한 클러스터에 최대 1000개의 노드를 만들 수 있습니다.

고려사항

이 구조를 구현할 때는 다음 파라미터에 대한 요구 사항을 고려하십시오.

  • 확장성

    로드에 따라 Kubernetes 클러스터의 워커 노드 수를 업데이트하여 애플리케이션을 스케일 아웃할 수 있습니다. 마찬가지로 클러스터의 워커 노드 수를 줄여 확장할 수 있습니다. Kubernetes 클러스터에서 서비스를 생성할 때 로드 밸런서를 생성하여 서비스에 할당된 노드 간에 서비스 트래픽을 분산할 수 있습니다. 이 아키텍처는 로드 밸런서를 사용하여 수신 요청을 처리합니다.

  • 애플리케이션 가용성

    장애 도메인은 단일 가용성 도메인 내에서 복원성을 제공합니다. 여러 가용성 도메인에서 동일한 작업을 수행하는 인스턴스 또는 노드를 배치할 수도 있습니다. 이 설계에서는 중복성을 도입하여 단일 Failure 지점을 제거합니다. 이 아키텍처에서 Oracle Cloud Infrastructure Kubernetes Engine은 가용성 도메인 내의 장애 도메인에 노드를 분산하고 Kubernetes 클러스터 내의 사용 가능한 노드에 마이크로서비스 배포를 관리합니다.

  • 관리 효율성

    모든 마이크로서비스는 Docker를 사용하여 컨테이너화됩니다. 이러한 이미지는 Oracle Cloud Infrastructure Registry 서비스에 저장됩니다. 배포는 Terraform을 사용하여 자동화되며, Grafana, Prometheus, Helm 차트와 같은 다른 공통 서비스를 배포합니다.

    다른 Oracle Cloud Infrastructure 서비스(예: OCI API Gateway, OCI Functions, OCI Email Delivery)를 사용하여 백엔드 API를 관리하고 제품 관련 뉴스레터 또는 이메일을 구독할 수 있습니다.

  • 보안

    OCI Kubernetes EngineOracle Cloud Infrastructure Identity and Access Management(IAM)와 통합되어 기본 ID 기능을 통해 손쉽게 인증할 수 있습니다. IAM 정책을 사용하여 리소스에 액세스할 수 있는 사용자 및 리소스가 수행할 수 있는 작업을 제어합니다.

    공용 인터넷에서 악의적인 트래픽으로부터 애플리케이션을 보호하려면 Oracle Cloud Infrastructure Web Application Firewall(WAF)을 사용하는 것이 좋습니다.

    Oracle Cloud Infrastructure Streaming 서비스를 사용하여 애플리케이션 레벨 이벤트를 스트리밍하고 기록할 수 있습니다.

    Kubernetes 암호를 보호하려면 저장소에 저장하거나, Oracle Cloud Infrastructure Vault 서비스에서 유지 관리하는 키를 사용하여 암호를 암호화할 수 있습니다. Kubernetes 클러스터는 공용 인터넷에 액세스 요청을 노출하지 않고 VCN의 서비스 게이트웨이를 통해 전용으로 저장소, 키 및 암호에 액세스할 수 있습니다. Oracle Cloud Infrastructure Identity and Access Management에서 정의하는 정책은 Vault에 대한 액세스를 제어합니다. Oracle Cloud Infrastructure Audit 서비스를 사용하면 저장소로 보호되는 키와 암호의 사용을 모니터링하고 추적할 수 있습니다.

배치

이 참조 아키텍처를 배포하는 데 필요한 코드는 GitHub에서 확인할 수 있습니다. 클릭 한 번으로 코드를 Oracle Cloud Infrastructure Resource Manager로 풀링하고 스택을 생성한 후 배포할 수 있습니다. 또는 GitHub에서 컴퓨터로 코드를 다운로드하고, 코드를 사용자 정의하고, Terraform CLI를 사용하여 아키텍처를 배포합니다.

  • Oracle Cloud Infrastructure Resource Manager를 사용하여 배포:
    1. 을 누릅니다.Oracle Cloud에 배포

      아직 사인인하지 않은 경우 테넌시 및 사용자 인증서를 입력합니다.

    2. 조항 및 조건을 검토 및 수락합니다.
    3. 스택을 배치할 영역을 선택합니다.
    4. 화면의 프롬프트 및 지침에 따라 스택을 만듭니다.
    5. 스택을 생성한 후 Terraform 작업을 누르고 계획을 선택합니다.
    6. 작업이 완료될 때까지 기다린 후 계획을 검토합니다.

      변경하려면 [스택 세부정보] 페이지로 돌아가서 스택 편집을 누르고 필요에 따라 변경합니다. 그런 다음 계획 작업을 다시 실행합니다.

    7. 추가로 변경할 필요가 없으면 [스택 세부 정보] 페이지로 돌아가서 Terraform 작업을 누르고 적용을 선택합니다.
  • Terraform CLI를 사용하여 배포:
    1. GitHub로 이동합니다.
    2. 로컬 컴퓨터에 코드를 다운로드하거나 복제합니다.
    3. 자세한 내용은 deploy/complete/README.md를 참조하십시오.

로그 변경

이 로그에는 중요한 변경 사항만 나열됩니다.