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. css移动端开发

    ​ 移动端浏览器主要对webkit内核兼容,现在的移动端主要针对手机端开发,移动端碎片化比较严重,分辨率和屏幕尺寸不一 调试方法 谷歌浏览器模拟手机调试 搭建本地web服务器,手机和服务器在同一个局域 ...

  2. .Net Core中使用DiagnosticSource进行日志记录

    System.Diagnostics.DiagnosticSource 是一个可以对代码进行检测的模块,可以丰富地记录程序中地日志,包括可序列化的类型(例如 HttpResponseMessage 或 ...

  3. 让 js 失效 Chrome F12 右上角 settings - Preferences - Debugger - Disable JavaScript

    说的可能比较长,实际上,F12 右上角 - 右小角 还是挺好找的.

  4. Web Audio API 第1章 基础篇

    Web Audio API 第1章 基础篇 我查了一下 Web Audio API 蝙蝠书居然在 2013 年就出版了 我又看了一下我的"豆瓣读书"频道内,这本书加入到" ...

  5. Java 学习分享

    建议语言入门可以先看看视频,学习网站可以是github,极客时间,infoQ等,然后去看书深入研究学习.学习最有效的方式一定是自己动手写代码,而不是看别人的代码,自己下载Intelli Idea多敲敲 ...

  6. Linux 运维工程师面试真题-2-Linux 命令及文件操作

    Linux 运维工程师面试真题-2-Linux 命令及文件操作 1.在/tmp/目录下创建 test.txt 文件,内容为: Hello,World! ,用一个命令写出来. 2.给 test.txt ...

  7. 【个人笔记】VirtualBox7+Debian11基础环境搭建

    本文主要是对在最新的VirtualBox7上搭建Debian11的笔记记录,方便后续个人回顾,同时搭配对配置的浅析. sudoers配置 非root用户想要使用sudo命令,需要两个条件: 系统安装了 ...

  8. 三维模型OBJ格式轻量化的跨平台兼容性问题分析

    三维模型OBJ格式轻量化的跨平台兼容性问题分析 三维模型的OBJ格式轻量化在跨平台兼容性方面具有重要意义,可以确保模型在不同平台和设备上的正确加载和渲染.本文将分析OBJ格式轻量化的跨平台兼容性技术, ...

  9. FFmpeg开发笔记(四)FFmpeg的动态链接库介绍

    FFmpeg不仅提供了ffmpeg.ffplay和ffprobe三个可执行程序,还提供了八个工具库,使得开发者能够调用库里面的函数,从而实现更精准的定制化开发需求.这八个库的名字是avcodec.av ...

  10. vue2中安装vuex

    2022年2月7日,vue3成为默认版本,npm i vue安装的直接就是vue3了 npm i -vuex 安装的是vuex4 vuex4只能在vue3中使用 vue2中,要用vuex3版本,安装 ...