본문 바로가기
IT-Infra

APISIX Gateway install on ubuntu

by onfact 2024. 4. 27.

회사에서 apisix 를 설치하고 테스트하는 업무가 있어, 로컬PC에 설치하는 과정에서 발생한 이슈들을 생각나는데로 정리합니다.
다만 관심이 있으신 분은 아시겠지만 opensource인 apisix는 공식 install 가이드가 친절하지 않으며,
그 과정에서 많은 고난이 있을 것이라 생각됩니다.
단순 학습이 목표시거나 사이드 프로젝트를 개발하시는 분들은
사이트에서 권고하는 docker 사용이 정신건강에 이로우리라 생각됩니다.

 

APISIX란 ?

 

Apache APISIX는 오픈 소스 및 고성능 API 게이트웨이로, 다양한 네트워크 트래픽 관리 기능을 제공합니다. Lua 언어로 작성되었으며, Nginx와 OpenResty 기반 위에서 실행됩니다. 
API 게이트웨이로서의 역할은 클라이언트와 서버 사이에서 중개자 역할을 하며, API 호출을 관리하고 라우팅하는 기능을 담당합니다.

 

■ 발생 이슈

1. apt를 사용하여 OpenTresty와 LuaRocks를 설치하고 자연스럽게 luarocks를 활용하여 apisix를 설치. 
    플러그인을 추가하려고 하는데 원하는 플러그인 추가가 불가했습니다. 

  • 원인 : 낮은 version 으로 원하는 plugin 설치 불가 ( luarocks의 apisix 최고 버젼은 2.4 )
  • 해결방법 : apisix 바이너리로 3.x 버전 down 후, 직접 설치  

2. 직접 설치 중 다양한 이슈가 발생했는데요 대표적으로 의존성 모듈 에러입니다.

  • 원인 : luarocks 를 활용하여 의존성 모듈을 전체 설치를 못했기에 부분적으로 빠진 모듈에서 에러 발생.
  • 해결방법 : 
    • make deps 명령어를 사용하여 최소한의 종속성을 자동 설치합니다.
    • lua 실행중에 발생한 로그를 확인하여 그때그때 필요한 라이브러리를 apt 명령어를 사용하여 install 했습니다.
    • 에러 로그는 apisix 설치 페이지의 logs/error.log 참고하시면 됩니다.

3. etcd 버젼이 낮아 apisix 실행 불가한 상황 ( 3.4 이상 )

  • 원인 : apt의 etcd version 은 3.3 
  • 해결방법 : 3.4 이상 version의 etcd를 직접 다운받아서 설치 및 실행 진행

 

luarocks 란?

 

LuaRocks는 Lua 프로그래밍 언어용 패키지 관리자입니다. Python의 pip, Java의 Maven, JavaScript의 npm과 유사한 역할을 하며, Lua 모듈 배포를 위한 표준 형식을 제공하고, Rock 설치를 쉽게 관리할 수 있도록 설계된 도구 및 배포 서버를 제공합니다. 필요한 라이브러리를 공식사이트에서 검색하고 직접 install 할 수 있습니다. 

ex) apisix 검색

공식 사이트 : https://luarocks.org/modules/apisix/apisix

 

Apache APISIX - LuaRocks

Notice: Luarocks is not an official release or archive area. Please download source code from the official download page (http://apisix.apache.org/downloads/) and archive page(https://archive.apache.org/dist/incubator/apisix/) Versions 2.4-03 years ago1,38

luarocks.org


■ LuaRocks의 주요 기능:

  • Lua 모듈 설치 및 제거: LuaRocks를 사용하여 LuaRocks 저장소에서 제공되는 다양한 Lua 모듈을 쉽게 설치하고 제거할 수 있습니다.
  • 모듈 버전 관리: LuaRocks는 설치된 모듈의 버전을 관리하고, 원하는 버전의 모듈을 설치하도록 설정할 수 있습니다.
  • 모듈 의존성 관리: LuaRocks는 모듈 간의 의존성을 자동으로 해결하여 설치 프로세스를 간소화합니다.
  • 사용자 정의 모듈 배포: LuaRocks를 사용하여 개발한 Lua 모듈을 쉽게 배포하고 다른 사용자가 설치하도록 할 수 있습니다.

 

※ plugin 을 추가한 기본 config.yaml 파일

deployment:
  role: traditional
  role_traditional:
    config_provider: etcd
  admin:
    admin_key:
      - name: admin
        key: edd1c9f034335f136f87ad84b625c8f1  # using fixed API token has security risk, please update it when you deploy to production environment
        role: admin

plugins:                          # plugin list (sorted by priority)
  - real-ip                        # priority: 23000
  - ai                             # priority: 22900
  - client-control                 # priority: 22000
  - proxy-control                  # priority: 21990
  - request-id                     # priority: 12015
  - zipkin                         # priority: 12011
  #- skywalking                    # priority: 12010
  - opentelemetry                 # priority: 12009

 

더 편한 설치법을 아시는 분은 댓글로 공유 해주시면 참고 하겠습니다
감사합니다 :)