1.基本概念

APISIX 是 Apache 下的一款云原生的 API 网关,支持全生命周期的 API 管理,在应用中可以作为所有 API 调用的统一入口。

APISIX 有一些基础概念如下:

  1. Upstream,或者叫做上游,是一组目标主机的抽象,上游一组节点提供实际的业务服务,一般需要指定负载均衡策略去调用。
  2. Route,路由定义了一组规则,指定如何匹配用户的请求并执行对应的插件,最后将请求转发到上游。
  3. Service,服务是一组上游和插件(不包括认证)的抽象,可以给多个路由复用,同时配置的变更也可以应用到全部的路由,解耦的同时还可以保持灵活性,服务和路由的关系通常是 1:N。
  4. Plugin,插件可以通过消费者或路由实现功能的扩展,从而满足用户对流量管理、权限认证、安全性、可观察性、请求/响应转换等方面的特定要求。
  5. Consumer,消费者就是请求 APISIX 服务的用户,消费者都会绑定认证和授权的插件,从而对身份进行识别,并且消费者配置的插件具有最高的优先级,APISIX 可以为不同的消费者配置不同的规则,实现比较灵活的功能。

知道了上面的一些基础概念,然后我们就开始搭建 APISIX 服务网关吧。

2.部署方式

APISIX 有 3 种部署方式,分别如下:

  1. traditional 这个是经典默认的部署方式,将数据平面和控制平面一块启动,方便管理。
  2. decoupled 这种是将控制平面和数据平面分离的部署方式,中间通过 mTLS 进行通信,这种适合在比较大规模的集群环境中使用。
  3. standalone 这种仅部署数据平面并且配置都从本地加载,这种部署方式常用在 Kubernetes 容器环境中,因为每次全量的配置都由 k8s 的配置中心生成并运行。

一般规模下比较常用的部署方式就是 traditional,无论是 traditional 还是 decoupled 都需要依赖外部的 etcd 保存配置,官网给出的 Docker 部署示例是将 etcd 集成到一个 compose 中,但是这样会失去 etcd 的高可用性,只适合测试环境,所以我们采用外部专用的 etcd 集群。

关于部署方式可以参考文档:https://apisix.apache.org/docs/apisix/3.2/deployment-modes/

具体 etcd 的部署就不再详细写了,可以参考之前 etcd 集群的部署文档,这里假设已经存在了 etcd 集群,当前我们采用 Docker Compose 的方式来部署 APISIX 和 Dashboard。

3.安装 APISIX 和 Dashboard

本地安装的 APISIX 版本是 3.2.2,也是目前的长期支持版。

首先,我们创建一个 Docker Compose 项目目录用于存放配置文件:

mkdir apisix-3.2.2
cd apisix-3.2.2

然后我们将 APISIX 和 Dashboard 的配置放到 conf 子目录下:

mkdir conf

首先创建 APISIX 的配置文件:conf/config.yaml,内容如下:

apisix:
node_listen:
- port: 9088
enable_ipv6: true
enable_control: true
control:
ip: "[::]"
port: 9090
deployment:
role: traditional
role_traditional:
config_provider: etcd
admin:
admin_listen:
port: 9180
allow_admin:
- 0.0.0.0/0
admin_key:
- name: "admin"
key: b848941cd4e1003f2f961a7786ecf75f
role: admin
- name: "viewer"
key: dd3bc5bde63f272f554b91336bfcfcb3
role: viewer
etcd:
host:
- http://10.23.0.21:2379
- http://10.23.0.22:2379
- http://10.23.0.23:2379
user: apisix
password: apisix
prefix: /apisix
timeout: 30
#plugin_attr:
# prometheus:
# export_addr:
# ip: "0.0.0.0"
# port: 9091
#END

上面配置的内容简要解释一下:

apisix.node_listen:设置 APISIX 的用户访问端口,默认是 9080,这里冲突所以进行了修改

apisix.control:配置控制 API 所监听的地址和端口,地址默认监听所有 IPv4 和 IPv6 的网卡,端口这里是 9090

deployment.role:配置了部署方式为 traditional,同时指定了配置中心是 etcd

deployment.admin:这个部分配置了 admin API 所监听的端口,以及访问 admin API 所需的 KEY。具体 KEY 可以按照下面的命令生成:

openssl rand -hex 16

