NGINX 모던 앱 참조 아키텍처, MARA

NGINX에서는 지난 몇 년 동안 애플리케이션을 실제로 현대적이고 적응 가능하게 만드는 것이 필요하다는 것에 대해 이야기해 왔습니다. 즉, Portable 하고 Cloud-Native 하며, 탄력적이고, 확장 가능하며, 쉽게 업데이트할 수 있는 애플리케이션을 만들어야 한다는 것입니다. 최근에는 NGINX 모던 앱 의 생성과 전달을 용이하게하는 두 가지 개념이 등장했습니다.
첫 번째로, 기업 수준의 Platform팀이 개발 및 DevOps팀이 일할 때 필요한 모든 도구를 관리, 유지 보수, 연결 및 보안을 제공하는 Platform Ops가 있습니다.
두 번째로, Shift-left는 애플리케이션에 Production 수준의 Security, 네트워킹, 및 모니터링을 개발 수명주기의 이른 시기에 통합하는 것을 의미합니다. 개발자들은 ITOps가 담당해 온 기능들에 대한 더 많은 책임을 지게 되지만, 동시에 이러한 기능을 어떻게 구현하는지에 대한 더 많은 선택권과 독립성을 가지게 됩니다.

이는 좋은 소리처럼 들리지만, 실제로는 Platform Ops를 구현하고 인프라 및 운영 도구를 “Shift-left” 시키는 것이 쉬운 일은 아닙니다. 일단, 점점 더 다양한 방식으로 분산 배포하고 컨테이너 환경에서 배포하며, Kubernetes Orchestration 엔진의 증가하는 수를 사용하여 애플리케이션이 배포되고 있습니다. 또한, 기업들은 클라우드 간, 클라우드 및 On-Premises 환경 사이의 차이점으로 인해 끌리지 않고 여러 환경에 애플리케이션을 배포하고자 합니다.

목차

1. NGINX 모던 앱을 위한 “Golden Image”
2. 모던 앱 적응형 애플리케이션의 정의
3. NGINX 모던 앱 참조 아키텍처 설계
4. 코드 배포 방법
5. 모던 앱 통합 및 더 나은 유연성
6. NGINX 모던 앱 참조 아키텍처 시작하기

1. NGINX 모던 앱을 위한 “Golden Image”

기업들은 모든 이점을 얻고 싶지만, 보안, 네트워킹, 관찰 및 성능 모니터링, 스케일링 등의 모든 요소를 함께 결합하는 것은 실제로 작업이 필요합니다. 결과적으로 생산환경에서 충분히 견고한 플랫폼을 만드는 것은 더 많은 작업이 필요합니다.
그래서 그들은 이렇게 생각합니다. “왜 우리가 단일 레포지터리에서 시작할 수 있는 모던 앱용 ‘Golden Image’ 가 없을까?”

그것은 좋은 질문입니다. NGINX는 그것을 자신들의 도전 과제로 받아들이고 좋은 대답을 내기 위해 노력해왔습니다.
먼저, NGINX는 더 구체적인 용어로 질문을 재정의 했습니다. NGINX는 고객과 커뮤니티가 이러한 질문을 하고 있다고 생각합니다.
“다양한 소프트웨어 제품을 더 일관성 있게 통합하고, 스택을 조정하여 올바른 구성과 설정을 찾아줄 수 있으며, 우리가 작업하고 문제를 해결할 수 있도록 도와줄 수 있나요?”

NGINX는 이러한 질문에 대답할 수 있는 솔루션이 있으면 전체 커뮤니티에게 이득이 될 것으로 보고 있습니다.
NGINX의 수백 개의 기업 파트너 및 모든 주요 클라우드 공급자 뿐만 아니라, 모두가 이득을 볼 수 있는 해결책입니다.
이상적으로, 이 솔루션은 그저 테스트 용도가 아닌 Kubernetes 환경에서 실제 운영 애플리케이션으로 배포할 준비가 된 견고하고 검증된 코드여야 합니다.
NGINX는 누구든지 GitHub에서 NGINX의 작업을 Clone 하기를 바랍니다.

NGINX Sprint 2.0에서 NGINX는 모던 앱용 오픈소스 아키텍처 및 배포 모델인 Modern Apps Reference Architecture, 모던 앱 참조 아키텍처 (MARA)를 발표했습니다. 해당 포스트에서는 NGINX가 만든 것과 그 작동 방식에 대해서 설명합니다.

NGINX 모던 앱 참조 아키텍처

2. 모던 앱 적응형 애플리케이션의 정의

먼저, 현대적이고 적응성 있는 애플리케이션의 이상적인 설계를 정의해 보겠습니다.
이는 마이크로서비스로 구성될 수 있으며 컨테이너화 되고, Native Design 원칙 (유연한 결합, 쉬운 확장, 인프라에 종속되지 않음)을 준수할 수 있습니다.
그러나 이러한 요건을 모두 충족할 필요는 없습니다. 현대 애플리케이션의 이념 중 일부는 인프라 추상화를 활용하기 위한 구조화입니다.
이 정의는 간단하지만 모든 참조 아키텍초의 기본 템플릿을 구성하는 데 중요합니다.

