블로그 | NGINX

NGINX를 사용하여 Kubernetes에서 TCP 및 UDP 트래픽 로드 밸런싱

NGINX-F5-수평-검정-유형-RGB의 일부
아미르 라우드닷 썸네일
아미르 라우드다트
2022년 6월 7일 게시

[ 편집자 - 이 게시물은 F5 NGINX를 사용하여 Kubernetes 트래픽 관리라는 포괄적인 eBook에서 발췌한 것입니다. 실용 가이드 오늘 무료로 다운로드하세요 .]

NGINX Ingress Controller는 HTTP 트래픽과 함께 TCP 및 UDP 트래픽의 부하를 분산하므로 다음을 포함하여 해당 프로토콜을 기반으로 하는 다양한 앱과 유틸리티의 트래픽을 관리하는 데 사용할 수 있습니다.

  • MySQL, LDAP 및 MQTT – 많은 인기 있는 애플리케이션에서 사용되는 TCP 기반 앱
  • DNS, syslog 및 RADIUS – 에지 장치 및 비트랜잭션 애플리케이션에서 사용되는 UDP 기반 유틸리티

NGINX Ingress Controller를 사용한 TCP 및 UDP 로드 밸런싱은 다음과 같은 상황에서 Kubernetes 애플리케이션에 네트워크 트래픽을 분산하는 데도 효과적인 솔루션입니다.

  • NGINX Ingress Controller가 아닌 엔드투엔드 암호화(EE2E)를 사용하고 애플리케이션이 암호화 및 복호화를 처리하도록 합니다.
  • TCP 또는 UDP 기반 애플리케이션의 경우 고성능 로드 밸런싱이 필요합니다.
  • 기존 네트워크(TCP/UDP) 로드 밸런서를 Kubernetes 환경으로 마이그레이션할 때 변경 사항을 최소화하려고 합니다.

NGINX Ingress Controller에는 TCP/UDP 부하 분산을 지원하는 두 개의 NGINX Ingress 리소스가 함께 제공됩니다.

  • GlobalConfiguration 리소스는 일반적으로 클러스터 관리자가 DevOps 팀에서 사용할 수 있는 TCP/UDP 포트( 리스너 )를 지정하는 데 사용됩니다. 각 NGINX Ingress Controller 배포에는 GlobalConfiguration 리소스가 하나만 있을 수 있습니다.
  • TransportServer 리소스는 일반적으로 DevOps 팀에서 애플리케이션에 대한 TCP/UDP 부하 분산을 구성하는 데 사용됩니다. NGINX Ingress Controller는 관리자가 GlobalConfiguration 리소스에서 인스턴스화한 포트에서만 수신합니다. 이를 통해 포트 간 충돌을 방지하고 DevOps 팀이 관리자가 안전하다고 미리 결정한 포트만 공개 외부 서비스에 노출하도록 하여 보안을 한층 더 강화할 수 있습니다.

다음 다이어그램은 GlobalConfiguration 및 TransportServer 리소스에 대한 샘플 사용 사례를 보여줍니다. gc.yaml 에서 클러스터 관리자는 GlobalConfiguration 리소스에서 TCP 및 UDP 리스너를 정의합니다. ts.yaml 에서 DevOps 엔지니어는 MySQL 배포로 트래픽을 라우팅하는 TransportServer 리소스의 TCP 리스너를 참조합니다.

GlobalConfiguration 및 TransportServer 리소스에 대한 사용 사례의 토폴로지 다이어그램

gc.yaml 의 GlobalConfiguration 리소스는 두 개의 리스너를 정의합니다. syslog 서비스에 연결하기 위한 포트 514의 UDP 리스너와 MySQL 서비스에 연결하기 위한 포트 5353의 TCP 리스너입니다.

ts.yaml 의 TransportServer 리소스의 6~8행은 gc.yaml이름( mysql-tcp ) 으로 정의된 TCP 리스너를 참조하고, 9~14행은 TCP 트래픽을 mysql-db 업스트림으로 보내는 라우팅 규칙을 정의합니다.

이 예에서 DevOps 엔지니어는 MySQL 클라이언트를 사용하여 구성이 제대로 작동하는지 확인합니다. 이는 MySQL 배포 내의 rawdata_content_schema 데이터베이스에 있는 테이블 목록의 출력을 통해 확인됩니다.

$ echo “테이블 표시” | mysql –h <외부_IP_주소> -P <포트> -u <사용자> –p rawdata_content_schema 비밀번호 입력: <비밀번호> Tables_in_rawdata_content_schema 작성자 게시물

UDP 트래픽을 위한 TransportServer 리소스도 비슷하게 구성됩니다. 전체 예제는 GitHub의 NGINX Ingress Controller 리포지토리에서 기본 TCP/UDP 부하 분산을 참조하세요. 고급 NGINX 사용자는 repo에 있는 TCP/UDP 부하 분산 지원 예제에서 볼 수 있듯이 stream-snippets ConfigMap 키를 사용하여 기본 NGINX 구성으로 TransportServer 리소스를 확장할 수 있습니다.

TransportServer 리소스에서 구성할 수 있는 기능에 대한 자세한 내용은 NGINX Ingress Controller 설명서를 참조하세요.

이 게시물은 포괄적인 eBook인 NGINX를 사용한 Kubernetes 트래픽 관리에서 발췌한 것입니다. 실용 가이드 오늘 무료로 다운로드하세요 .

오늘 30일 무료 평가판을 통해 NGINX Plus 기반 NGINX Ingress Controller를 직접 사용해 보시거나, 사용 사례에 대해 논의하기 위해 저희에게 문의하세요 .


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