deployment.etcd:配置 APISIX 所需要的 etcd 服务列表,建议分配专门的用户,不要用 root 用户,同时授权给 prefix 配置的路径,默认是 /apisix。

然后下面还有提供 prometheus 监控服务的配置,这里注释掉了,当然默认也会开启端口,如果需要修改可以调整这里的配置。

对于 APISIX 的默认配置可以参考:https://github.com/apache/apisix/blob/master/conf/config-default.yaml

上面配置保存后,我们继续创建 APISIX Dashboard 所需的配置文件:conf/dashboard.yaml,内容如下:

conf:
listen:
host: "::"
port: 9188
allow_list:
- 0.0.0.0/0
etcd:
endpoints:
- "http://10.23.0.21:2379"
- "http://10.23.0.22:2379"
- "http://10.23.0.23:2379"
username: "apisix"
password: "apisix"
mtls:
key_file: "" # Path of your self-signed client side key
cert_file: "" # Path of your self-signed client side cert
ca_file: "" # Path of your self-signed ca cert, the CA is used to sign callers' certificates
prefix: /apisix # apisix config's prefix in etcd, /apisix by default log:
error_log:
level: warn # supports levels, lower to higher: debug, info, warn, error, panic, fatal
file_path:
/dev/stderr # supports relative path, absolute path, standard output
# such as: logs/error.log, /tmp/logs/error.log, /dev/stdout, /dev/stderr
access_log:
file_path:
/dev/stdout
security:
content_security_policy: "default-src 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; frame-src *" authentication:
secret:
e400104c00efdced86a809a76b4ce56f
expire_time: 3600
users:
- username: admin # username and password for login `manager api`
password: admin
- username: apisix
password: apisix plugins:
# 比较多,参考配置文件:https://github.com/apache/apisix-docker/blob/master/example/dashboard_conf/conf.yaml 进行填写
- api-breaker
- authz-keycloak
- basic-auth
- batch-requests
- consumer-restriction
- cors
# ...

这个配置也比较好理解,需要注意的是 Dashboard 是通过 etcd 对 APISIX 间接管理的,因此不需要直接配置 APISIX 的地址,同样上面是端口和 etcd 相关的配置,然后日志部分的配置改成了标准错误和标准输出,如果有需要可以改成具体的路径然后通过卷映射到容器内部。

下面 authentication 部分的 secret 是 JWT 认证的密钥,同样按照上面的方法生成一下,下面 users 是页面的登录用户,这里初始化了两个用户。

最后 plugins 是支持的插件,这个比较多,所以这里就列了几个,其余的参考官方给出了样例来填写即可,链接是:https://github.com/apache/apisix-docker/blob/master/example/dashboard_conf/conf.yaml

配置无误保存后,我们创建 docker-compose.yml 配置文件:

version: "3"

services:

  apisix:
image: apache/apisix:3.2.2-debian
restart: always
environment:
- TZ=Asia/Shanghai
volumes:
- ./conf/config.yaml:/usr/local/apisix/conf/config.yaml:ro
ports:
- "9088:9088/tcp"
- "9180:9180/tcp"
- "127.0.0.1:9090:9090/tcp" apisix-dashboard:
image: apache/apisix-dashboard:3.0.1-alpine
restart: always
environment:
- TZ=Asia/Shanghai
volumes:
- ./conf/dashboard.yaml:/usr/local/apisix-dashboard/conf/conf.yaml
ports:
- "9188:9188"

配置比较简单,主要就是映射了一下配置文件,然后开放了主要的端口,注意在容器内监听的端口要比开放出来的多,比如 HTTPS 9443、Prometheus 的 9091 都没有开放出来,需要的之后再开启即可。

另外为了保证安全 control API 监听的地址修改为 127.0.0.1,防止外部访问。

最后我们启动 APISIX 和 Dashboard:

docker compose up -d
# 查看日志是否正常
docker compose logs

启动后我们访问测试下:

curl -sI http://localhost:9088 | grep Server

可以看到返回的具体版本,然后就可以访问 Dashboard 进行管理了。

