使用 Docker Compose 安装 APISIX
1.基本概念
APISIX 是 Apache 下的一款云原生的 API 网关,支持全生命周期的 API 管理,在应用中可以作为所有 API 调用的统一入口。
APISIX 有一些基础概念如下:
- Upstream,或者叫做上游,是一组目标主机的抽象,上游一组节点提供实际的业务服务,一般需要指定负载均衡策略去调用。
- Route,路由定义了一组规则,指定如何匹配用户的请求并执行对应的插件,最后将请求转发到上游。
- Service,服务是一组上游和插件(不包括认证)的抽象,可以给多个路由复用,同时配置的变更也可以应用到全部的路由,解耦的同时还可以保持灵活性,服务和路由的关系通常是 1:N。
- Plugin,插件可以通过消费者或路由实现功能的扩展,从而满足用户对流量管理、权限认证、安全性、可观察性、请求/响应转换等方面的特定要求。
- Consumer,消费者就是请求 APISIX 服务的用户,消费者都会绑定认证和授权的插件,从而对身份进行识别,并且消费者配置的插件具有最高的优先级,APISIX 可以为不同的消费者配置不同的规则,实现比较灵活的功能。
知道了上面的一些基础概念,然后我们就开始搭建 APISIX 服务网关吧。
2.部署方式
APISIX 有 3 种部署方式,分别如下:
- traditional 这个是经典默认的部署方式,将数据平面和控制平面一块启动,方便管理。
- decoupled 这种是将控制平面和数据平面分离的部署方式,中间通过 mTLS 进行通信,这种适合在比较大规模的集群环境中使用。
- 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的更多相关文章
- 手把手教你 Docker Compose安装DOClever
一.什么是Docker Compose以及Docker Compose的安装和使用 查看我的另外一篇博客:Docker Compose的安装和使用 二.DOClever是什么 DOClever是一个可 ...
- Docker Compose 安装 on centos7
本文演示如何在CentOS7上安装Docker Compose. 1 在线安装 1.1 下载安装包 $ curl -L https://github.com/docker/compose/releas ...
- Docker Compose安装以及入门
Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速在集群中部署分布式应用. Compose 简介 Compose 项目是 Docker 官方的开源 ...
- 使用 docker compose 安装 tidb
目标 : 单机上通过 Docker Compose 快速一键部署一套 TiDB 测试集群 前提条件: 1.centos版本在7.3 以上 2.安装git 3.安装docker Docker versi ...
- centos docker compose安装
docker compose离线安装 通过联网机器下载docker-compose离线安装包(参见Downloads部分) https://github.com/docker/compose/rele ...
- docker和docker compose安装使用、入门进阶案例
一.前言 现在可谓是容器化的时代,云原生的袭来,导致go的崛起,作为一名java开发,现在慌得一批.作为知识储备,小编也是一直学关于docker的东西,还有一些持续继承jenkins. 提到docke ...
- Docker Compose安装部署Jenkins
流水线可以让项目发布流程更加清晰,docker可以大大减少Jenkins配置. 1.前言 数据卷挂载到 /var 磁盘目录下,因为该磁盘空间较大,后面需要挂载容器数据卷,以防内存吃紧. 为了可以留存启 ...
- Docker Compose安装Registry后配置WebUI与客户端
场景 Docker 私服Registry简介与使用Docker-Compose安装Registry: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article ...
- docker compose安装gitea
docker-compose.yml version: "3.4" networks: gitea: external: false services: server: image ...
- Docker Compose 介绍安装
Compose介绍 Compose是一个定义和管理多容器的工具,也是一种容器编排工具,前身是Pig,使用Python语言编写.使用Compose配置文件描述多个容器应用的架构,biubiu使用什么镜像 ...
随机推荐
- Redis稳定性之战:AOF日志支撑数据持久化
★ Redis24篇集合 1 介绍 AOF(Append Only File)持久化:以独立日志的方式存储了 Redis 服务器的顺序指令序列,并只记录对内存进行修改的指令. 当Redis服务发生雪崩 ...
- 新增、修改校验逻辑使用-Validation-的group分组校验完成-2022新项目
一.业务场景 一般在项目开发中少不了新增.修改操作,这两个操作中传递的参数中也仅仅只有一个参数是不一致的,新增操作时没有ID, 修改时有ID,其校验逻辑也只有这一个ID校验的差别.最开始自己在写代码时 ...
- linux控制显示器的亮度
我使用的manjaro yay -S redshift -b 白天:晚上 要应用的屏幕亮度(在 0.1 和 1.0 之间) -c 文件 从指定的配置文件加载设置 -g R:G:B 要应用的其他伽马校正 ...
- a++和++a的运算区别是?
a++和++a 都属于自增运算符, 区别是对变量a的值进行自增的时机不同. a++是先进行取值,后进行自增.++a是先进行自增,后进行取值.
- 基于ADS1292芯片的解决方案之源码解析
接口解析 A 该芯片和主控使用的是SPI接口通信的. SPI接口一般有四根线,确保四根线准确连接是对的. B 该芯片可以有中断模式数据触发,所以,主控mcu需要有外部中断处理流程. //DRDY中断 ...
- UDP、IMCP、ARP协议通过netmap解析的实现。
上一篇文章我们讲了一个异步的线程池大概需要如何去实现,现在的话,我们如何来解析一个UDP的包. 环境的搭配 这个环境的问题困扰了很久,这个netmap已经不再更新了,支持Ubuntu16.04-Ubu ...
- Miracast技术详解(二):RTSP协议
目录 RTSP概述 抓包准备 WFD能力协商(Capability Negotiation) RTSP M1 Messages RTSP M2 Messages RTSP M3 Messages RT ...
- 原型&继承题目及内容解答
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1. 代码输出结果 function Person(name) { this.name = name } var p2 = new Per ...
- KingbaseES 对象重命名需要注意的事项
前言: Oracle 对视图或同义词依赖的底层对象表,如果被重命名,则视图或同义词失效.Oracle DBA 经常利用这个特点,对表进行重建,在重建过程中,无法通过视图或同义词访问,这就保证了数据的安 ...
- KingbaseES 语句like前匹配如何使用索引
前言 有现场同事反馈 sql语句 like 使用后缀通配符 % 不走索引. 至于执行计划没走索引的原因与KingbaseES数据库中的排序规则相关. 测试 测试环境: KingbaseESV8R6C7 ...