higress-group / higress-standalone

Other
39 stars 6 forks source link

请求higress启动后新注册到nacos的服务报503异常 #76

Closed huangye123 closed 6 months ago

huangye123 commented 7 months ago

【环境】 1、Higress 1.3.6

【重现】 2、higress启动成功后,新启动一个新微服务,已经注册到nacos,通过网关请求报503,其他服务请求正常 {"authority":"172.16.2.121","bytes_received":"0","bytes_sent":"0","downstream_local_address":"172.16.2.121:80","downstream_remote_address":"10.181.1.100:53802","duration":"0","istio_policy_status":"-","method":"GET","path":"/api/libroot/Contract/test","protocol":"HTTP/1.1","request_id":"e21b61c6-d78f-4c7c-bd59-bf1647a6dcb9","requested_server_name":"-","response_code":"503","response_flags":"NC","route_name":"szft-libroot-xiaoyj","start_time":"2024-04-24T10:40:53.035Z","trace_id":"-","upstream_cluster":"-","upstream_host":"-","upstream_local_address":"-","upstream_service_time":"-","upstream_transport_failure_reason":"-","user_agent":"Apifox/1.0.0 (https://apifox.com)","x_forwarded_for":"10.181.1.100"}

3、任何配置不变动的情况,重启higress,再次请求,恢复正常 {"authority":"172.16.2.121","bytes_received":"0","bytes_sent":"94","downstream_local_address":"172.16.2.121:80","downstream_remote_address":"10.181.1.100:54219","duration":"823","istio_policy_status":"-","method":"GET","path":"/api/libroot/Contract/test","protocol":"HTTP/1.1","request_id":"f77c06ad-2763-48d3-90e8-6ea4a160465d","requested_server_name":"-","response_code":"200","response_flags":"-","route_name":"szft-libroot-xiaoyj","start_time":"2024-04-24T10:44:32.034Z","trace_id":"43b938b8ac336d622abb820d534c4880","upstream_cluster":"outbound|30010||jnpf-szft-libroot-xiaoyj.DEFAULT-GROUP.dev.nacos","upstream_host":"10.181.1.100:30010","upstream_local_address":"172.16.2.121:32952","upstream_service_time":"820","upstream_transport_failure_reason":"-","user_agent":"Apifox/1.0.0 (https://apifox.com)","x_forwarded_for":"10.181.1.100"}

CH3CHO commented 7 months ago

请提供服务来源和路由配置详情。

huangye123 commented 7 months ago

1、服务来源,同一台服务器下的Nacos,Higress使用容器host网络模式 image

2、路由配置,根据前缀/api/libroot/转发到szft-libroot-xiaoyj微服务 image

CH3CHO commented 7 months ago

"response_flags":"NC" 是“Upstream cluster not found.”的意思(参考文档)。

这里我还有几个问题:

  1. 以下几个事件的发生顺序是怎么样的:
    • 从零创建并启动 Higress Standalone
    • 配置服务来源(如果实例注册到的 Nacos 并不是 Higress Standalone 所使用的那个 Nacos 的话)
    • 配置路由
    • 启动服务实例并确认实例已注册到 Nacos
    • 发送测试请求
  2. 启动实例并确认实例已注册到 Nacos 后,是否检查过 Higress Console 上服务列表中所显示的服务节点信息?如果有,那么当时的结果是什么?
  3. 该问题能否完整重现,即清除所有 Higress 配置并重新执行以上操作,能否重现该问题?
huangye123 commented 6 months ago
  • 以下几个事件的发生顺序是怎么样的:

    • 从零创建并启动 Higress Standalone
    • 配置服务来源(如果实例注册到的 Nacos 并不是 Higress Standalone 所使用的那个 Nacos 的话)
    • 配置路由
    • 启动服务实例并确认实例已注册到 Nacos
    • 发送测试请求
  • 启动实例并确认实例已注册到 Nacos 后,是否检查过 Higress Console 上服务列表中所显示的服务节点信息?如果有,那么当时的结果是什么?
  • 该问题能否完整重现,即清除所有 Higress 配置并重新执行以上操作,能否重现该问题?

1、顺序如下:启动Higress==>配置服务来源==》配置路由==》启动服务实例==》发送测试请求

