Kubernetes Ingress调试工具:kubectl ingress-nginx插件
文章目录
Kubernetes
官方的Ingress
控制器在0.25.0
以前是基于Nginx
,0.25.0
以后基于OpenResty
实现。它的原理就是controller
通过Watch
API Server 监测Ingress
资源对象的变化生成对应的Nginx
配置文件,然后reload重新加载配置生效,更详细的信息可以参见官方文档。
因为所有配置都放在nginx.conf
一个文件,当Ingress
多了以后,生成的配置文件会特别长,调试起来很不方便,特别是自0.14.0
以后,upstream
使用lua-resty-balancer
动态生成,调试就更加困难了,所以社区有人提了一个PR增加一个kubectl
插件ingress-nginx
来方便调试ingress-nginx
配置。
安装 ingress-nginx kubectl插件
执行kubectl krew install ingress-nginx
安装插件,需要依赖krew
。
关于krew
安装可以参见kubectl插件管理工具krew。
|
|
使用插件调试ingress-nginx配置
查看upstream
后端Real server信息
|
|
查看nginx
配置文件
|
|
完整参数
|
|
插件实现原理
ingress-nginx
插件其实是靠调用ingress-nginx-controller容器里集成的dbg
命令实现获取后端Real Server的,它的代码在这里。
kubectl ingress-nginx backends -n ingress-nginx
命令实际等价于执行了kubectl -n ingress-nginx exec nginx-ingress-controller-799dbf6fbd-w77mn -- /dbg backends all
|
|
同样也可以获取到upstream
的后端Real server信息。
注意
因为前边已经分析了插件其实是依靠nginx-ingress-controller
里的集成的dbg
命令实现的,所以要想正常使用插件,nginx-ingress-controller
的版本必须大于0.23.0
,否则执行命令时会提示下边错误。
|
|
参考
https://kubernetes.github.io/ingress-nginx/how-it-works/
https://kubernetes.github.io/ingress-nginx/kubectl-plugin/
https://github.com/kubernetes/ingress-nginx/blob/master/Changelog.md
https://github.com/kubernetes/ingress-nginx/releases/tag/nginx-0.23.0
https://github.com/kubernetes/ingress-nginx/pull/3686
文章作者 XniLe
上次更新 2023-10-10