云原生网关FAQ

本文介绍MSE云原生网关使用过程中的常见问题。

MSE云原生网关支持IPv6吗?

支持。网关的流量入口是CLB/NLB,只需在基本概览页面的网关入口页签绑定一个开启IPv6的CLB或者NLB即可。

云原生网关支持x-real-ip请求头吗?

默认不支持。x-real-ip是Nginx特有请求头,需要使用网关的http-real-ip插件,该插件会根据配置提取客户端IP然后将其写入x-real-ip请求头中。

云原生网关支持x-forwarded-for请求头吗?

支持。如果原始请求中携带x-forwarded-for请求头,网关会将新的IP地址添加到该请求头的末尾。该IP是网关前一跳的地址。如果原始请求中没有x-forwarded-for,网关会添加该请求头并将新的IP地址写入其中。

说明

SpringBoot内置的Tomcat会默认删除x-forwarded-for头部中的最后一个地址。通过SpringBoot新增配置server.forward-headers-strategy=none可以避免这种删除操作。

云原生网关中转发请求出现upstream connect error or disconnect/reset header问题

该问题是由于后端服务的安全组不允许网关访问服务端口引起的upstream connect error or disconnect/reset header问题。您可以在网关实例的基本概览页面,单击安全组授权页签,然后单击授权安全组新增安全组配置。网关会直接转发请求到ACK的Pod IP,安全组授权中需要开放Pod使用的端口。

云原生网关中如何使用Header来匹配域名?

创建路由时新增请求头Header匹配规则。Header字段名填 :authority,Header值填具体的域名。

云原生网关看不到插件日志

可能的原因有:

  • 插件默认只打印Info及以上级别的日志,当前日志级别为Trace或Debug时不会打印。

  • 插件没有正常启动,可能是由于编译问题。可以清空默认日志查询语句,以便查看插件启动阶段的报错日志。请参考插件开发文档进行正确的编译,并在本地使用docker compose模式进行插件调试,以确认插件本身没有问题,然后再将其上传到云原生网关。

云原生网关请求因为Body太大报错

该问题是由于网关连接Buffer太小导致的。可以调大Buffer:

  • 如果协议为HTTP 1.x:在控制台调整参数DownstreamConnectionBufferLimits

  • 如果协议为HTTP 2:在控制台调整参数DownstreamConnectionBufferLimitsInitialStreamWindowSize

云原生网关添加服务来源的限制有哪些?

  • 单个网关实例最多只能关联3个ACK容器服务。

  • 单个网关实例最多只能关联1个Nacos实例。

云原生网关添加服务来源时无法选到已有的Nacos或者ACK?

云原生网关只能添加同VPC内的Nacos或者ACK,不支持跨VPC添加服务来源。

云原生网关是否支持自有HTTPS证书?

云原生网关自身不托管证书,会从阿里云SSL拉取证书。您可以通过在SSL证书服务上传自有证书,然后在网关域名中配置。

云原生网关控制台参数变更会不会对现有流量造成影响?

  • XffTrustedNum修改后,需要重启网关才能生效。

  • UpstreamIdleTimeout修改后,上游连接会断开重连。

  • DownstreamIdleTime修改后,下游连接会断开重连。

云原生网关CLB的443端口健康检测状态显示异常

在网关上没有配置HTTPS域名时,网关不会监听443端口,因此CLB 443端口健康检测显示异常。您需要在网关上配置HTTPS域名,具体操作,请参见创建域名。如果使用Ingress,具体操作,请参见K8s Ingress

云原生网关创建服务后,健康检查状态显示异常

网关给后端服务转发请求的前提是保证网关与后端服务网络的连通性。服务的健康检查状态为异常,一般有以下几种情况:

  • 对于VPC内的私网服务,请检查后端服务所在的安全组是否已经授权网关访问对应的端口,请参见设置安全组规则

  • 对于公网上的服务,请检查VPC是否具有公网访问的能力,可尝试使用公网NAT网关SNAT功能访问互联网,请参见使用公网NAT网关SNAT功能访问互联网

  • 对于HTTP类型的健康检查,请确保请求路径和请求域名设置正确。

  • 对于HTTP类型的健康检查,若后端服务的健康检查接口需要通过HTTPS来访问,请在服务的策略配置中设置为单向TLS模式。

  • 对于HTTP类型的健康检查,若以上步骤均没问题,可能是健康检查的间隔时间与后端服务的连接保持时间相同所致,可尝试调大健康检查的间隔时间。

