为Pod注入Sidecar之后,执行以下命令,查看Pod状态,发现Pod处于init crash的状态。
kubectl get pod
预期输出:
NAME READY STATUS RESTARTS AGE
details-v1-u**** 0/2 Init:Error 1 12h
productpage-n**** 0/2 Init:CrashLoopBackOff 3 12h
然后执行以下命令,查看istio-init容器日志。
kubectl --kubeconfig=${USER_KUBECONFIG} -c istio-init logs ${pod}
预期输出:
......
......
-A ISTIO_OUTPUT -d 127.0.**.**/32 -j RETURN
-A ISTIO_OUTPUT -d 192.168.0.1/32 -j RETURN
-A ISTIO_OUTPUT -j ISTIO_REDIRECT
COMMIT
2022-03-23T06:42:21.179567Z info Running command: iptables-restore --noflush /tmp/iptables-rules-1648017741179373856.txt4205119933
2022-03-23T06:42:21.185698Z error Command error output: xtables other problem: line 2 failed
2022-03-23T06:42:21.185720Z error Failed to execute: iptables-restore --noflush /tmp/iptables-rules-1648017741179373856.txt4205119933, exit status 1
可以看到istio-init容器日志包含Failed to execute: iptables-restore信息。
检查是否曾经手动通过docker container rm/docker container prune/docker system prune等命令清理了已经退出的istio-init容器,或者是否存在清理容器的相应的定时任务。
清理已退出的istio-init容器,会导致K8s检测到Pod关联的容器不存在,此时K8s会重新启动被删除的容器。由于之前已创建了iptables规则,istio-init容器不能再次执行iptables规则,导致新启动的istio-init容器设置iptables规则失败而崩溃。
您需要重建Pod,重建后,服务的Pod将恢复正常状态。
如果您下次仍然要使用命令或定时任务脚本清理数据,需要注意以下事项:
docker system prune --filter "label!=io.kubernetes.container.name=istio-init"
docker system prune --filter "label!=io.kubernetes.container.name=istio-init"
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。