前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Apache APISIX最佳实践(三):Nacos服务发现,探索实际应用场景

Apache APISIX最佳实践(三):Nacos服务发现,探索实际应用场景

作者头像
SRE运维手记
发布2024-08-30 17:02:06
3410
发布2024-08-30 17:02:06
举报
文章被收录于专栏:SRE运维手记

在微服务架构下,为了实现服务的注册与发现,我们通常会引入注册中心组件。APISIX 提供了从注册中心获取服务实例的功能,可以实现高效的服务发现和动态负载均衡,从而提高系统的灵活性和可靠性。目前,APISIX支持的服务发现机制包括Consul、Nacos、Eureka、Etcd等。

01、背 景

在 Java 技术栈的微服务架构中,不少企业会选择 Nacos 作为服务发现和配置中心,Spring Cloud Gateway 作为微服务 API 网关。然而,随着企业对 API 网关性能和灵活性的要求不断提高,越来越多的企业开始关注 Apache APISIX 作为替代方案。本文将介绍如何在 Java 技术栈中使用 Apache APISIX 替代 Spring Cloud Gateway 作为微服务 API 网关。

02、方 案

APISIX + Nacos 可以将各个微服务节点中与业务无关的各项控制,集中在APISIX 中进行统一管理,即通过APISIX 实现接口服务的代理和路由转发的能力。各个微服务在 Nacos 上注册后,APISIX 可以通过 Nacos 的服务发现功能获取服务列表,查找对应的服务地址从而实现动态代理。

目的

替换Spring Cloud Gateway,然后在APISIX做路由,最终能够通过 /api/<服务名> 访问到Nacos注册的微服务

准备条件

Kubernetes(APISIX和Nacos都是在k8s环境搭建)

APISIX

APISIX-Ingress

04、实践环节

1、修改APISIX配置config.yaml,在顶级配置增加如下内容,用于发现注册到Nacos的微服务,修改后需要滚动重启APISIX的Pods

代码语言:javascript
复制
discovery:
  nacos:
    host:
      - "http://nacos.test:8848"  # Nacos的服务地址
    prefix: "/nacos/v1/"
    fetch_interval: 30   # 可选项, 获取服务实例列表的时间间隔, 默认是30s
    weight: 100          # 可选项, 获取到的服务实例的默认权重值, 默认是100

2、创建Route和Upstream,我们这里用Admin API实现,当然也可以在dashboard上直接创建,有兴趣的可以在创建后登录dashboard看下具体的配置,后面也可以通过白屏化进行配置

代码语言:javascript
复制
curl http://<apisix-admin>:9180/apisix/admin/routes \
  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' \
  -X POST -i -d '
{
  "uri": "/api/*", # 路由规则
  "host": "test.example.com",
  "name": "my-test-route",
  "upstream": {
    "service_name": "my-service", # 微服务名称
    "type": "roundrobin",
    "discovery_type": "nacos",
    "discovery_args": {
      "namespace_id": "public"  # 微服务所在的Nacos命名空间
    }
  }
}'

创建成功后返回内容,状态码201,状态为Created,id则为Route规则的id,是唯一的

代码语言:javascript
复制
HTTP/1.1 201 Created
Date: Sat, 4 May 2024 8:11:25 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
Server: APISIX/3.9.1
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: *
Access-Control-Max-Age: 3600
X-API-VERSION: v3
{"key":"/apisix/routes/00000000000000000483","value":{"host":"test.example.com","update_time":1714784004,"upstream":{"type":"roundrobin","service_name":"my-service","scheme":"http","hash_on":"vars","discovery_type":"nacos","pass_host":"pass","discovery_args":{"namespace_id":"public"}},"priority":0,"status":1,"create_time":1714784004,"name":"my-test-route","uri":"/api/*","id":"00000000000000000483"}}

3、我们可以通过Route规则的id查询路由具体信息

代码语言:javascript
复制
curl http://<apisix-admin>:9180/apisix/admin/routes/00000000000000000483  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'

返回内容:

代码语言:javascript
复制
{
    "value": {
        "name": "my-test-route",
        "update_time": 1714784004,
        "upstream": {
            "scheme": "http",
            "service_name": "my-service",
            "type": "roundrobin",
            "hash_on": "vars",
            "discovery_type": "nacos",
            "pass_host": "pass",
            "discovery_args": {
                "namespace_id": "public"
            }
        },
        "host": "test.example.com",
        "id": "00000000000000000483",
        "create_time": 1714784004,
        "status": 1,
        "uri": "/api/*",
        "priority": 0
    },
    "createdIndex": 484,
    "modifiedIndex": 484,
    "key": "/apisix/routes/00000000000000000483"
}

‍4、在配置好后,我们可以通过APISIX-Ingress访问注册到Nacos的微服务了

05、知识拓展

如果是反向代理k8s的service,那就更简单,可以参考如下案例

代码语言:javascript
复制
apiVersion: apisix.apache.org/v2
kind: ApisixRoute
metadata:
  name: nginx-route
  namespace: gray # 这里填写你微服务的命名空间
spec:
  http:
  - name: nginx-route
    match:
      hosts:
      - "test.example.com" # 这里填写你的域名
      paths:
      - "/api/*"
    backends:
    - serviceName: nginx-v1 # 这里填写你微服务的名称
      servicePort: 80 # 这里填写你微服务的服务端口

06、总 结

APISIX的路由配置更简单,可以通过Admin API或者dashboard进行配置,整体感觉比Spring Cloud Gateway的配置管理更友好,当然性能也不在话下,本次分享就到这里,如果有什么问题欢迎留言一起探讨,谢谢!

参考文档:

https://nacos.io/zh-cn/blog/apisix/

https://apisix.apache.org/zh/docs/apisix/discovery/nacos/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SRE运维手记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
API 网关
腾讯云 API 网关(API Gateway)是腾讯云推出的一种 API 托管服务,能提供 API 的完整生命周期管理,包括创建、维护、发布、运行、下线等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档