云原生网关如何判断请求错误原因?

  • 查看响应Header是否包含x-envoy-upstream-service-time头部。正常情况下,若响应中包含x-envoy-upstream-service-time头部,则表明网关已将请求转发给后端服务处理,后续的请求出错与后端服务自身逻辑存在很大的关系。

  • 查看网关的访问日志中upstream_service_time是否为空。正常情况下,若访问日志中字段upstream_service_time不为空,则表明网关已将请求转发给后端服务处理,后续的请求出错与后端服务自身逻辑存在很大的关系。

云原生网关中更新HTTPS证书后不生效?

该问题通常是由于在网关前面也配置了HTTPS证书,例如CLB、DCDN、WAF、DDoS高防等。请检查网关前面的节点是否也同步更新了HTTPS证书,最佳实践是只在一个地方做HTTPS证书配置,如果网关前面接了DCDN、WAF,可以只在其上配置HTTPS,后端网关走HTTP即可。

云原生网关中修改参数配置项不生效?

该问题通常是由于使用了MSE Ingress。在MseIngressConfig中有相关的配置项,MSE Ingress会自动同步MseIngressConfig中的配置项到MSE网关控制台,在控制台修改配置项后有可能出现被MSE Ingress同步信息覆盖的情况,建议统一使用MSE Ingress方式修改配置项。

云原生网关路由优先级是怎么排序的?

在网关实例路由配置页面看到的路由配置列表顺序就是路由匹配优先级顺序。该顺序是由高到低,匹配优先级分为域名与路由规则。域名匹配是精确域名大于泛域名,例如test.example.com的优先级大于*.example.com域名。同域名的Path优先级匹配规则是精确匹配 > 前缀匹配 > 正则匹配,同域名同Path的优先级匹配规则是匹配条件多 > 匹配条件少(匹配条件:Header、Query匹配条件)。

云原生网关前面接DCDN后,HTTPS请求访问失败?

该问题通常是由于DCDN在回源访问网关时没有携带SNI引起。请在DCDN的回源配置中设置回源SNI。

云原生网关前面接WAF后,HTTPS请求访问失败?

该问题通常是由于WAF在回源访问网关时没有携带SNI引起。在WAF中使用CNAME方式接入的,需要修改对应接入域名,在配置转发中选择启用回源SNI

云原生网关是否支持Websocket?

支持,且默认开启Websocket协议支持。

云原生网关是否支持gRPC?

支持。gRPC使用HTTP 2协议传输,请确认网关参数配置中的EnableHttp2 = true

云原生网关是否支持GZIP解压缩?

支持。请确认网关参数配置中的EnableGzip = true,压缩算法支持Gzip与Brotli,通过参数ZipAlgorithm配置,默认Gzip。

云原生网关是否支持保留请求/响应头的大小写?

支持。请确认网关参数配置中的PreserveHeaderFormat = true。该参数只对HTTP 1.0或者1.1生效,根据规范HTTP 2协议要求请求/响应头全部为小写。

云原生网关是否支持HTTP/3?

支持。请确认网关参数配置中的EnableHttp3 = true

云原生网关是否支持自定义监听端口?

支持。云原生网关支持HTTP(80端口)与HTTPS(443端口)。在CLB控制台新增监听端口,例如新增TCP 8080端口与80端口设置为同一个虚拟服务器组即可处理HTTP协议。

云原生网关为什么请求经过网关后,请求/响应头全部变成小写?

网关默认会将请求/响应头全部置为小写。如果需要保留大小写,调整网关参数配置中的PreserveHeaderFormat = true

云原生网关创建了一个DNS域名服务,为什么访问失败?

如果配置的DNS域名是公网域名,需要在NAT网关中配置SNAT允许网关访问外网,网关默认无法访问外网。

云原生网关请求出现400错误

该错误通常是由于以下两种可能原因:

  • 客户端发送的协议错误。查看网关的访问日志,日志中response_flags = DPE

  • 后端服务返回的400。查看网关的访问日志,如果日志中response_flags等于空且upstream_host有值说明是后端服务返回400,网关转发的具体后端IP就是upstream_host内容。

建议使用AI诊断功能进行初步分析。

云原生网关请求出现401错误

