apisix~helm方式的部署到k8s

使用 helm 部署 apisix

相关阅读:

对接到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 的一些主要特点和功能:

  1. 动态路由:APISIX 支持基于请求路径、方法、头部等条件进行动态路由,可以根据需求灵活配置路由规则。

  2. 负载均衡:内置多种负载均衡算法,支持权重、IP 黑白名单等策略,实现流量分发和控制。

  3. 熔断与限流:提供熔断器和限流功能,保护后端服务免受突发流量冲击,确保系统稳定性。

  4. 插件系统:APISIX 提供丰富的插件系统,包括认证、日志、监控、缓存、转发、重试等插件,方便扩展和定制功能。

  5. 动态 SSL/TLS:支持动态证书管理,实现自动化的 SSL/TLS 配置和更新,保障通信安全。

  6. 灵活配置:采用基于 Lua 的 DSL(Domain Specific Language)进行配置,具有灵活性和可扩展性,方便定制化需求。

  7. 可观测性:提供丰富的监控指标和日志输出,支持 Prometheus、Grafana 等监控工具,帮助实时监控和调优系统。

  8. 云原生支持: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管理平台

posted @ 2024-05-10 08:57  张占岭  阅读(1177)  评论(0)    收藏  举报