블로그 | NGINX

새로운 오픈 소스 모던 앱 참조 아키텍처

NGINX-F5-수평-검정-유형-RGB의 일부
데미안 커리 썸네일
데미안 커리
2021년 8월 24일 게시

NGINX에서는 지난 몇 년간 애플리케이션을 진정으로 현대적이고 적응적으로 만들어야 할 필요성에 대해 논의해 왔습니다. 즉, 이식성, 클라우드 네이티브, 복원성, 확장성 및 업데이트 용이성을 갖춰야 할 필요성에 대해 논의해 왔습니다. 최근에는 현대적 앱의 제작과 배포를 용이하게 하는 두 가지 개념이 주목을 받고 있습니다. 첫 번째는 Platform Ops 로, 기업 수준의 플랫폼 팀이 개발 및 DevOps 팀이 업무를 수행하는 데 필요한 모든 도구를 정리, 유지 관리, 연결 및 보안합니다. 두 번째는 좌측으로 이동하는 것 입니다. 즉, 개발 라이프사이클의 초기 단계에서 프로덕션 등급 보안, 네트워킹 및 모니터링을 애플리케이션에 통합하는 것을 의미합니다. 개발자는 이전에 ITOps에 속했던 기능에 대해 더 많은 책임을 맡게 되지만 동시에 해당 기능을 구현하는 방법에 있어서 더 많은 선택권과 독립성을 갖게 됩니다.

이는 좋게 들리지만 실제로는 Platform Ops를 구현하고 인프라와 운영 툴링을 "왼쪽으로 이동"하는 것이 어렵습니다. 우선, 점점 더 많은 앱이 컨테이너화된 환경에서 고도로 분산된 방식으로 배포되고 있으며, 점점 늘어나는 Kubernetes 오케스트레이션 엔진 중 하나를 사용하고 있습니다. 기업은 또한 클라우드 간, 그리고 클라우드와 온프레미스 환경 간의 차이에 얽매이지 않고 여러 환경에 앱을 배포하고 싶어합니다.

현대 앱을 위한 "황금 이미지"

우리의 고객과 지역 사회는 그들이 직면한 어려움을 해결하기 위해 계속해서 우리에게 도움을 요청하고 있습니다. 그들은 모든 장점을 원하지만 보안, 네트워킹, 관찰 가능성 및 성능 모니터링, 확장 등 모든 요소를 하나로 모으려면 실제 작업이 필요합니다. 결과적으로 생산 환경에 충분히 강력한 플랫폼을 만들려면 더 많은 작업이 필요합니다. 그들은 궁금해합니다: "단일 repo에서 실행할 수 있는 최신 앱에 대한 '골든 이미지'가 없는 이유는 무엇입니까?"

좋은 질문이네요. 우리는 이를 우리만의 도전으로 삼아 좋은 답을 내기로 했습니다. 첫째, 우리는 질문을 더 구체적으로 재구성했습니다. 우리의 고객과 커뮤니티는 다음과 같은 질문을 하고 있다고 생각합니다. "다양한 소프트웨어 제품을 더욱 응집력 있는 전체로 통합하고, 스택을 조정하여 올바른 구성과 설정을 확립하고, 우리의 작업과 수고를 덜어줄 수 있나요? 그리고 기본 서비스와 기능의 차이로 인해 주요 구성을 변경하지 않고도 다양한 클라우드에서 애플리케이션을 실행하는 것을 더 쉽게 만들 수 있습니까?”

우리는 이러한 문제를 해결하는 솔루션이 수백 개 기업의 파트너와 모든 주요 클라우드 공급업체뿐만 아니라 전체 커뮤니티에 유익할 것이라고 생각합니다. 진정한 제로섬 게임이 될 것입니다. 이상적으로, 솔루션은 "장난감"이 아니라 견고하고 테스트를 거쳐 Kubernetes 환경에서 실행되는 라이브 프로덕션 애플리케이션에 배포할 준비가 된 코드입니다. 그리고 솔직히 말해서, 우리는 누구든지 GitHub에서 바로 우리의 작품을 훔칠 수 있기를 바랍니다.

