Kube-proxy或ELB“延迟” HTTP请求的数据包

时间:2018-08-01 11:05:36

标签: kubernetes amazon-elb kops kube-proxy project-calico

我们正在AWS(使用KOPS设置)的Kubernetes(1.9.3)上运行Web API应用程序。该应用程序是一个Deployment,由服务(类型:LoadBalancer)表示,该服务实际上是AWS上的ELB(v1)。 这通常可以工作-除了某些数据包(HTTP请求的片段)在客户端<->应用容器之间的某个位置“延迟”。 (在以ELB结尾的HTTP和HTTPS中)。

从节点端

注意:服务器端几乎所有数据包都重复发送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:

到目前为止,我已经尝试过:

  • 使用service.beta.kubernetes.io/aws-load-balancer-type: "nlb"-问题仍然存在。
  • (尝试一些ELB设置可以达到某些目的__(ツ)_ /¯)
  • 在查找Kube代理中的错误时,发现以下情况很少见:
  

E0801 04:10:57.269475 1Reflector.go:205] k8s.io/kubernetes/pkg/client/informers/informers_genic/internalversion/factory.go:85:无法列出* core。端点:获取{{3 }}:拨打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-restore失败后关闭本地端口

我找不到任何描述此类问题的信息,将不胜感激。欢迎提供有关如何继续和进行故障排除的想法。

最好, A

0 个答案:

没有答案