原文链接:https://kubernetes.github.io/ingress-nginx/troubleshooting/
Ingress Controller 日志与事件
有很多方法可以对 ingress-controller 进行故障排除。以下列举些基本故障排除方法。
检查 Ingress 资源事件
1 | $ kubectl get ing -n <namespace-of-ingress-resource> |
检查 Ingress Controller 日志
1 | $ kubectl get pods -n <namespace-of-ingress-controller> |
检查 Nginx 配置
1 | $ kubectl get pods -n <namespace-of-ingress-controller> |
检查使用的服务是否存在
1 | $ kubectl get svc --all-namespaces |
日志调试
使用该标志 --v=XX
可以增加日志记录的级别。编辑 deployment 文件。
1 | $ kubectl get deploy -n <namespace-of-ingress-controller> |
--v=2
使用diff
显示nginx中配置更改的详细信息--v=3
显示有关服务,Ingress 规则,endpoint 更改的详细信息,并以JSON格式转储nginx配置--v=5
在调试模式下配置 NGINX
Kubernetes API Server 身份验证
身份验证过程涉及许多组件,第一步是缩小问题的根源,即是 服务身份验证
还是 kubeconfig文件
问题。
两个认证必须的过程:
服务认证
Ingress controller 会从 apiserver 获取信息。因此,需要身份验证,可以通过两种不同的方式来实现:
- 1、
Service Account
: 推荐这样做,因为无需进行任何配置。Ingress controller将使用系统提供的信息与API server进行通信。相关详情,请参见“Service Account”部分。 - 2、
Kubeconfig file
: 在某些 Kubernetes 环境中,Service Account 不可用。在这种情况下,需要手动配置。可以使用该--kubeconfig
标志启动 Ingress controller 二进制文件。该标志的值是指定如何连接到 API server 的文件路径。使用–kubeconfig 不需要声明--apiserver-host
。该文件的格式与 kubectl~/.kube/config
用于连接到API server的格式相同。有关详细信息,请参见“kubeconfig”部分。 - 3、使用
--apiserver-host
标志:使用--apiserver-host=http://localhost:8080
可以使用 kubectl-proxy 指定不安全的 API server 或访问远程kubernetes集群。请不要在生产中使用这种方法。
在下图中,您可以看到所有选项的完整身份验证流程,从左下方开始。
Service Account
如果使用 service account 连接 API server,则 Dashboard 需要文件 /var/run/secrets/kubernetes.io/serviceaccount/token
存在。它提供了使用 API server 进行身份验证所需的 secret token。
使用以下命令进行验证:
1 | # start a container that contains curl |
如果 token 不起作用,可能有两个原因:
- 1、token 无效。找到 secret 名称,
kubectl get secrets | grep service-account
然后删除它kubectl delete secret <name>
。secret 会自动重新创建。 - 2、您有一个非标准的Kubernetes安装,并且可能不存在包含 token 的文件。API server 将挂载包含此文件的卷,但前提是将API server 配置为使用 ServiceAccount 准入控制器。如果遇到此错误,请确认您的 API server 正在使用 ServiceAccount准入控制器。如果要手动配置 API server,则可以使用
--admission-control
参数进行设置。请注意,您也应该还使用其他准入控制器。在配置此选项之前,您应该阅读有关准入控制器的信息。
更多信息:
- 用户指南:Service Accounts
- 群集管理员指南:管理服务帐户
Kube-Config
如果要使用 kubeconfig文件 进行身份验证,请遵循部署过程,并将 --kubeconfig=/etc/kubernetes/kubeconfig.yaml
添加到部署的 args
中。
Gdb 在 Nginx 中使用
Gdb 可以与nginx一起使用来执行配置转储。方便查看正在使用的配置以及较旧的配置。
注意:以下内容基于 nginx 文档。
1、SSH 登陆工作机器
1 | $ ssh user@workerIP |
2、获取运行nginx的Docker容器
1 | $ docker ps | grep nginx-ingress-controller |
3、进入容器
1 | $ docker exec -it --user=0 --privileged d9e1d243156a bash |
4、确定 nginx 加载 –with-debug 模块
1 | $ nginx -V 2>&1 | grep -- '--with-debug' |
5、获取在容器上运行的进程的列表
1 | $ ps -ef |
6、将 gdb 添加到nginx主进程
1 | $ gdb -p 21 |
7、复制并粘贴以下内容:
1 | set $cd = ngx_cycle->config_dump |
8、通过按 CTRL + D 退出 GDB
9、打开 nginx_conf.txt
1 | $ cat nginx_conf.txt |
---本文结束感谢您的阅读。微信扫描二维码,关注我的公众号---
本文链接: https://www.yp14.cn/2020/04/21/Ingress-Nginx-故障排除/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!