该错误通常是由于以下两种可能原因:

  • 网关返回说明无访问凭证。请检查是否开启了认证鉴权或Wasm插件。

  • 后端服务返回的401。查看网关的访问日志,如果日志中response_flags等于空且upstream_host有值说明是后端服务返回401,网关转发的具体后端IP就是upstream_host内容。

建议使用AI诊断功能进行初步分析。

云原生网关请求出现403错误

该错误通常是由于以下两种可能原因:

  1. 网关返回说明无权限访问。请检查是否开启了IP黑白名单、认证鉴权或者Wasm插件。

  2. 后端服务返回的403。查看网关的访问日志,如果日志中response_flags等于空且upstream_host有值说明是后端服务返回403,网关转发的具体后端IP就是upstream_host内容。

建议使用AI诊断功能进行初步分析。

云原生网关请求出现404错误

该错误通常是由于以下两种可能原因:

  • 网关中缺少对应的路由规则。查看网关的访问日志,如果日志中response_flags = NR说明网关中缺少路由规则。

  • 后端服务返回的404。查看网关的访问日志,如果日志中response_flags等于空且upstream_host有值说明是后端服务返回404,网关转发的具体后端IP就是upstream_host内容。

建议使用AI诊断功能进行初步分析。

云原生网关请求出现405错误

开启了WAF防护,请求命中了WAF的防护规则,该状态码为WAF返回。

云原生网关请求出现413错误

该错误通常是由于以下两种可能原因:

  • 请求大小超过网关的链接缓存大小。需要调大参数配置中的DownstreamConnectionBufferLimits

  • 后端服务返回的413。查看网关的访问日志,如果日志中response_flags等于空且upstream_host有值说明是后端服务返回413,网关转发的具体后端IP就是upstream_host内容。

建议使用AI诊断功能进行初步分析。

云原生网关请求出现429错误

触发网关限流规则。查看网关的访问日志,日志中response_flags = RL,请检查网关限流规则。

建议使用AI诊断功能进行初步分析。

云原生网关请求出现502错误

该错误通常是由于以下两种可能原因:

  • 后端服务返回的请求协议错误。查看网关的访问日志,日志中response_flags = UPE,最常见的情况是后端服务返回的Header中含有重复的Transfer-Encoding字段,请检查后端服务。

  • 后端服务返回502。查看网关的访问日志,如果日志中response_flags等于空且upstream_host有值说明是后端服务返回502,网关转发的具体后端IP就是upstream_host内容。

建议使用AI诊断功能进行初步分析。

云原生网关请求出现503错误

该错误通常是由于以下可能原因:

  • 网关中配置的路由规则中的目标服务没有健康的IP地址。查看网关的访问日志,日志中response_flags = UH

  • 网关转发请求时链接被后端服务关闭。查看网关的访问日志,日志中response_flags = UC,通常是由于后端服务的连接空闲时间idle timeout小于网关UpstreamIdleTimeout引起,请在网关的参数配置中调小UpstreamIdleTimeout

  • 网关无法连接后端服务IP。查看网关的访问日志,日志中response_flags = UFresponse_flags = URX,通常是由于后端服务安全组不允许网关访问,请排查后端服务所在的安全组是否已经授权网关访问对应的端口,请参见设置安全组规则

  • 网关中没有对应的后端服务。查看网关的访问日志,日志中response_flags = NC,通常是由于以下几种原因:

    • 对应的服务已经不存在。

    • 若后端服务有多个端口,在路由配置选择目标服务时需要选择一个固定端口,不能选择动态端口。

    • 后端服务选择了某个固定端口,但是服务的端口已经改变。

  • 后端服务返回503。如果日志中response_flags等于空且upstream_host有值说明是后端服务返回503,网关转发的具体后端IP就是upstream_host内容。

建议使用AI诊断功能进行初步分析。

日志中的response_code字段为0

日志中看到response_code字段为0,表明客户端没有收到response code。

该错误通常是由于以下两种可能原因:

  • 客户端提前关闭连接。例如,客户端在移动网络信号较弱的情况下,或者后端响应时间过长时,可能会出现客户端提前关闭连接的情况。在日志中,可以通过检查response_flags字段的值是否等于"DC"来确认此情况。

  • HTTPS请求没有携带SNI(TLS扩展字段,用于携带域名信息),且没有给*域名配置HTTPS证书。在日志中,可以通过检查requested_server_name字段是否为空来确认此情况。

建议使用AI诊断功能进行初步分析。