오픈소스 API 플랫폼 - Apache APISIX 특징과 설치(1)
오픈소스 API 플랫폼 - Apache APISIX 특징과 설치
[머릿말]
기존 아키텍처의 문제를 해결하는 동시에 클라우드 네이티브 환경에 활용하려면 복잡한 레거시 시스템을 비즈니스적으로 독립적으로 구성하고 새로운 시스템과 연결을 쉽게 구성해야 합니다.
API플랫폼을 도입하는 가장 큰 숙제라고 할 수 있으며, Loosly coupling 방식으로 로그인 인증/인가등과 복잡한 모놀리스식 비즈니스 로직을 분리하여 개발 생산성을 향상하는 방법으로도 API가 필요할 수 있습니다.
APISIX가 그러한 API플랫폼으로 가능성이 보여서 구체적인 내용들을 작성하면서 금융 분야에서도 사용 가능한지 검토해 봅니다.
Apache APISIX
소개 - https://github.com/apache/apisix/wiki
프로젝트 저장소: https://github.com/apache/apisix
Apache APISIX는 로드 밸런싱, 동적 업스트림, 카나리아 릴리스, 서킷 브레이킹, 인증 및 관찰 가능성과 같은 풍부한 트래픽 관리 기능을 제공하는 동적, 실시간, 고성능 오픈 소스 API 게이트웨이입니다.
NGINX 및 LuaJIT를 기반으로 구축된 Apache APISIX는 최대 23,000의 단일 코어 QPS와 평균 0.2밀리초에 불과한 지연으로 초고성능을 제공합니다.
API 게이트웨이인 Apache APISIX에는 다양한 애플리케이션 시나리오가 있습니다.
* 게이트웨이, Kubernetes Ingress 컨트롤러 및 서비스 메시에 활용
* API 및 마이크로 서비스 트래픽을 빠르고 안전하게 처리
현재 Zoom, Airwallex, Lotus Cars, vivo 및 European Factory Platform과 같은 전 세계 기업 및 조직에서 테스트되고 높은 평가를 받고 있습니다.
Apache APISIX의 주요 기능:
1. 동적 라우팅:
URI, 헤더, 매개변수 등을 기준으로 트래픽을 라우팅하고, 동적 로드 밸런싱과 트래픽 분할을 지원.
2. 플러그인 아키텍처:
Lua 또는 다른 언어로 작성된 플러그인을 통해 기능을 확장 가능하고 속도 제한, 로깅, 인증 등의 작업을 수행.
3. 고성능:
NGINX와 OpenResty로 구축되어 고성능 환경에 최적화되어 있으며, 초당 수백만 건의 요청을 처리할 수 있음
4. 다중 프로토콜 지원:
HTTP, HTTPS, TCP, UDP, WebSocket 등 다양한 프로토콜을 지원하는 애플리케이션에 적합
5. 동적 구성:
서비스를 재시작하지 않고 구성 변경이 가능하여 무중단 업데이트가 가능.
6. 관리 API:
RESTful Admin API를 제공하여 게이트웨이를 프로그래밍 방식으로 관리하고
CI/CD 파이프라인과 쉽게 통합할 수 있음.
7. 보안:
SSL 종료, IP 화이트리스트, OAuth2.0, 키 인증 등 다양한 보안 기능을 제공하여 API를 보호
8. 관찰 가능성:
Prometheus, SkyWalking과 같은 도구와의 통합을 통해 모니터링 및 성능 추적이 가능하며, 문제 진단에 도움을 줍니다.
9. 확장성:
Lua, Python, Go 등 다양한 언어로 작성된 커스텀 플러그인을 통해 APISIX를 확장하여 유연한 대응 가능
방법 1: Docker를 이용한 APISIX 설치
Docker를 사용하면 간편하게 Apache APISIX를 실행할 수 있습니다.
1. Docker와 Docker Compose가 설치되어 있는지 확인합니다.
2. 다음 명령어로 Apache APISIX를 실행합니다:
git clone https://github.com/apache/apisix-docker.git
cd apisix-docker/example
docker-compose -p docker-apisix up -d
■ 참고 : Docker Install (도커 설치)
1. [InfraPlatform] - Linux Docker Install
2. [DevOps] - Linux Docker와 Docker Compose 설치 - Ubuntu_Red Hat_Rocky
방법 2: 소스 코드로 APISIX 직접 설치
OpenResty와 etcd를 사용하여 직접 설치하는 방법입니다.
- OpenResty 설치
# OpenResty 설치
sudo apt-get install -y libpcre3 libpcre3-dev libssl-dev perl make build-essential curl
curl -L https://openresty.org/download/openresty-1.21.4.1.tar.gz | tar zxvf -
cd openresty-1.21.4.1
./configure --with-luajit --without-http_redis2_module --with-http_stub_status_module
make && sudo make install
- etcd 설치
# etcd 설치
wget https://github.com/etcd-io/etcd/releases/download/v3.4.15/etcd-v3.4.15-linux-amd64.tar.gz
tar xzvf etcd-v3.4.15-linux-amd64.tar.gz
cd etcd-v3.4.15-linux-amd64
sudo cp etcd etcdctl /usr/local/bin/
- APISIX 설치
# APISIX 설치
git clone https://github.com/apache/apisix.git
cd apisix
make deps
- APISIX 실행
conf/config.yaml 파일을 열어 필요한 설정을 구성합니다. 특히, etcd의 주소와 기타 필수 매개변수를 설정해야 합니다.
./bin/apisix start
- 기타 설정
1. 관리 API 사용
Apache APISIX를 관리하려면 Admin API를 사용할 수 있습니다.
기본적으로 http://127.0.0.1:9180에서 Admin API에 접근할 수 있습니다.
2. 플러그인 설정
APISIX는 다양한 플러그인을 제공합니다.
conf/config.yaml에서 플러그인을 활성화할 수 있습니다.
3. 모니터링 및 로깅
Prometheus 및 SkyWalking과 같은 도구를 사용하여
APISIX의 상태와 성능을 모니터링할 수 있습니다.
4. 업데이트 및 유지관리
새로운 버전이 출시되면, git pull 명령을 사용하여 최신 버전을 가져오고
다시 빌드하여 업데이트할 수 있습니다.
3. Docker 프로세스 확인
# Docker Compose로 컨테이너 시작
docker-compose -p docker-apisix up -d
# 컨테이너 상태 확인
docker-compose -p docker-apisix ps
docker ps
docker stats <컨테이너_ID_또는_이름>
# 컨테이너 로그 확인
docker-compose -p docker-apisix logs
# 컨테이너 종료
docker-compose -p docker-apisix down
# 특정 서비스만 종료
docker-compose -p docker-apisix stop <서비스_이름>
# 컨테이너 재시작
docker-compose -p docker-apisix restart
docker-compose -p docker-apisix restart <서비스_이름>
ㅁ 재시작 : docker-compose -p docker-apisix restart
[root@dtest example]# docker-compose -p docker-apisix restart
[+] Restarting 1/6
[+] Restarting 2/6er-apisix-web1-1 Started 1.2s
✔ Container docker-apisix-web1-1 Started 1.2s[+] Restarting 4/6r-apisix-etcd-1 Restarting 1.3s
✔ Container docker-apisix-web1-1 Started 1.2s ⠸ Container docker-apisix-grafana-1 Restarting 1.4s
✔ Container docker-apisix-etcd-1 Started 1.5s[+] Restarting 5/6r-apisix-apisix-1 Restarting 1.4s
✔ Container docker-apisix-web1-1 Started
ㅁ 종료 : docker-compose -p docker-apisix stop
[root@dtest example]# docker-compose -p docker-apisix stop
[+] Stopping 2/5
✔ Container docker-apisix-grafana-1 Stopped 0.3s[+] Stopping 3/5ker-apisix-prometheus-1 Stopping 0.2s
✔ Container docker-apisix-grafana-1 Stopped 0.3s ⠹ Container docker-apisix-apisix-1 Stopping 0.3s
[+] Stopping 4/5ker-apisix-prometheus-1 Stopping
ㅁ 실행 : docker-compose -p docker-apisix start
[root@dtest example]# docker-compose -p docker-apisix start
[+] Running 1/5
[+] Running 1/5ocker-apisix-grafana-1 Started 0.7s
[+] Running 3/5ocker-apisix-grafana-1 Started 0.7s
✔ Container docker-apisix-grafana-1 Started 0.7s ⠧ Container docker-apisix-web2-1 Starting 0.8s
[+] Running 4/6ocker-apisix-web2-1 Started 0.8s
✔ Container docker-apisix-grafana-1 Started 0.7s ⠇ Container docker-apisix-prometheus-1 Starting
ㅁ 상태 확인 : docker-compose -p docker-apisix ps
[root@dtest example]# docker-compose -p docker-apisix ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
docker-apisix-apisix-1 apache/apisix:3.9.0-debian "/docker-entrypoint.…" apisix 59 minutes ago Up About a minute 0.0.0.0:9080->9080/tcp, :::9080->9080/tcp, 0.0.0.0:9091-9092->9091-9092/tcp, :::9091-9092->9091-9092/tcp, 0.0.0.0:9180->9180/tcp, :::9180->9180/tcp, 0.0.0.0:9443->9443/tcp, :::9443->9443/tcp
docker-apisix-etcd-1 bitnami/etcd:3.5.11 "/opt/bitnami/script…" etcd 59 minutes ago Up About a minute 0.0.0.0:2379->2379/tcp, :::2379->2379/tcp, 2380/tcp
docker-apisix-grafana-1 grafana/grafana:7.3.7 "/run.sh" grafana 59 minutes ago Up About a minute 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp
docker-apisix-prometheus-1 prom/prometheus:v2.25.0 "/bin/prometheus --c…" prometheus 59 minutes ago Up About a minute 0.0.0.0:9090->9090/tcp, :::9090->9090/tcp
docker-apisix-web1-1 nginx:1.19.0-alpine "/docker-entrypoint.…" web1 59 minutes ago Up About a minute 0.0.0.0:9081->80/tcp, :::9081->80/tcp
docker-apisix-web2-1 nginx:1.19.0-alpine "/docker-entrypoint.…" web2 59 minutes ago Up About a minute 0.0.0.0:9082->80/tcp, :::9082->80/tcp
5. 설치확인
웹 브라우저에서 http://127.0.0.1:9080으로 접속하여 Apache APISIX가 정상적으로 작동하는지 확인할 수 있습니다.
6. Docker 자동 재시작 설정
컨테이너가 실패할 경우 자동으로 재시작되도록 설정하려면 docker-compose.yml 파일에 restart 정책을 추가할 수 있습니다:
services:
<서비스_이름>:
image: <이미지_이름>
restart: always
#restart 정책은 no, on-failure, always, unless-stopped 옵션 가능
7. 구동되는 Docker-Compose 목록 확인
docker-compose -p docker-apisix ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
docker-apisix-apisix-1 apache/apisix:3.9.0-debian "/docker-entrypoint.…" apisix 45 minutes ago Up 45 minutes 0.0.0.0:9080->9080/tcp, :::9080->9080/tcp, 0.0.0.0:9091-9092->9091-9092/tcp, :::9091-9092->9091-9092/tcp, 0.0.0.0:9180->9180/tcp, :::9180->9180/tcp, 0.0.0.0:9443->9443/tcp, :::9443->9443/tcp
docker-apisix-etcd-1 bitnami/etcd:3.5.11 "/opt/bitnami/script…" etcd 45 minutes ago Up 45 minutes 0.0.0.0:2379->2379/tcp, :::2379->2379/tcp, 2380/tcp
docker-apisix-grafana-1 grafana/grafana:7.3.7 "/run.sh" grafana 45 minutes ago Up 45 minutes 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp
docker-apisix-prometheus-1 prom/prometheus:v2.25.0 "/bin/prometheus --c…" prometheus 45 minutes ago Up 45 minutes 0.0.0.0:9090->9090/tcp, :::9090->9090/tcp
docker-apisix-web1-1 nginx:1.19.0-alpine "/docker-entrypoint.…" web1 45 minutes ago Up 45 minutes 0.0.0.0:9081->80/tcp, :::9081->80/tcp
docker-apisix-web2-1 nginx:1.19.0-alpine "/docker-entrypoint.…" web2 45 minutes ago Up 45 minutes 0.0.0.0:9082->80/tcp, :::9082->80/tcp
* 관련 URL
- docker-apisix-prometheus : 9090->9090/tcp
- docker-apisix-grafana : 3000->3000/tcp
- docker-apisix-etcd : 2379->2379/tcp, 2380/tcp
- 웹서버 : docker-apisix-web1 : 9081,9082->80/tcp
[참고]
Apache APISIX Reviews 2024: Details, Pricing, & Features | G2
[참고]
1. [InfraPlatform] - Linux Docker Install
2. [DevOps] - Linux Docker와 Docker Compose 설치 - Ubuntu_Red Hat_Rocky