upstream connect error or disconnect/reset before headers. reset reason: connection termination

  • 错误:upstream connect error or disconnect/reset before headers. reset reason: connection termination

  • 环境:k8s部署的django后端

  • 发生场景:外部应用|postman|脚本 向后端发送post请求,api/handleOrders,返回状态码是503

  • 后端容器启动正常:

  • istio-proxy

kubectl logs -f husky-web-7fd95dcff6-9clqx -n pdm-platform istio-proxy

  • 脚本发请求

探究步骤:

通过搜索引擎查找解决方案,反应的全是关于istio-proxy的内容。各种博客认为K8S部署了Istio后,在启动的节点中,istio-proxy这个容器先于后端容器启动,流量先流入前者,istio-proxy接收流量发现配置upstearm的后端服务未启动,于是报503。需要在部署文件中加探针的方法,保证后端服务先起来:
我添加了发送命令的就绪探针,后面:

readinessProbe:
  exec:
    command:
      - curl
      - -X POST
      - http://localhost/api/handleOrders
  initialDelaySeconds: 5
  timeoutSeconds: 1

结果是istio-proxy pod没有起来:

也添加了httpGet的就绪探针:

livenessProbe:
  httpGet:
    path: /api/handleOrders
    port: 3033
    httpHeaders:
  initialDelaySeconds: 5
  periodSeconds: 5

结果是:


用脚本发post请求是一样的错误,因此需要将有关的pod删除,然后服务重启

修复过程

中途尝试的过程改了svc的ports的name改成了http-0,结果k8s索性根据这个name将协议解析为http协议。
因为我们所部署的后端是socket协议,后端是uwsgi启动的服务,前后端沟通不是http协议。此时发生的错误就是400,传输的数据不符合服务端要求,是客户端的问题。
后面改回来重启了服务,本文的问题就没了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值