[kubernetes]故障排查 istio

[kubernetes]故障排查 istio

问题是这样的,部署了自己公司的服务,发现相关的的pods都只有二分之一个容器是READY的。

启动deployment 显示not ready

我这里的pod是由一个tomcat容器和一个sidecar容器组成的。

1/2 running表示sidecar容器有问题,通过查看日志并指定容器 发现的确是sidecar健康检查有问题

没有通过readiness probe测试的是istio-proxy这个容器。它的readiness probe规则定义如下。

readinessProbe:
  failureThreshold: 30
  httpGet:
    path: /healthz/ready
    port: 15020
    scheme: HTTP
  initialDelaySeconds: 1
  periodSeconds: 2
  successThreshold: 1
  timeoutSeconds: 1

我们登录这个pod所在的节点,用curl工具来模拟kubelet访问下边的uri,测试istio-proxy的就绪状态。这里内部外部访问都没关系

# curl http://10.244.8.53:15020/healthz/ready -v
* About to connect() to 10.244.8.53 port 15020 (#0)
*   Trying 10.244.8.53...
* Connected to 10.244.8.53 (10.244.8.53) port 15020 (#0)
> GET /healthz/ready HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 10.244.8.53:15020
> Accept: */*> 
< HTTP/1.1 503 Service Unavailable< Date: Fri, 14 Feb 2020 16:43:50 GMT
< Content-Length: 0
< * 
Connection #0 to host 10.244.8.53 left intact

我们可以使用下边的命令进入pod的istio-proxy容器做进一步排查。这里的一个小技巧,是我们可以以用户1337,使用特权模式进入istio-proxy容器,如此就可以使用iptables等只能在特权模式下运行的命令。

docker exec -ti -u 1337 --privileged <istio-proxy container id> bash

进入容器之后,我们使用netstat命令查看监听,我们会发现,监听readiness probe端口15020的,其实是pilot-agent进程。

我们在istio-proxy内部访问readiness probe接口,一样会得到503的错误。

通过在容器内部访问localhost:15000/server_info 查看envoy信息,我这里显示信息是正常的。参考的博客里是发现容器的/etc/resolv.conf里的dns地址和coredns地址不一致。导致所有的sidecar都无法访问Pilot。

我这里是自己忘记创建service了,以至于无法解析地址,创建完service之后就显示ready了

参考

https://segmentfault.com/a/1190000020301822

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爷来辣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值