使用 Docker Compose 安装 APISIX的更多相关文章

  1. 手把手教你 Docker Compose安装DOClever

    一.什么是Docker Compose以及Docker Compose的安装和使用 查看我的另外一篇博客:Docker Compose的安装和使用 二.DOClever是什么 DOClever是一个可 ...

  2. Docker Compose 安装 on centos7

    本文演示如何在CentOS7上安装Docker Compose. 1 在线安装 1.1 下载安装包 $ curl -L https://github.com/docker/compose/releas ...

  3. Docker Compose安装以及入门

    Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速在集群中部署分布式应用. Compose 简介 Compose 项目是 Docker 官方的开源 ...

  4. 使用 docker compose 安装 tidb

    目标 : 单机上通过 Docker Compose 快速一键部署一套 TiDB 测试集群 前提条件: 1.centos版本在7.3 以上 2.安装git 3.安装docker Docker versi ...

  5. centos docker compose安装

    docker compose离线安装 通过联网机器下载docker-compose离线安装包(参见Downloads部分) https://github.com/docker/compose/rele ...

  6. docker和docker compose安装使用、入门进阶案例

    一.前言 现在可谓是容器化的时代,云原生的袭来,导致go的崛起,作为一名java开发,现在慌得一批.作为知识储备,小编也是一直学关于docker的东西,还有一些持续继承jenkins. 提到docke ...

  7. Docker Compose安装部署Jenkins

    流水线可以让项目发布流程更加清晰,docker可以大大减少Jenkins配置. 1.前言 数据卷挂载到 /var 磁盘目录下,因为该磁盘空间较大,后面需要挂载容器数据卷,以防内存吃紧. 为了可以留存启 ...

  8. Docker Compose安装Registry后配置WebUI与客户端

    场景 Docker 私服Registry简介与使用Docker-Compose安装Registry: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article ...

  9. docker compose安装gitea

    docker-compose.yml version: "3.4" networks: gitea: external: false services: server: image ...

  10. Docker Compose 介绍安装

    Compose介绍 Compose是一个定义和管理多容器的工具,也是一种容器编排工具,前身是Pig,使用Python语言编写.使用Compose配置文件描述多个容器应用的架构,biubiu使用什么镜像 ...

随机推荐

  1. confluence 破解系列

    confluence 破解系列 目录 confluence 破解系列 前言 confluence 一. 安装数据库mysql 二 docker启动confluence 前言 confluence Co ...

  2. [非常重要] 通过ssh的方式提交github

    通过ssh的方式提交github - 重要文章!!vscode提交github 原因: github的https的clone项目报错,所以改用ssh的方式 1 本地创建ssh秘钥 目录是 .ssh 我 ...

  3. 没有 Release 文件的解决方法

    https://blog.csdn.net/weixin_44903509/article/details/108825738 sudo apt-get update 出现问题 E: 仓库 " ...

  4. 【预训练语言模型】使用Transformers库进行GPT2预训练

    基于 HuggingFace的Transformer库,在Colab或Kaggle进行预训练. 本教程提供:英文数据集wikitext-2和代码数据集的预训练. 注:可以自行上传数据集进行训练 目的: ...

  5. stm32芯片的SPI接口调试总结之轮询模式

    一 概念 1 组成 SPI系统可直接与各个厂家生产的多种标准外围器件接口,它只需4条线:串行时钟线(SCK).主机输入/从机输出数据线(MISO).主机输出/从机输入数据线(MOSI)和低电平有效的从 ...

  6. Atom安装插件的几种方式

    界面安装 打开Atom->File->Settings->Install 输入你想要安装的插件名/Theme名 命令行安装 打开cmd命令行程序 切换到.atom/package目录 ...

  7. 已安装docker-compose,安装harbor时还是提示docker-compose未安装或者Permission denied的解决方案

    安装Harbor时,下载安装了docker-compose并赋予权限 sudo curl -L "https://github.com/docker/compose/releases/dow ...

  8. socket本地通信服务端

    #include <stdio.h> #include <sys/socket.h> #include <arpa/inet.h> #include <str ...

  9. vim的使用进步

    vim的使用进步 1.如果遇到命令行中无法退出的 狂按esc按键 或者也可以使用v模式下切换一下,之后按esc 保存退出 保存退出--:wq 保存:w 不保存退出:q! i--插入模式 v- 可视化模 ...

  10. codeforce Round 934 div2 个人题解(A~C)

    A. Destroying Bridges 时间限制: 1秒 内存限制: 256兆 输入: 标准输入 输出: 标准输出 有 $n$ 个岛屿,编号为 $1,2,-,n$.最初,每对岛屿都由一座桥连接.因 ...