我们正在 AWS 中的 Kubernetes (1.9.3) 上运行 Web API 应用程序(使用 KOPS 设置)。该应用程序是一个部署并由服务(类型:LoadBalancer)表示,该服务实际上是AWS上的ELB(v1)。
这通常是有效的 - 除了一些数据包(HTTP 请求的片段)在客户端 应用程序容器之间的某个位置“延迟”。 (在 HTTP 和 HTTPS 中,终止于 ELB)。
从节点侧:
( 注意:服务器端几乎所有数据包都重复到达 3 次 )
我们使用 keep-alive,因此 tcp 套接字处于打开状态,并且请求到达和返回的速度相当快。那么问题就发生了:
- 首先,只有标头的数据包到达 [PSH,ACK](我通过 tcpdump 在有效负载中看到标头)。
- 容器发回 [ACK]。
- tcp 套接字/流在很长一段时间内保持安静(长达 30 秒及以上- 但间隔不一致,我们认为 >1s 是一个问题)。
- 另一个带有 HTTP 数据的 [PSH, ACK] 到达,请求最终可以在应用程序中处理。
从客户端:
我从我的计算机上运行了一些流量,将其记录在客户端以查看问题的另一端,但不能 100% 确定它代表真正的客户端。
- 带有标题的 [PSH,ASK] 消失。
- 带有部分有效负载的几个 [ACK] 开始发出。
- 几秒钟(或更长时间)没有响应到达,并且没有更多数据包发出。
- 标记为[TCP 窗口更新] 的[ACK] 到达。
- 再次短暂暂停,[ACK] 开始到达,会话继续,直到有效负载结束。
这仅在负载下发生。
据我了解,这介于 ELB 和 Kube-Proxy 之间,但我一无所知,迫切需要帮助。
这是 Kube-Proxy 运行时使用的参数:
Commands: /bin/sh -c mkfifo /tmp/pipe; (tee -a /var/log/kube-proxy.log < /tmp/pipe & ) ; exec /usr/local/bin/kube-proxy --cluster-cidr=100.96.0.0/11 --conntrack-max-per-core=131072 --hostname-override=ip-10-176-111-91.ec2.internal --kubeconfig=/var/lib/kube-proxy/kubeconfig --master=https://api.internal.prd.k8s.local --oom-score-adj=-998 --resource-container="" --v=2 > /tmp/pipe 2>&1
我们使用 Calico 作为 CNI:
到目前为止我已经尝试过:
- Using
service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
- 问题仍然存在。
- (尝试使用 ELB 设置希望能解决问题 ́_(ツ)_/́ )
- 在 Kube-Proxy 中查找错误,发现很少出现以下情况:
E0801 04:10:57.269475 1 Reflector.go:205] k8s.io/kubernetes/pkg/client/informers/informers_ generated/internalversion/factory.go:85:无法列出* core.Endpoints:获取https://api.internal.prd.k8s.local/api/v1/endpoints?limit=500 https://api.internal.prd.k8s.local/api/v1/endpoints?limit=500&resourceVersion=0: 拨打 tcp: 在 10.176.0.2:53 上查找 api.internal.prd.k8s.local: 没有这样的主机
...和...
E0801 04:09:48.075452 1 proxier.go:1667] 无法执行 iptables-restore: 退出状态 1 (iptables-restore: 第 7 行失败
)
I0801 04:09:48.075496 1 proxier.go:1669] iptables 恢复失败后关闭本地端口
我找不到任何描述此类问题的内容,非常感谢任何帮助。欢迎提出有关如何继续和排除故障的想法。
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)