요점을 말하자면, 오늘 NGINX Sprint 2.0 에서 우리는 솔루션 출시를 발표합니다. 이는 최신 앱을 위한 오픈소스 아키텍처이자 배포 모델인 Modern Apps Reference Architecture (MARA)의 첫 번째 반복입니다. 여러분이 이것을 좋아하고, 사용하고, 도용하고, 더 좋게는 이것을 수정하거나 포크하여 개선하거나 맞춤화하기를 바랍니다. 이 게시물에서는 우리가 무엇을 만들었는지, 그리고 그것이 어떻게 작동하는지 설명합니다.

NGINX Modern Apps Reference Architecture의 토폴로지를 보여주는 다이어그램
NGINX Modern Apps 참조 아키텍처

현대적 적응형 애플리케이션 정의

먼저, 이상적인 현대적 적응형 애플리케이션을 정의해 보겠습니다. 마이크로서비스로 구성되고, 컨테이너화되고, 클라우드 기반 설계 원칙(느슨하게 결합되고, 확장이 쉽고, 인프라에 묶이지 않음)을 준수할 수도 있지만 반드시 그럴 필요는 없습니다. 현대적 애플리케이션의 정신 중 하나는 인프라 추상화를 활용하도록 특별히 설계하는 것입니다. 이 정의는 간단하지만 모든 참조 아키텍처에 대한 기본 템플릿을 확립하기 때문에 중요합니다.

최신 애플리케이션 아키텍처의 핵심 요소로는 이식성, 확장성, 복원성, 민첩성이 있습니다.

  • 이동성 – 다양한 유형의 기기와 인프라, 퍼블릭 클라우드와 온프레미스에 애플리케이션을 쉽게 배포할 수 있습니다.
  • 확장성 – 앱은 전 세계 어디에서나 수요의 급증이나 감소에 맞춰 신속하고 원활하게 확장하거나 축소할 수 있습니다.
  • 복원성 – 앱은 다양한 가용성 지역, 클라우드 또는 데이터 센터에 있는 새로 구동된 클러스터나 가상 환경으로 우아하게 장애 조치(failover)할 수 있습니다.
  • 민첩성 – 앱은 자동화된 CI/CD 파이프라인을 통해 빠르게 업데이트될 수 있습니다. 최신 앱의 경우 이는 더 빠른 코드 속도와 더 빈번한 코드 푸시를 의미합니다.

참조 아키텍처 설계

우리는 최신 앱 정의와 배포 패턴의 기본 요구 사항을 충족하는 플랫폼을 만들고 싶었습니다. 기술적 목표 외에도 우리는 최신 앱 디자인 원칙을 설명하고 커뮤니티가 Kubernetes에서 배포하도록 장려하고 싶었습니다. 그렇습니다. 우리는 개발자, DevOps, Platform Ops 팀이 사용하고, 수정하고, 개선할 수 있는 "훔칠 수 있는" 코드를 제공하고 싶었습니다. 간단히 말해서, 우리는 다음을 제공하고 싶었습니다.

  • 장난감이 아닌 쉽게 배포 가능한 프로덕션 준비 Kubernetes 아키텍처
  • Kubernetes에서 파트너 제품이 작동하는 방식을 강조하는 플랫폼
  • Kubernetes Ingress 컨트롤러를 쉽게 빌드하고 배포할 수 있는 푸시 버튼
  • 향후 제품 및 제휴 통합을 위한 테스트 환경
  • 플러그형 배포 프레임워크
  • 발견 및 채택을 단순화하는 오픈 소스 코드의 단일 리포

이 플랫폼의 첫 번째 버전을 위해 우리가 내린 디자인과 파트너십 선택은 다음과 같습니다(다음 버전에 대한 계획은 버전 2에서의 더욱 다양한 통합과 향상된 유연성을 참조하세요). 우리는 파트너와 커뮤니티의 참여를 촉진하기 위해서는 레퍼런스 앱을 파트너 모두에게 포괄적으로 만드는 것이 중요하다고 굳게 믿습니다.

코드가 배포되는 방법

샘플 애플리케이션을 설치하고 배포하려면 시작 스크립트를 호출하는 단일 명령을 실행하면 다음 Pulumi 프로젝트가 표시된 순서대로 실행됩니다. 각 프로젝트 이름은 저장소 의 루트 디렉토리를 기준으로 한 디렉토리 이름에 매핑됩니다. 자세한 내용은 README를 참조하세요.

