Nginx-Ingress-Controller Snippets配置引起集群网络异常记录

前言
昨天尝试使用Nginx-Ingress-Controller snippets做502异常转发集群内部容器的服务,导致WordPress Web服务一直无法启动,具体表现为无法连接到同一namespace的WordPress数据库,日志提示对应域名无法解析:
wordpress 03:00:54.49 WARN ==> Hostname my-wordpress-mariadb could not be resolved, this could lead to connection issues
Snippets配置:
nginx.org/server-snippets: |
error_page 502 = @fallback;
location @fallback {
proxy_pass http://my-static-blog;
}
排查
1.POD排查,第一想到的是数据库服务启动失败了,服务域名没注册到集群DNS中,查看服务状态是running,服务日志也没有任何错误,排除! 2.网络排查, 2.1.查看网络服务相关pod启动正常,尝试在容器(kubectl run -i -t busybox --image=busybox --restart=Never)内ping同namespace下POD IP,ping不通,服务名也无法解析 2.2.从k8s控制节点ping容器IP,工作节点的不通,控制节点部署的POD可以通 2.3.怀疑是集群DNS出了问题,发现DNS一共有两个,都在控制节点上,手动删除一个,让它自动再部署到工作节点上(这里不太懂DNS工作机制只是做了一个尝试)。自动部署工作节点完成后WordPress Web也自动部署成功了,但是还是无法被正常访问,Ingress提示my-static-blog无法解析 3.Ingress修复 3.1.提示my-static-blog无法解析是因为在部署Ingress时my-static-blog服务还没有部署,也可能是部署还没注册到DNS。尝试手动删除Ingress后再安装,错误消失,提示找不到指定的secret 3.2.secret是SSL的证书,由cert-manager提供自动注册服务。由之前情况判断大概还是DNS的问题,导致cert-manager几个服务之间无法正常沟通,没有正常生成secret 3.3.尝试删除再部署Ingress几次后还是一样的问题,但是有时会出现my-static-blog无法解析的错误 3.4.考虑到使用集群service不太稳定,为my-static-blog serivce添加了Ingress并解析一个专用的域名static.wanderto.top,重新部署后所有问题消失 问题点2中所有异常也都恢复了 修改后:
nginx.org/server-snippets: |
error_page 502 = @fallback;
location @fallback {
proxy_pass http://static.wanderto.top
}
总结
Nginx-Ingress-Controller的配置正常应该只是影响到外部进来的流量,这次异常影响范围有点大,,所以有点没想到,而且my-static-blog能被正常解析后集群的问题依然存在,然而配置外部域名后立即全部恢复正常,snippets慎用!