在上一章节介绍中,我们已经大致了解了 Apache APISIX 的基本架构与安装。本次,我们将深入解读其配置和介绍如何使用Admin API 进行路由管理。
01、配置详解
我们就拿上一章节的APISIX ConfigMap配置来进行解读,APISIX的配置名为config.yaml 文件,通常位于 /usr/local/apisix/conf/config.yaml,关键配置如下:
- 基本监听和模式设置
apisix: # 通用配置
node_listen: # APISIX 监听端口,默认端口是9080
- 9080
enable_heartbeat: true # 启用心跳检查
enable_admin: true # 启用管理 API
enable_admin_cors: true # 允许跨域资源共享(CORS)请求管理 API
enable_debug: false # 禁用调试模式
enable_dev_mode: false # 如果设置为 true,则将 nginx worker_processes 设置为 1
enable_reuseport: true # 如果设置为 true,则启用 nginx 的 SO_REUSEPORT 开关
enable_ipv6: true # 启用 nginx IPv6 解析支持
enable_http2: true # 启用 HTTP/2
enable_server_tokens: true # 是否在 Server 响应头中显示 APISIX 版本号
- 代理和路由设置
proxy_cache: # 代理缓存配置
cache_ttl: 10s # 如果上游未指定缓存时间,则默认的缓存时间
zones: # 缓存区域的参数
- name: disk_cache_one # 缓存的名称,管理员可以通过名称在管理 API 中指定使用哪个缓存
memory_size: 50m # 共享内存的大小,用于存储缓存索引
disk_size: 1G # 磁盘的大小,用于存储缓存数据
disk_path: "/tmp/disk_cache_one" # 存储缓存数据的路径
cache_levels: "1:2" # 缓存的层级结构
router: # 路由配置
http: radixtree_host_uri # 使用基于基数树的算法,通过 host 和 uri 组合来匹配路由
ssl: 'radixtree_sni' # 使用基于基数树的算法,通过 SNI (Server Name Indication) 来匹配 SSL/TLS 请求的路由
proxy_mode: http # 代理模式,设置为http
stream_proxy: # TCP/UDP 代理
tcp: # TCP 代理端口列表
- 9100
udp: # UDP 代理端口列表
- 9200
- SSL 配置,建议是要开启HTTPS的,可以在dashboard上面进行配置
ssl:
enable: false # 是否启用 SSL 功能
listen:
- port: 9443 # SSL 监听端口
enable_http3: false # 是否启用 HTTP/3
ssl_protocols: "TLSv1.2 TLSv1.3" # 启用的 SSL 协议版本
ssl_ciphers: "..." # 支持的加密套件列表
- Nginx特定配置,前面我们也讲到APISIX是基于Nginx引擎进行开发的,在很多云原生的网关中,我们都可以发现Nginx的身影,哈哈。
nginx_config:
error_log: "/dev/stderr" # 错误日志输出位置
error_log_level: "warn" # 错误日志级别
worker_processes: "auto" # 工作进程数量
enable_cpu_affinity: true # 启用 CPU 亲和性
worker_rlimit_nofile: 20480 # 单个工作进程的最大文件描述符数量
event:
worker_connections: 10620 # 单个工作进程的最大客户端连接数
http:
enable_access_log: true # 启用访问日志
access_log: "/dev/stdout" # 访问日志输出位置
access_log_format: '...' # 访问日志格式
access_log_format_escape: default # 访问日志转义设置
keepalive_timeout: "60s" # 保持连接的最大空闲时间
client_header_timeout: 60s # 客户端请求头读取超时
client_body_timeout: 60s # 客户端请求体读取超时
send_timeout: 10s # 响应发送超时
underscores_in_headers: "on" # 允许请求头使用下划线
real_ip_header: "X-Real-IP" # 用于获取客户端真实 IP 的请求头
real_ip_from: # 可信任的 IP 来源列表
- 127.0.0.1
- 'unix:'
- 部署和管理
deployment:
role: traditional # 定义部署角色为传统模式,通常意味着直接与配置存储(如etcd)连接。
role_traditional:
config_provider: etcd # 指定配置数据的提供者,这里使用etcd作为配置中心。
admin:
allow_admin:
- 127.0.0.1/24 # 允许来自本地网络的访问Admin API。
- 0.0.0.0/0 # 允许来自任何IP的访问,建议在生产环境中限制此设置以提高安全性。
admin_listen:
ip: 0.0.0.0 # Admin API监听的IP地址,0.0.0.0表示监听所有IP地址。
port: 9180 # Admin API监听的端口。
admin_key:
- name: "admin"
key: edd1c9f034335f136f87ad84b625c8f1 # 管理员密钥,应在生产环境中更改以保障安全。
role: admin # 管理员角色,具有完全的管理权限。
- name: "viewer"
key: 4054f7cf07e344346cd3f287985e76a2 # 查看者密钥,应在生产环境中更改以保障安全。
role: viewer # 查看者角色,只能查看配置数据。
etcd:
host:
- "http://apisix-etcd.apisix.svc.cluster.local:2379" # etcd服务的地址,支持配置多个地址以实现高可用。
prefix: "/apisix" # etcd中用于存储APISIX配置数据的前缀。
timeout: 30 # 与etcd通信的超时时间,单位为秒。
02、Admin API 管理路由
APISIX Admin API 是一个用于管理 APISIX 网关配置的 API 接口。通过 Admin API,我们可以动态地添加、修改或删除路由、服务、消费者等配置,无需重启服务。这使得 APISIX 非常适合在动态环境中使用,如持续部署和微服务架构。
添加路由
要通过 Admin API 添加路由,可以发送一个 POST 请求到 /apisix/admin/routes。以下是一个示例请求,它定义了一个路由,该路由将所有到 /hello 的请求转发到指定的上游服务。
代码语言:javascript复制POST /apisix/admin/routes HTTP/1.1
Host: <Admin_API_Host>:9180
Content-Type: application/json
X-API-KEY: <Your_Admin_API_Key>
{
"uri": "/hello",
"methods": ["GET", "POST"], # 允许通过GET和POST方法访问
"upstream": {
"type": "roundrobin", # 使用轮询负载均衡
"nodes": {
"192.168.1.101:80": 1 # 上游服务器地址及其权重
}
}
}
修改路由
修改路由的操作类似,但需要知道要修改的路由ID。首先,可以通过 GET 请求列出所有路由以找到特定路由的ID。之后,使用 PUT 请求对指定ID的路由进行修改。
代码语言:javascript复制PUT /apisix/admin/routes/<route_id> HTTP/1.1
Host: <Admin_API_Host>:9180
Content-Type: application/json
X-API-KEY: <Your_Admin_API_Key>
{
"uri": "/hello",
"methods": ["GET"], # 修改为只允许GET方法
"upstream": {
"type": "roundrobin",
"nodes": {
"192.168.1.100:80": 2,
"192.168.1.101:80": 8 # 添加新的上游节点
}
}
}
注释
- X-API-KEY: 这是用于验证请求的密钥。在生产环境中,应确保这个密钥是保密的,并且定期更换以增强安全性。
- uri: 指定路由的 URI 模式。所有匹配此模式的请求都将被路由到指定的上游。
- methods: 定义允许哪些 HTTP 方法通过此路由。这是一个可选字段,如果未设置,默认允许所有方法。
- upstream: 定义路由的上游服务信息,包括负载均衡策略和上游节点。
- nodes: 在 upstream 下的 nodes 字段定义了上游服务器的地址及其权重。权重决定了各个节点处理请求的比例。
03、总 结
好的,这章我们了解了APISIX的配置和路由管理,下一章节我们将通过实际案例对APISIX进行更加深入的探索,敬请期待~