2、检查服务已经成功注册到Nacos,Higress Console 上服务列表有显示服务节点信息,显示如下【 szft-libroot-xiaoyj.DEFAULT-GROUP.dev.nacos | mcp | 10.181.1.100】,请求报503,重启higress服务后,再次请求成功。

3、上问题能完整重现,全新环境配置后,也是需要重启加载生效。

CH3CHO commented 6 months ago

1、顺序如下:启动Higress==>配置服务来源==》配置路由==》启动服务实例==》发送测试请求

2、检查服务已经成功注册到Nacos,Higress Console 上服务列表有显示服务节点信息,显示如下【 szft-libroot-xiaoyj.DEFAULT-GROUP.dev.nacos | mcp | 10.181.1.100】,请求报503,重启higress服务后,再次请求成功。

3、上问题能完整重现,全新环境配置后,也是需要重启加载生效。

我本地重现了你这个问题,但步骤和你说的似乎并不完全一样。麻烦帮忙看一下我的步骤是否匹配你的场景:

  1. 从零创建并启动 Higress Standalone(使用内置 Nacos)
  2. 单独启动一个 Standalone 模式的 Nacos 实例,并在 Higress Standalone 上添加对应的服务来源
  3. 启动一个服务,注册到 Nacos
  4. 在 Higress Console 配置路由
  5. 验证路由可以正常工作
  6. 关闭在第 3 步启动的服务,确认 Nacos Console 上的服务列表已经清空
  7. 重启 Higress Standalone
  8. 确认 Higress Console 上的服务列表已经不再包含前述服务
  9. 验证路由已无法正常工作,返回 503,AccessLog 记录 response-flags 为 NC
  10. 再次启动第 3 步中提到的服务,确认服务信息重新出现在了 Higress Console 上
  11. 等待 1 分钟,验证路由仍无法正常工作,表现与第 9 步相同

这里我觉得可能导致与你的步骤出现差异的,就是我用的是 Standalone 模式的 Nacos,无法创建一个持久化的服务。这个步骤可以换成创建一个空持久化的服务,配置路由,再启动服务实例,这样就避开了重启服务实例的操作。

huangye123 commented 6 months ago

1、顺序如下:启动Higress==>配置服务来源==》配置路由==》启动服务实例==》发送测试请求 2、检查服务已经成功注册到Nacos,Higress Console 上服务列表有显示服务节点信息,显示如下【 szft-libroot-xiaoyj.DEFAULT-GROUP.dev.nacos | mcp | 10.181.1.100】,请求报503,重启higress服务后,再次请求成功。 3、上问题能完整重现,全新环境配置后,也是需要重启加载生效。

我本地重现了你这个问题,但步骤和你说的似乎并不完全一样。麻烦帮忙看一下我的步骤是否匹配你的场景:

  1. 从零创建并启动 Higress Standalone(使用内置 Nacos)
  2. 单独启动一个 Standalone 模式的 Nacos 实例,并在 Higress Standalone 上添加对应的服务来源
  3. 启动一个服务,注册到 Nacos
  4. 在 Higress Console 配置路由
  5. 验证路由可以正常工作
  6. 关闭在第 3 步启动的服务,确认 Nacos Console 上的服务列表已经清空
  7. 重启 Higress Standalone
  8. 确认 Higress Console 上的服务列表已经不再包含前述服务
  9. 验证路由已无法正常工作,返回 503,AccessLog 记录 response-flags 为 NC
  10. 再次启动第 3 步中提到的服务,确认服务信息重新出现在了 Higress Console 上
  11. 等待 1 分钟,验证路由仍无法正常工作,表现与第 9 步相同

这里我觉得可能导致与你的步骤出现差异的,就是我用的是 Standalone 模式的 Nacos,无法创建一个持久化的服务。这个步骤可以换成创建一个空持久化的服务,配置路由,再启动服务实例,这样就避开了重启服务实例的操作。

基本相同,就是nacos我是独立一个容器部署,不是采用Higress Standalone内置的Nacos,但关键场景是一致的,是higerss对新加入到nacos服务转发报503异常。

CH3CHO commented 6 months ago

请 @johnlanni 一起看一下

CH3CHO commented 6 months ago

直接原因定位了,看上去是个 bug。接下来我看看如何修复。

CH3CHO commented 6 months ago

已确认是 RDS Cache 导致的路由数据未更新问题。后续将由 @johnlanni 跟进修复。