在这个容器化技术盛行的时代,大家都习惯采用 Docker 或者 K8S 来运行 APISIX。APISIX 的配置参数非常多,因此很多介绍文章都采用挂载文件或者 K8S Configmap 的方式来配置 APISIX。最开始我们就采用 Configmap 的方式在腾讯云 TKE 上部署 APISIX,当网络区域越开越多时,每个 TKE 集群都需要去定义一套 config.yaml 对应的 Configmap,管理非常繁琐。因此,这里我们利用 Python 的 Jinja2 插件来自动化渲染 APISIX 的配置文件,整体非常方便!

一、Jinja2 模板
熟悉 Jinja2 的同学都很清楚,要通过 Jinja2 生成所需文件,需要先定制一个渲染模板,Jinja2 的原理就是将动态的内容填充到模板中,最终渲染成所需文件。因此,这里参考 APISIX 官方最新 2.10.0 版本config-default.yaml配置文件制作了 Jinja2 的配置模板如下:
apisix:
node_listen:
- ip: {
{ http_listen_ip | default("0.0.0.0") }}
port: {
{ http_listen_port | default(9080) | int }}
enable_http2: {
{ http_enable_http2 | default("false") }}
{% if multi_http_ports: -%}
# supports more listen ports
{% for port in multi_http_ports | regex_split -%}
{% if port: -%}
- {
{port}}
{% endif -%}
{% endfor -%}
{% endif %}
enable_admin: {
{ enable_admin | default("true") }}
enable_admin_cors: {
{ enable_admin_cors | default("true") }}
enable_dev_mode: {
{ enable_dev_mode | default("false") }}
enable_reuseport: {
{ enable_reuseport | default("true") }}
enable_ipv6: {
{ enable_ipv6 | default("false") }}
config_center: {
{ config_center | default("etcd") }}
enable_server_tokens: {
{ enable_server_tokens | default("true") }}
extra_lua_path: {
{ extra_lua_path | default("") }}
extra_lua_cpath: {
{ extra_lua_cpath | default("") }}
proxy_cache:
cache_ttl: {
{ cache_ttl | default("3600s") }}
zones:
- name: {
{ proxy_cache_zones | default("disk_cache_one") }}
memory_size: {
{ proxy_cache_memory_size | default("50m") }}
disk_size: {
{ proxy_cache_disk_size | default("1G") }}
disk_path: {
{ proxy_cache_disk_path | default("/tmp/disk_cache_one") }}
cache_levels: {
{ proxy_cache_cache_levels | default("1:2") }}
allow_admin:
{% if allow_admin_subnet: -%}
{%- for item in allow_admin_subnet | regex_split -%}
{% if item: -%}
- {
{item}}
{% endif -%}
{% endfor %}
{%- endif -%}
admin_key:
-
name: {
{ admin_key_name | default("admin") }}
key: {
{ admin_key_secret | default("d208uj44fnd2yk6quczd6szkytvoi0x1") }}
role: admin
-
name: {
{ viewer_key_name | default("viewer") }}
key: {
{ viewer_key_secret | default("4054f7cf07e344346cd3f287985e76a2") }}
role: viewer
delete_uri_tail_slash: {
{ delete_uri_tail_slash | default("false") }}
global_rule_skip_internal_api: {
{ global_rule_skip_internal_api | default("true") }}
router:
http: {
{ router_http | default("radixtree_uri") }}
ssl: {
{ router_ssl | default("radixtree_sni") }}
resolver_timeout: {
{ resolver_timeout | default(3) | int }}
enable_resolv_search_opt: {
{ enable_resolv_search_opt | default("true") }}
ssl:
enable: {
{ ssl_enable | default("true") }}
enable_http2: {
{ ssl_enable_http2 | default("true") }}
listen:
- ip: {
{ https_lis

793

被折叠的 条评论
为什么被折叠?



