前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linkerd 2.10(Step by Step)—调试 502s

Linkerd 2.10(Step by Step)—调试 502s

作者头像
为少
发布2021-07-07 11:12:49
7070
发布2021-07-07 11:12:49
举报
文章被收录于专栏:黑客下午茶黑客下午茶

Linkerd 2.10 系列

Linkerd 2.10 中文手册持续修正更新中:

  • https://linkerd.hacker-linner.com

Linkerd 代理在处理请求时遇到连接错误时,它通常会返回 HTTP 502(Bad Gateway)响应。由于缺乏可用信息,很难弄清楚为什么会发生这些错误。

为什么只有在注入 Linkerd 时才会出现这些错误?

Linkerd 将连接错误转换为 HTTP 502 响应。这可能会使以前未检测到的问题突然可见。这是一件好事。Linkerd 还改变了管理应用程序连接的方式:它重用持久连接并建立额外的连接跟踪层。以这种方式管理连接有时会暴露底层应用程序或基础设施问题, 例如错误配置的连接超时,这可能表现为连接错误。

为什么 Linkerd 不能提供更多信息性错误消息?

从 Linkerd 代理的角度来看,它只是看到它与应用程序的连接被拒绝或关闭,而无需解释。这使得 Linkerd 几乎不可能在 502 响应中报告任何错误消息。但是,如果这些错误与 Linkerd 的引入同时发生,则确实表明问题与连接重用或连接跟踪有关。以下是应用程序可能拒绝或终止连接的一些常见原因。

连接错误的常见原因

连接空闲超时

一些服务器配置了连接空闲超时 (例如 Go HTTP 服务器中的这个超时)。这意味着服务器将关闭任何在指定时间段内没有收到任何流量的连接。如果任何请求已经在传输时启动连接关闭,这些请求将失败。如果您的流量具有固定周期(例如活动检查)并且空闲超时等于该周期, 则可能会发生这种情况。

要解决此问题,请确保您的服务器的空闲超时足够长,以便它们不会关闭正在使用的连接。

半关闭(Half-closed)连接超时

在关闭 TCP 连接期间,连接的每一端都必须独立关闭。当一侧关闭而另一侧未关闭时,连接被称为“半关闭(half-closed)”。连接处于这种状态是有效的,但是,操作系统的连接跟踪器可能会丢失对长时间保持半关闭状态的连接的跟踪。在建立表现为 502 响应的新连接时,这可能会导致无法传递响应和端口冲突。

您可以使用 脚本来检测 Kubernetes 集群上的半关闭连接。如果您检测到大量半关闭的连接,则有几种方法可以解决这种情况。

一种解决方案是更新您的应用程序,以免连接长时间处于半关闭状态或停止使用执行此操作的软件。不幸的是,这并不总是一种选择。

另一种选择是增加连接跟踪器对半关闭连接的超时时间。此超时的默认值取决于平台,但通常为 1 分钟或 1 小时。您可以通过查看任何注入容器中的文件 /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_close_wait 来查看当前值。要增加此值,您可以将 --close-wait-timeout 标志与 linkerd inject 一起使用。但是请注意,设置此标志也会将代理初始化容器的 privileged 字段设置为 true。将此超时设置为 1 小时通常就足够了,并且与 kube-proxy 使用的值匹配。

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

本文分享自 黑客下午茶 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Linkerd 2.10 系列
  • 为什么只有在注入 Linkerd 时才会出现这些错误?
  • 为什么 Linkerd 不能提供更多信息性错误消息?
  • 连接错误的常见原因
    • 连接空闲超时
      • 半关闭(Half-closed)连接超时
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档