Kong API Gateway #1 - Architecture 소개 및 Kubernetes와의 통합

1 minute read

Table of Contents

1편에서는 Kong에 대한 전반적인 개요부터 Kubernetes 환경에 Kong이 어떻게 통합되는지까지 설명해 볼 예정이다.

  1. Kong overview
  2. Kong architecture
  3. Kong plugins
  4. Kubernetes 환경에서의 Kong
  5. 더 알아보면 좋을만한 주제들

Kong overview

API Gateway의 실무 검토에 대한 필요성이 있어 대중적으로 사용되는 API gateway들에 대해 기술 검토를 진행해 보았고 결과적으로 Kong을 도입하기로 결정하게 되었으며 도입과정에서 다른 API gateway들에 비해 느껴진 Kong의 장단점에 대해 정리해 보면 다음과 같다.

장점

  • 설치 및 환경구성이 용이하다. (k8s로 관리하는 경우 선언적(declarative) 리소스 관릭 가능)
  • Nginx기반으로 성능이 우수하다.
  • Kubernetes와의 통합이 쉽다.
  • 인기도가 높다. (reference)

단점

  • Lua script로 custom plugin제작이 가능하고 kong-pongo를 통한 unittest, integration test가 가능하지만 레퍼런스가 적고 활용가능한 안정된 라이브라리 수가 적어 복잡한 로직의 구현에 개인적인 어려움이 있었다.
  • 실무 도입 및 도입과정에서 발생한 이슈에 관련 레퍼런스가 공식자료 외에 찾기 쉽지 않았다.

Kong architecture

Kong는 Openresty를 기반으로 구현되어 아키텍쳐는 아래 그림과 같다.

Image Alt architecture

Openresty: nginx기반의 웹플랫폼으로 자체 LuaJIT엔진을 기반으로 Lua script를 수행할수 있음

Datastore: Default로 Cassandra와 PostgreSQL을 사용하여 구성하며, Database를 구성하지 않는 db-less모드로도 구동이 가능하다. db-less모드에서는 Declarative config형식으로 설정을 yaml등의 형식으로 저장한다.

Plugins: Plugin은 Lua script로 작성되며 요청/응답(request/response) lifecycle을 intercept한다. Plugin이용자/개발자는 제공되는 기본 plugin을 사용하거나 custom plugin을 제작하므로서 request/response lifecycle에 개입할 수 있음.


Kong plugins

Built-in Plugins

  • Kong API 사용자는 기본적으로 제공되는 Plugin들을 사용할 수 있으며 Basic, Enterprise버전으로 나뉜다. (document)

Custom plugin

  • Lua script를 활용하여 자체 plugin 제작이 가능하다.
  • Plugin Development Kit를 제공하므로 plugin제작시 활용이 가능하다 (document)

Kubernetes 환경에서의 Kong

Kubernetes ingress controller

*Ingress: 클러스터 내의 서비스에 대한 외부 접근을 관리하는 API 오브젝트

*Ingress controller: Ingress rule들을 실제로 작동시켜주는 역할

  • Kong: 모든 트래픽을 처리하는 proxy 역할
  • Controller: Kubernetes의 configuration들을 Kong에 sync하는 process. Kubernetes 클러스터의 업데이트 및 변경사항을 감지하여 Kong에 반영함.

Image Alt ingress-contoller

Resource mapping

Kong의 리소스는 아래와 같이 kubeneretes의 리소스로 mapping되어 선언적으로 관리된다.

Image Alt ingress-contoller

Kubernetes의 리소스 : Kong의 리소스

  • Ingress: Route
  • Service: Service and upstream
  • 이외에도 Custom resource를 정의하여 KongPlugin등을 k8s 리소스로 매핑하여 사용이 가능하다.

더 알아보면 좋을만한 주제들

이 문서에서는 다루지 않지만 더 알아보면 좋을만한 주제들에 대해 알아본다.

Istio와의 통합(document)

Istio를 사용하는 환경만 구성하면 이후 원하는 namespace에 ‘Istio-enabled=enable’ label을 추가하는 단순한 작업만으로 각 서비스에 proxy sidecar(Envoy)를 자동 구성하도록 설정이 가능하다.


다음 장에서는 Kubernetes 환경에 Kong을 배포하고 Custom plugin을 직접 구현하여 배포까지 진행해볼 예정이다.

Comments