현대적인 애플리케이션 아키텍처의 주요 요소로는 이식성, 확장성, 복원력 및 민첩성이 있습니다.

  • 이식성 – 애플리케이션을 여러 유형의 장치 및 인프라, 공용 클라우드 및 On-premises에 쉽게 배포할 수 있습니다.
  • 확장성 – 애플리케이션은 전 세계에서 발생하는 수요의 급증 또는 감소를 수용할 수 있도록 빠르고 원활하게 확장 또는 축소할 수 있습니다.
  • 복원력 – 애플리케이션은 다양한 가용성 지역, 클라우드 또는 데이터 센터에서 새로운 클러스터 또는 가상 환경으로 실패를 전환할 수 있습니다.
  • 민첩성 – 애플리케이션은 자동화된 CI/CD Pipeline을 통해 빠르게 업데이트할 수 있습니다. 현대 애플리케이션의 세계에서는 이는 높은 코드 속도와 더 자주 시행되는 Code Push를 의미합니다.

3. NGINX 모던 앱 참조 아키텍처 설계

NGINX는 현대 앱 정의 및 배포 패턴의 기본 요구 사항을 충족하는 플랫폼을 만들고자 했습니다. 기술적 목표 외에도, NGINX는 현대 앱 디자인 원칙을 설명하고 Kubernetes에서 배포하는 것을 권장하는 것이 목적이었습니다. 그리고 개발자, DevOps 및 Platform Ops팀이 사용, 수정 및 개선할 수 있는 “도용 가능한” 코드를 제공하길 원했습니다. 즉, NGINX는 다음을 제공하고자 했습니다.

  • 쉽게 배포할 수 있는 프로덕션에서 이용 가능한 Kubernetes 아키텍처를 제공하며, 토이 프로젝트가 아닌 실제로 운영 가능한 것을 목표로 했습니다.
  • 파트너 제품이 Kubernetes에서 작동하는 방식을 강조하는 플랫폼을 제공하고자 했습니다.
  • Kubernetes Ingress Controller의 손쉬운 빌드 및 배포를 위해 푸시 버튼을 제공하고자 했습니다.
  • 미래 제품 및 제휴 통합을 위한 테스트 환경을 제공하고자 했습니다.
  • 플러그인형 배포 프레임워크를 제공하고자 했습니다.
  • 간편한 검색 및 채택을 위해 오픈 소스 코드의 단일 레포지터리를 제공하고자 했습니다.

4. 코드 배포 방법

샘플 애플리케이션을 설치하고 배포하려면 시작 스크립트를 호출하는 단일 명령을 시행하고 다음 Pulumi 프로젝트가 지정된 순서로 실행됩니다. 각 프로젝트 이름은 레포지토리의 Root 디렉터리를 기준으로 한 디렉터리 이름에 해당합니다.
자세한 내용은 README를 참조하십시오.

vpc - Defines and installs VPC and subnets to use with EKS
  └─eks - Deploys EKS
    └─ecr - Configures ECR for use in EKS cluster
      └─kic-image-build - Builds new NGINX Ingress Controller image
        └─kic-image-push - Pushes image built in previous step to ECR
          └─kic-helm-chart - Deploys NGINX Ingress Controller to EKS 
                             cluster
            └─logstore - Deploys Elastic log store to EKS cluster
              └─logagent - Deploys Elastic (filebeat) logging agent to 
                           EKS cluster
               └─certmgr - Deploys cert-manager.io Helm chart to EKS 
                           cluster
                 └─anthos - Deploys Bank of Anthos application to EKS 
                            cluster

5. 모던 앱 통합 및 더 나은 유연성

NGINX는 초기 노력이 귀사의 Kubernetes 환경에 필요한 모든 통합을 제공하지 않을 수도 있다는 것을 인식하고 있습니다.
Platform Ops팀은 똑똑한 선택이지만 무한한 선택은 아닙니다. 새로운 참조 플랫폼을 시도하고 다양한팀이 적극적으로 채용할 수 있도록 하기 위해, 향후 많은 개선을 계획하고 있습니다.

  • Digital Ocean, OpenShift, Rancher, vSphere 및 기타 Kubernetes 환경 구축
  • NGINX Management Suit와 통합하여 NGINX Plus Ingress Controller를 관리하고 모니터링
  • NGINX App Protect를 위한 즉시 사용 가능한 구성 제공
  • BIG‑IP , Cloud Services 및 Volterra 와 같은 F5 제품 및 서비스와 통합
  • NGINX Service Mesh 및 Istio 기반 Aspen Mesh와 통합
  • Terraform 및 기타 자동화 도구 와 기본적으로 통합
  • 기타 CI/CD 옵션 지원
  • 인프라 및 애플리케이션 서비스를 위해 별도 또는 여러 클러스터 배포

NGINX는 다른 참조 플랫폼을 위한 프레임워크 및 모든 유형의 차별화된 현대 애플리케이션을 구축하기 위해 “Clone 할 수 있는” 출발점으로 사용될 수 있도록 노력하고 있습니다. Kubernetes가 현대 애플리케이션을 구축하고 Platform Ops와 Shift-left 문화를 강화하는 데 사용되는 강력한 매커니즘이기 때문에, NGINX 모던 앱 참조 아키텍처가 확장 가능하고 플러그인이 가능할수록 더 좋습니다. 커뮤니티 분들께서 NGINX의 작업에 대해 어떻게 생각하시는지, 그리고 무엇을 구축하시는지에 대해 흥미롭게 지켜보고 있습니다.

6. NGINX 모던 앱 참조 아키텍처 시작하기

참고 플랫폼을 다운로드하여 사용해보세요. 생각하시는 바와 차후에 원하는 기능이 있으면 알려주세요.
Pull Request는 대환영입니다. NGINX는 커뮤니티와 모든 개발자에게 헌신할 수 있는 현대적이고 적응성 높은 애플리케이션의 차세대를 파트너와 함께 만들기를 간절히 원합니다.

아래 뉴스레터를 구독하여 NGINX STORE가 전하는 NGINX 모던 앱 참조 아키텍처의 최신 소식을 빠르게 전달 받아 보세요.