apisix~helm方式的部署到k8s
使用 helm 部署 apisix
相關閱讀:
- https://medium.com/@martin.hodges/installing-apisix-api-gateway-on-your-kubernetes-cluster-c6be6d844f36>
- https://github.com/apache/apisix/blob/master/docs/zh/latest/architecture-design/apisix.md
- https://dev.to/apisix/secure-spring-boot-rest-api-with-apache-apisix-api-gateway-1nmg
- https://apache.github.io/apisix-helm-chart
對接到APISIX上的項目,它們的域名通常需要是APISIX Gateway 的域名。APISIX 是一個開源的動態可編程的 API 網關,用于處理和管理 API 請求流量,通常會通過配置路由規則將請求轉發到后端服務。因此,為了使請求能夠正確地經過APISIX進行處理,前端項目或客戶端應該使用APISIX Gateway 的域名來訪問API服務。這樣可以確保請求能夠被正確地路由到后端服務,并獲得正確的響應。
apisix 介紹
Apache APISIX 是一個動態、實時、高性能的云原生 API 網關,提供了負載均衡、動態路由、灰度發布、服務熔斷、身份認證、可觀測性等豐富的流量管理功能。
官方地址:https://apisix.apache.org/zh/

什么是apisix
Apache APISIX 是一個高性能、輕量級的開源 API 網關,基于 Nginx 和 OpenResty 構建。APISIX 提供了豐富的功能和靈活的配置,適用于構建現代的微服務架構和云原生應用。
以下是 Apache APISIX 的一些主要特點和功能:
-
動態路由:APISIX 支持基于請求路徑、方法、頭部等條件進行動態路由,可以根據需求靈活配置路由規則。
-
負載均衡:內置多種負載均衡算法,支持權重、IP 黑白名單等策略,實現流量分發和控制。
-
熔斷與限流:提供熔斷器和限流功能,保護后端服務免受突發流量沖擊,確保系統穩定性。
-
插件系統:APISIX 提供豐富的插件系統,包括認證、日志、監控、緩存、轉發、重試等插件,方便擴展和定制功能。
-
動態 SSL/TLS:支持動態證書管理,實現自動化的 SSL/TLS 配置和更新,保障通信安全。
-
靈活配置:采用基于 Lua 的 DSL(Domain Specific Language)進行配置,具有靈活性和可擴展性,方便定制化需求。
-
可觀測性:提供豐富的監控指標和日志輸出,支持 Prometheus、Grafana 等監控工具,幫助實時監控和調優系統。
-
云原生支持:APISIX 可以無縫集成到 Kubernetes 等容器編排平臺中,支持自動伸縮、動態配置等特性。
總的來說,Apache APISIX 是一個功能強大、易于擴展的 API 網關,適用于構建高性能、可靠的微服務架構,并提供豐富的功能和靈活的配置選項來滿足不同場景下的需求。
apisix架構
APISIX 主要分為兩個部分:
APISIX 核心:包括 Lua 插件、多語言插件運行時(Plugin Runner)、Wasm 插件運行時等;
功能豐富的各種內置插件:包括可觀測性、安全、流量控制等。
APISIX 在其核心中,提供了路由匹配、負載均衡、服務發現、API 管理等重要功能,以及配置管理等基礎性模塊。除此之外,APISIX 插件運行時也包含其中,提供原生 Lua 插件的運行框架和多語言插件的運行框架,以及實驗性的 Wasm 插件運行時等。APISIX 多語言插件運行時提供多種開發語言的支持,比如 Golang、Java、Python、JS 等。
APISIX 目前也內置了各類插件,覆蓋了 API 網關的各種領域,如認證鑒權、安全、可觀測性、流量管理、多協議接入等。當前 APISIX 內置的插件使用原生 Lua 實現,關于各個插件的介紹與使用方式,可以查看相關插件文檔。

插件加載流程

插件內部結構

helm方式部署apisix
下載官方的包
helm repo add apisix https://charts.apiseven.com
helm pull apisix/apisix
# 可能版本有更新
tar zxvf apisix-2.7.0.tgz
配置dashboard后臺帳號
- values.yaml文件中dashboard節點
dashboard:
enabled: true
config:
authentication:
users:
- username: admin
password: admin123
配置apisix時區
- values.yaml文件中,修改
timezone的值,如設置時區為東八timezone: "Asia/Shanghai"
nginx擴展配置
- values.yaml文件中的apisix.nginx.configurationSnippet.httpStart節點
apisix:
nginx:
configurationSnippet:
httpStart: |
client_body_buffer_size 20m; # 設置用于讀取客戶端請求體(Request Body)的緩沖區為20M
large_client_header_buffers 4 512k; # 設置用于讀取大型客戶端請求頭(Request Headers)的緩沖區的數量和大小
client_header_buffer_size 512k; # 設置用于讀取常規客戶端請求頭的緩沖區大小
日志跟蹤opentelemetry配置
- values.yaml文件中的apisix.opentelemetry節點,配置otel-collector收集器地址
apisix:
opentelemetry:
enabled: true
resource:
service:
name: apisix-test # 應用名稱
collector:
address: otel-collector.apisix:4318 # OpenTelemetry Collector OTLP HTTP Receiver地址
request_timeout: 3
batch_span_processor: # 配置批量處理
drop_on_queue_full: false
max_queue_size: 6
batch_timeout: 2
inactive_timeout: 1
max_export_batch_size: 2
服務發現k8s和nacos配置
- values.yaml文件中的apisix.discovery節點,k8s支持多集群模式,可為每個集群起個別名
discovery:
enabled: true
registry:
nacos:
host:
- "http://mse-nacos.com:8848"
prefix: "/nacos/v1"
fetch_interval: 1
weight: 1
timeout:
connect: 80000 #可按著上游的超時時間進行配置
send: 10000
read: 10000
kubernetes:
- id: svt
service:
schema: https
host: 10.10.104.19
port: "6443" #這里有一個比較坑的地方,port 必須是字符串,否則會導致 APISIX 啟動報錯
client:
token: k8s-token
- id: pre
service:
schema: https
host: 10.10.85.93
port: "6443"
client:
token: k8s-token
etcd存儲配置
- values.override.yaml
- 功能:添加自定義的存儲類為etcd
service:
http:
nodePort: 30080
apisix-dashboard:
service:
type: NodePort
port: 80
nodePort: 30081
dashboard:
enabled: true
config:
authentication:
users:
- username: admin
password: admin
ingress-controller:
enabled: true
config:
log_level: debug
apisix:
adminAPIVersion: "v3"
serviceNamespace: apisix #這個是apisix所在的命令空間
etcd:
enable: true
persistence:
storageClass: nfs-provisioner #這個提前建立
nfs-provisioner實現自動創建pv請查看我的k8s~動態生成pvc和pv這篇文章
安裝apisix
# 安裝時,將使用自定義文件values.override.yaml
helm -n apisix install apisix -f ./apisix/values.override.yaml ./apisix
進入dashboard管理平臺

浙公網安備 33010602011771號