vpc - EKS와 함께 사용할 VPC 및 서브넷을 정의하고 설치합니다. └─eks - EKS를 배포합니다. └─ecr - EKS 클러스터에서 사용할 ECR을 구성합니다. └─kic-image-build - 새 NGINX Ingress Controller 이미지를 빌드합니다. └─kic-image-push - 이전 단계에서 빌드한 이미지를 ECR에 푸시합니다. └─kic-helm-chart - NGINX Ingress Controller를 EKS에 배포합니다. 
cluster
└─logstore - Elastic 로그 스토어를 EKS 클러스터에 배포합니다. └─logagent - Elastic(filebeat) 로깅 에이전트를 
EKS 클러스터에 배포합니다. └─certmgr - cert-manager.io Helm 차트를 EKS에 배포합니다. 
cluster
└─anthos - Bank of Anthos 애플리케이션을 EKS에 배포합니다. 
cluster

버전 2에서는 더 많은 통합과 더 큰 유연성이 제공됩니다.

저희는 초기 노력이 여러분의 Kubernetes 환경에 필요한 모든 통합을 제공하지 못할 수도 있다는 것을 알고 있습니다. Platform Ops는 스마트한 선택에 관한 것입니다. 하지만 무제한적인 것은 아닙니다. Platform Ops, DevOps 및 개발자 팀이 새로운 참조 플랫폼을 더 쉽게 시험해 보고 잠재적으로 채택할 수 있도록, 우리는 단기적으로 다음을 포함한 많은 개선 사항을 계획하고 있습니다.

  • Digital Ocean, OpenShift, Rancher, vSphere 및 기타 Kubernetes 환경을 구축하세요.
  • NGINX 컨트롤러와 통합하여 NGINX Plus Ingress 컨트롤러를 관리하고 모니터링합니다.

    [ 편집기 – NGINX Controller는 이제 F5 NGINX Management Suite 입니다.]

  • NGINX App Protect 에 대한 기본 구성 제공
  • BIG‑IP , Cloud Services , Volterra 와 같은 F5 제품 및 서비스와 통합
  • NGINX Service Mesh 및 Istio 기반 Aspen Mesh 와 통합
  • Terraform 및 기타 자동화 도구와 기본적으로 통합
  • 다른 CI/CD 옵션 지원
  • 인프라 및 애플리케이션 서비스에 대해 별도 또는 여러 클러스터를 배포합니다.

저희는 저희의 작업이 다른 참조 플랫폼을 위한 프레임워크가 되고 모든 유형의 차별화된 현대 애플리케이션을 구축하기 위한 "도용 가능한" 시작점이 되기를 바랍니다. 쿠버네티스는 최신 애플리케이션을 구축하고 Platforms Ops와 Shift‑Left 문화를 강화하는 데 매우 강력한 메커니즘이므로 참조 아키텍처가 더 광범위하고 플러그인 가능할수록 더 좋습니다. 우리는 여러분, 지역 사회 구성원들이 우리의 작업에 대해 어떻게 생각하는지, 그리고 더 중요하게는 여러분이 그것을 통해 무엇을 만들어낼지 보고 싶습니다.

참조 아키텍처 시작하기

당사의 참조 플랫폼을 다운로드하여 직접 사용해 보세요. 여러분의 의견과 앞으로 우리가 무엇을 만들어가기를 바라는지 알려주세요. 풀 리퀘스트는 언제나 환영합니다. 우리는 커뮤니티와 모든 개발자에게 혜택을 제공하는 차세대 현대적이고 적응 가능하며 "도용 가능한" 애플리케이션에서 여러분과 협력하고 싶습니다.

관련 게시물

이 게시물은 시리즈의 일부입니다. 시간이 지남에 따라 MARA에 기능을 추가함에 따라 블로그에 세부 정보를 게시하고 있습니다.


"이 블로그 게시물에는 더 이상 사용할 수 없거나 더 이상 지원되지 않는 제품이 참조될 수 있습니다. 사용 가능한 F5 NGINX 제품과 솔루션에 대한 최신 정보를 보려면 NGINX 제품군을 살펴보세요. NGINX는 이제 F5의 일부가 되었습니다. 이전의 모든 NGINX.com 링크는 F5.com의 유사한 NGINX 콘텐츠로 리디렉션됩니다."