여러 머신의 클러스터에서 대규모 컨테이너로 마이크로서비스 애플리케이션을 실행하고 관리하는 것은 어려운 작업입니다. 쿠버네티스는 컨테이너 오케스트레이션을 위한 강력한 솔루션을 제공하여 이러한 과제를 해결하는 데 도움이 됩니다. 여기에는 장애 내구성, 자동 확장, 롤링 업데이트, 저장소, 서비스 검색, 부하 분산과 같은 여러 가지 중요한 기능이 포함되어 있습니다.
이 블로그 게시물에서는 HTTP 트래픽을 위한 내장 Kubernetes 부하 분산 프레임워크인 Ingress 와 함께 NGINX 오픈 소스 또는 NGINX Plus를 사용하는 방법을 설명합니다. Ingress를 사용하면 Kubernetes 클러스터의 서비스에 대한 외부 트래픽 라우팅을 제어하는 규칙을 구성할 수 있습니다. Kubernetes와 로드 밸런서를 통합하기 위해 클러스터에 배포하는 소프트웨어인 Ingress 컨트롤러를 제공하는 로드 밸런서를 선택할 수 있습니다. 여기에서는 Ingress와 NGINX Plus, NGINX에 대해 제공되는 Ingress 컨트롤러를 사용하여 마이크로서비스 애플리케이션에 대한 부하 분산을 구성하는 방법을 보여드립니다.
[편집자 - 이전에 NGINX 및 NGINX Plus에 대해 분리되어 있던 컨트롤러가 두 가지 모두에 대한 단일 Ingress 컨트롤러 로 병합되었습니다.]
이 블로그 게시물에서는 Ingress를 사용하여 Kubernetes에 대한 HTTP 부하 분산만 살펴봅니다. 다른 부하 분산 옵션에 대해 자세히 알아보려면 블로그의 NGINX Plus를 사용한 Kubernetes 서비스 부하 분산을 참조하세요.
메모: 이 블로그 게시물에서 논의된 절차에 대한 전체 지침은 GitHub 저장소 에서 확인할 수 있습니다. 이 게시물에서는 필요한 모든 단계를 설명하지 않고, 대신 해당 지침에 대한 링크를 제공합니다.
샘플 애플리케이션을 배포하고 이에 대한 부하 분산을 구성하기 전에 부하 분산 장치를 선택하고 해당 Ingress 컨트롤러를 배포해야 합니다.
Ingress 컨트롤러는 특정 로드 밸런서를 Kubernetes와 통합하는 소프트웨어입니다. NGINX 오픈 소스와 NGINX Plus를 위한 Ingress 컨트롤러를 개발했으며, 현재 GitHub 저장소 에서 사용할 수 있습니다. 타사에서 만든 다른 구현체도 있습니다. 자세한 내용은 Kubernetes의 GitHub 저장소에서 Ingress Controllers 페이지를 방문하세요.
클러스터에 NGINX 또는 NGINX Plus Ingress 컨트롤러를 배포하는 방법에 대한 전체 지침은 GitHub 저장소를 참조하세요.
우리의 샘플 애플리케이션은 여러 서비스로 구성된 전형적인 마이크로서비스 웹 애플리케이션이며, 각각은 별도로 배포됩니다. 카페 라는 앱을 이용하면 티 서비스로 차를 주문하거나, 커피 서비스로 커피를 주문할 수 있습니다. HTTP 요청의 URI를 사용하여 음료 선호도를 표시합니다. /tea 로 끝나는 URI는 차를 제공하고, /coffee 로 끝나는 URI는 커피를 제공합니다. 애플리케이션에 대한 연결은 SSL/TLS로 보호되어야 합니다.
아래 다이어그램은 NGINX Plus 부하 분산 장치가 클라이언트 요청을 적절한 서비스로 라우팅하고 SSL/TLS를 사용하여 클라이언트 연결을 보호하는 중요한 역할을 하는 애플리케이션을 개념적으로 보여줍니다.
클러스터에 애플리케이션을 배포하려면 GitHub 저장소 의 지침을 따르세요.
카페 앱에서는 로드 밸런서가 두 가지 기능을 제공해야 합니다.
Ingress를 사용하여 부하 분산을 구성하려면 Ingress 리소스 에서 규칙을 정의합니다. 규칙은 클러스터의 서비스로의 외부 트래픽을 라우팅하는 방법을 지정합니다.
리소스에서 각각 다른 도메인 이름에 대해 여러 개의 가상 서버를 정의할 수 있습니다. 가상 서버는 일반적으로 클러스터에 배포된 단일 마이크로서비스 애플리케이션에 해당합니다. 각 서버에서 다음을 수행할 수 있습니다.
Ingress에 대한 더 자세한 설명과 예제는 Ingress 문서 페이지 에서 확인할 수 있습니다.
cafe 앱의 Ingress 리소스( cafe‑ingress.yaml )는 다음과 같습니다.
줄별로 살펴보면 다음과 같습니다.
6-9행에서 SSL/TLS 종료를 설정합니다.
13~21번째 줄에서 두 개의 경로 기반 규칙을 정의합니다.
클러스터에 Ingress 및 Secret 리소스를 배포하는 방법에 대한 전체 지침은 GitHub 저장소를 참조하세요.
NGINX Plus Ingress 컨트롤러, 애플리케이션, Ingress 리소스, Secret 리소스를 배포하면 앱을 테스트할 수 있습니다.
/tea URI로 티 요청을 하면 브라우저에서 티 서비스에서 생성된 페이지가 표시됩니다.
차 와 커피 서비스에서 실제로 음료를 제공하지 않고, 음료를 담는 용기에 대한 정보와 요청 내용에 대한 정보만 제공한다는 사실에 너무 실망하지 않기를 바랍니다. 여기에는 컨테이너 호스트 이름과 IP 주소, 요청 URI, 클라이언트 IP 주소가 포함됩니다. 페이지를 새로 고칠 때마다 다른 컨테이너에서 응답을 받습니다.
또한 NGINX Plus 라이브 활동 모니터링 대시 보드에 연결하여 NGINX Plus와 애플리케이션의 각 컨테이너에서 실시간 로드 밸런싱 지표를 확인할 수 있습니다.
Ingress는 기본적인 HTTP 부하 분산 기능을 제공합니다. 그러나 애플리케이션에 대한 부하 분산 요구 사항이 훨씬 더 복잡하여 Ingress에서 지원되지 않는 경우가 많습니다. 이러한 요구 사항 중 일부를 해결하기 위해 Ingress 컨트롤러에 여러 가지 확장 기능을 추가했습니다. 이렇게 하면 로드 밸런싱을 구성하기 위해 Kubernetes 리소스를 계속 사용할 수 있으며(로드 밸런서를 직접 구성하는 것과는 대조적으로) 고급 로드 밸런싱 기능을 활용할 수 있습니다.
사용 가능한 확장 기능의 전체 목록은 GitHub 저장소에서 확인하세요.
또한, Config Maps 리소스나 Annotation을 통해 Kubernetes 리소스를 활용하여 NGINX 구성을 사용자 정의하는 메커니즘을 제공합니다. 예를 들어, proxy_connect_timeout
또는 proxy_read_timeout
지시문의 값을 사용자 정의할 수 있습니다.
부하 분산 요구 사항이 Ingress와 확장 프로그램에서 지원하는 수준을 넘어서는 경우 Ingress 컨트롤러를 사용하지 않는 NGINX Plus 배포 및 구성에 대한 다른 접근 방식을 제안합니다. 자세한 내용은 블로그에서 NGINX Plus를 사용하여 Kubernetes 서비스의 부하 분산을 읽어보세요.
NGINX Plus를 사용하면 Ingress 컨트롤러는 NGINX에서 얻을 수 있는 이점 외에도 다음과 같은 이점을 제공합니다.
Kubernetes는 Ingress를 사용하여 클러스터의 서비스로 외부 트래픽을 라우팅하기 위한 내장된 HTTP 부하 분산 기능을 제공합니다. NGINX와 NGINX Plus는 Kubernetes 부하 분산과 통합되어 Ingress 기능을 완벽하게 지원하고 확장된 부하 분산 요구 사항을 지원하는 확장 기능도 제공합니다.
NGINX Plus와 Ingress 컨트롤러를 사용해 보려면 오늘 무료 30일 평가판을 시작하거나 당사에 문의하여 사용 사례에 대해 논의하세요 .
"이 블로그 게시물에는 더 이상 사용할 수 없거나 더 이상 지원되지 않는 제품이 참조될 수 있습니다. 사용 가능한 F5 NGINX 제품과 솔루션에 대한 최신 정보를 보려면 NGINX 제품군을 살펴보세요. NGINX는 이제 F5의 일부가 되었습니다. 이전의 모든 NGINX.com 링크는 F5.com의 유사한 NGINX 콘텐츠로 리디렉션됩니다."