Apache APISIX

Apache APISIX는 고성능 클라우드 네이티브 API 게이트웨이로, 2019년 CNCF(Cloud Native Computing Foundation) 샌드박스 프로젝트로 시작되어 2022년 10월에는 CNCF 인큐베이팅 프로젝트로 승격되었다. 이 API 게이트웨이는 클라우드 네이티브 환경에서 API 트래픽을 관리하기 위한 동적이고 확장 가능한 솔루션을 제공한다.

핵심 특징

1. 아키텍처 기반

APISIX는 OpenResty(Nginx + Lua)를 기반으로 구축되었으며, etcd를 중앙 구성 저장소로 사용한다.

이 조합은 다음과 같은 이점을 제공한다:

풍부한 플러그인 생태계

APISIX는 100개 이상의 플러그인을 제공하며, 이를 통해 다양한 기능을 구현할 수 있다:

미크로서비스 지원

현대적인 미크로서비스 아키텍처에 최적화되어 있다:

개발자 친화적 인터페이스

실제 활용 사례

트래픽 관리

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
-- 속도 제한 플러그인 구성 예제
{
    "plugins": {
        "limit-req": {
            "rate": 5,          -- 초당 요청 수
            "burst": 10,        -- 버스트 허용 요청 수
            "rejected_code": 429 -- 제한 초과 시 응답 코드
        }
    }
}

이 구성은 초당 5개 요청으로 API 접근을 제한하고, 버스트 트래픽을 위해 10개의 추가 요청을 대기열에 넣는다.

보안 구현

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
-- JWT 인증 플러그인 구성 예제
{
    "plugins": {
        "jwt-auth": {
            "key": "user-key",
            "secret": "my-secret-key",
            "algorithm": "HS256"
        }
    }
}

이 구성은 JWT 토큰으로 API를 보호하며, 클라이언트는 유효한 JWT 토큰을 제공해야 접근할 수 있다.

서비스 분산 및 라우팅

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
-- 업스트림 서비스 라우팅 구성 예제
{
    "upstream": {
        "type": "roundrobin",
        "nodes": {
            "backend-service-1:8080": 1,
            "backend-service-2:8080": 1
        }
    }
}

이 구성은 들어오는 트래픽을 두 개의 백엔드 서비스 간에 라운드 로빈 방식으로 분산한다.

설치 및 시작하기

Docker를 사용한 빠른 설치

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# APISIX와 etcd 실행
docker run -d --name etcd \
  -p 2379:2379 \
  -e ALLOW_NONE_AUTHENTICATION=yes \
  bitnami/etcd:3.5.0

docker run -d --name apisix \
  -p 9080:9080 \
  -p 9443:9443 \
  --link etcd:etcd \
  -v $(pwd)/config.yaml:/usr/local/apisix/conf/config.yaml \
  apache/apisix:2.15.0

기본 API 라우팅 생성

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# API 라우팅 생성
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
    "uri": "/api/v1/example",
    "upstream": {
        "type": "roundrobin",
        "nodes": {
            "example.com:80": 1
        }
    }
}'

이 명령은 /api/v1/example 경로에 대한 요청을 example.com으로 라우팅하는 기본 경로를 생성한다.


용어 정리

용어설명
etcdetcd는 오픈소스 기반의 **분산 키-값 저장소(distributed key-value store)**로, 분산 시스템이나 클러스터 환경에서 중요한 설정 데이터를 저장하고 관리하는 데 사용된다. 데이터의 **일관성(consistency)**과 **고가용성(high availability)**을 보장하며, 특히 Kubernetes와 같은 컨테이너 오케스트레이션 플랫폼에서 핵심적인 역할을 한다. etcd는 Raft 알고리즘을 기반으로 동작하며, 리더 선출과 데이터 복제를 통해 안정적인 데이터 관리와 시스템 조율을 지원한다.

etcd의 주요 특징
1. 일관성과 신뢰성:
- Raft 알고리즘을 사용하여 여러 노드 간 데이터 일관성을 유지한다.
- 장애 발생 시에도 데이터를 안전하게 복구할 수 있는 고가용성을 제공한다.
2. 키-값 저장소:
- 데이터를 키-값 쌍으로 저장하며, 계층적 디렉토리 형태로 구조화된다.
- 각 키는 고유하며, 값은 설정 정보나 상태 데이터를 포함할 수 있다.
3. 분산 환경에 최적화:
- 다수의 노드로 구성된 클러스터에서 데이터를 공유하고 동기화한다.
- 네트워크 분할 시에도 리더 선출 및 데이터 복제를 통해 안정적으로 동작한다.
4. 간단한 API:
- RESTful HTTP API를 제공하여 CRUD 작업(생성, 읽기, 업데이트, 삭제)을 쉽게 수행할 수 있다.
- CLI 도구인 etcdctl을 사용하여 클러스터 관리 및 데이터 조작이 가능하다.
5. 보안 기능:
- TLS/SSL 인증을 지원하여 클러스터 데이터를 보호한다.
- 자동 인증 및 암호화를 통해 악의적인 공격으로부터 시스템을 방어한다.

참고 및 출처