Instalación y configuración del Api Gateway Apache Apisix 3.2 LTS y ETCD 3.5.4

APISIX es una puerta de enlace de API que ayuda a gestionar microservicios, ofreciendo un rendimiento, seguridad y plataforma escalable para todas tus API y microservicios.

Con su arquitectura basada en plugins, APISIX permite la personalización y ampliación de la plataforma para satisfacer las necesidades específicas de los desarrolladores y empresas. Además, APISIX es capaz de manejar grandes cargas de tráfico, lo que lo convierte en una herramienta esencial para empresas que manejan una gran cantidad de tráfico de API.

APISIX también ofrece una amplia variedad de características para la creación, administración y escalado de API, como enrutamiento de API, límite de velocidad, equilibrio de carga, autenticación, autorización y más. La plataforma es altamente personalizable y escalable, lo que permite a las empresas adaptarse y crecer con facilidad.

Requisitos de hardware y software

Apache APISIX es una plataforma de gestión de API altamente eficiente que puede funcionar sin problemas para miles de peticiones con solo 1 vCore, 2 GB de RAM y 20 GB de disco. Debido a que actúa principalmente como un enrutador, el consumo de recursos es mínimo.

En este artículo, abordaremos la instalación y configuración de APISIX en un solo servidor con las siguientes especificaciones:

  • Sistema Operativo: Debian 11
  • CPU: 1Vcore
  • RAM: 2GB
  • Disco: 10GB
  • Apache Apisix 3.2 LTS
  • ETCD 3.5.4

*Para entornos de producción, se recomienda realizar la instalación de Apache APISIX en un clúster de al menos tres nodos. De esta manera, es posible configurar ETCD en cluster y un equilibrador de carga de Google, AWS o Cloudflare para distribuir la carga de trabajo entre los nodos del clúster.

Esto no solo aumentará la disponibilidad de la plataforma, sino que también mejorará su escalabilidad y fiabilidad en caso de picos de tráfico inesperados. Además, con un equilibrador de carga configurado adecuadamente, se puede garantizar una distribución uniforme de la carga de trabajo en todo el clúster, lo que garantiza un rendimiento óptimo en todo momento.

Instalación requisitos previos

Para comenzar con la instalación, es necesario instalar las dependencias previas. En este sentido, se procederá a instalar ETCD utilizando los siguientes comandos:

Actualizamos el sistema operativo:

# apt update & apt upgrade -y

Instalamos git, vim, wget, curl, gnupg y gnupg2 que necesitaremos para la instalación de ETCD:

# apt install git vim wget curl gnupg gnupg2 -y

Generamos tres variables de entorno para indicar la versión y de donde descargamos ETCD:

# ETCD_VER=v3.5.4
# GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
# DOWNLOAD_URL=${GITHUB_URL}

Descargamos ETCD:

# curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
# cd /tmp

Descomprimimos ETCD del tar.gz descargado:

# tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1

Eliminamos la descarga

rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz

Accedemos al directorio descomprimido y movemos los binarios:
# cd /tmp/etcd-download-test
# mv etcd etcdctl etcdutl /usr/local/bin

Comprobamos las versiones:

root@debian:/tmp/etcd-download-test# etcd --version
etcd Version: 3.5.4
Git SHA: 08407ff76
Go Version: go1.16.15
Go OS/Arch: linux/amd64

root@debian:/tmp/etcd-download-test# etcdctl version
etcdctl version: 3.5.4
API version: 3.5

root@debian:/tmp/etcd-download-test# etcdutl version
etcdutl version: 3.5.4
API version: 3.5

Creamos los directorios para los ficheros de configuración y el almacenamiento de los datos:

# mkdir -p /var/lib/etcd/
# mkdir /etc/etcd

Creamos un usuario y grupo para ETCD sin acceso por shell

# /usr/sbin/groupadd --system etcd
# /usr/sbin/useradd -s /sbin/nologin --system -g etcd etcd

Asignamos permisos:

# chown -R etcd:etcd /var/lib/etcd/

Configuramos Systemd para el arranque automático al iniciar el servidor:

# vim /etc/systemd/system/etcd.service

[Unit]
Description=etcd key-value store
Documentation=https://github.com/etcd-io/etcd
After=network.target

[Service]
User=etcd
Type=notify
Environment=ETCD_DATA_DIR=/var/lib/etcd
Environment=ETCD_NAME=%m
ExecStart=/usr/local/bin/etcd
Restart=always
RestartSec=10s
LimitNOFILE=40000

[Install]
WantedBy=multi-user.target

# systemctl daemon-reload
# systemctl start etcd.service
# systemctl enable etcd.service
# systemctl status etcd.service

Comprobamos que ETCD se haya ejecutado correctamente:

# ss -tunelp | grep 2379

# etcdctl endpoint health

Una vez completados estos simples pasos, se habrá instalado ETCD y se podrá continuar con la instalación de APISIX.

Instalación Apache Apisix

Para simplificar el proceso de instalación y garantizar una gestión y actualización eficiente de APISIX, se recomienda utilizar los repositorios disponibles. A continuación, se detallan los pasos necesarios para agregar el repositorio correspondiente:

# echo "deb http://openresty.org/package/debian bullseye openresty" | tee /etc/apt/sources.list.d/openresty.list

# wget -O - http://repos.apiseven.com/pubkey.gpg | apt-key add -
# echo "deb http://repos.apiseven.com/packages/debian bullseye main" | tee /etc/apt/sources.list.d/apisix.list
# apt update

Si openrestry diera error al instalar la pubkey la solución sería:
# curl -O https://openresty.org/package/pubkey.gpg
# apt-key add pubkey.gpg

Con esto ya podríamos hacer el update.

# apt install -y apisix=3.2.0-0

Inicializamos Apisix

# ulimit -n 2048

# apisix init

# apisix start

Recomendaciones primeras configariones

  • El archivo de configuración de apisix se encuentra en /usr/local/apisix/config-default.yaml el cual debemos copiar a /usr/local/apisix/config.yaml.
  • Comentar la escucha para el puerto 9080 y dejar únicamente el puerto 9443
  • Si el acceso al api gateway se realiza desde cualquier punto, editar el puerto 9443 al 443, ya que muchos proveedores de internet tienen el puerto 9443 bloqueado.
  • Generar una nueva admin key, ya que sería inseguro mantener la que viene por defecto:

Después de configurar apisix ya podemos ejecutar apisix:

# systemctl enable apisix
# systemctl start apisix
# systemctl status apisix

Excelente, ahora que hemos seguido los pasos previos, se habrá completado la instalación de APISIX en el sistema. Sin embargo, es importante mencionar que se pueden realizar ciertas configuraciones adicionales para asegurar un correcto y mejora en el funcionamiento de la herramienta.

Por ejemplo, se puede configurar APISIX para trabajar con un balanceador de carga o un sistema de cacheo, entre otras opciones. Asimismo, se puede personalizar el acceso y la seguridad de APISIX mediante la creación de claves de API, la implementación de autenticación y autorización, entre otras funcionalidades.

Por lo tanto, una vez completada la instalación, se recomienda revisar y ajustar las configuraciones correspondientes para garantizar una correcta implementación y utilización de APISIX en su proyecto.