原文链接: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 国际许可协议 进行许可。转载请注明出处!