#### 说明
1.本地机房的研发、测试和部分预发环境使用的是同一套 K8S 集群,一共 30 个NS 900+ POD.
2.使用 calico 作为网络组件,使用 ingress-nginx 作为代理层
3.当天下午,某个 NS(namespace) 下的一个域名根地址无法访问,但是其他域名及接口正常调用
4.另一 NS 的 redis 内部请求调用超时
5.本地办公环境的一台 ktctl 工具调用超时
6.可能还有其他问题未报出
#### 排查处理
1.从内外网络请求域名及部分接口,域名不通、接口通
2.查看对应 SVC POD 均正常,容器终端访问正常
3.查看外部代理,日志显示请求该域名的根目录多条超时
4.查看 k8s ingress nginx 日志有多条 upstream timed out 记录
```
# ingress
2023/03/02 07:57:56 [error] 1374#1374: *21845 upstream timed out (110: Connection timed out) while connecting to upstream, client: 10.100.50.2, server: xxx.xxx.com, request: "GET / HTTP/1.1", upstream: "http://10.200.193.127:80/", host: "xxx.xxx.com"
```
5.调整 ingress 配置,故障没有改善
6.更新对应的 POD 后,域名故障请求恢复,但是 redis 问题未恢复
7.重启 redis 服务后故障恢复
8.横向思考,两个没有关联的 POD 同时受到影响,那么实际出现问题的 POD 可能会更多,所以继续排查
9.发现某台 NODE 上,网络组件 calico 的一个守护进程集 calico-node 的 POD 故障,健康检查失败,一直重启中,于是删除该 POD ,控制器重新拉起 POD 正常启动,自此,没有再发现环境中其他问题。
```
ExecSync cmd from runtime service failed" err="rpc error: code = DeadlineExceeded desc = context deadline exceeded" containerID="70150ee7137e3e4a570df5f26027bd36850dacedb835ead3767b278d1422f1dd" cmd=[/bin/calico-node -felix-live]
```
#### 问题追溯及后续处理
1.查看对应 NODE 节点日志,只有POD请求超时问题,没有体现故障原因
2.查看对应节点 kubelet 日志,只有PODkill、重启记录,没有体现故障原因
3.查看对应 POD 日志,只有调用日志,没有状态记录
4.查看 /etc/cni/net.d/ 下网络配置,无异常
5.查看 /var/log/calico/cni/cni.log 日志信息,没有体现故障原因
结论:
1.当前未发现到具体的故障原因,找到具体原因之前需要按照紧急故障方案处理。
2.当前 CNI 的日志级别是 info,需要开启 debug 才能进一步调查具体信息;不排除会有底层的 BUG。
#### 备忘
1、节点的 calico-node 重启失败的原因
2、重启失败后集群为什么没有把这个节点下线