排错
Ingress-Controller日志和事件
有很多方法可以对 ingress controller进行故障排除。以下是获取更多信息的基本故障排除方法。
检查入口资源事件:
$ kubectl get ing -n <namespace-of-ingress-resource>
NAME HOSTS ADDRESS PORTS AGE
cafe-ingress cafe.com 10.0.2.15 80 25s
$ kubectl describe ing <ingress-resource-name> -n <namespace-of-ingress-resource>
Name: cafe-ingress
Namespace: default
Address: 10.0.2.15
Default backend: default-http-backend:80 (172.17.0.5:8080)
Rules:
Host Path Backends
---- ---- --------
cafe.com
/tea tea-svc:80 (<none>)
/coffee coffee-svc:80 (<none>)
Annotations:
kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{},"name":"cafe-ingress","namespace":"default","selfLink":"/apis/networking/v1beta1/namespaces/default/ingresses/cafe-ingress"},"spec":{"rules":[{"host":"cafe.com","http":{"paths":[{"backend":{"serviceName":"tea-svc","servicePort":80},"path":"/tea"},{"backend":{"serviceName":"coffee-svc","servicePort":80},"path":"/coffee"}]}}]},"status":{"loadBalancer":{"ingress":[{"ip":"169.48.142.110"}]}}}
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal CREATE 1m nginx-ingress-controller Ingress default/cafe-ingress
Normal UPDATE 58s nginx-ingress-controller Ingress default/cafe-ingress检查 ingress controller日志:
检查Nginx配置:
检查使用的服务是否存在
调试日志
使用标志 --v=XX 可以增加日志记录级别。这是通过编辑deployment来执行的。
--v=2显示使用diff有关nginx中配置更改的详细信息--v=3显示有关服务,入口规则,端点更改的详细信息,并以JSON格式转储nginx配置--v=5在调试模式配置NGINX
对Kubernetes API服务器的身份验证
身份验证过程涉及许多组件,第一步是缩小问题的根源,即是服务身份验证问题还是kubeconfig文件问题。
两种认证都必须有效:
服务认证n
Ingress控制器需要来自apiserver的信息。因此,需要身份验证,可以通过两种不同的方式来实现:
Service Account: 建议这样做,因为无需进行任何配置。 ingress controller将使用系统提供的信息与API服务器进行通信。有关详情,请参见"服务帐户"部分
Kubeconfig file: 在某些Kubernetes环境中,服务帐户不可用. 在这种情况下,需要手动配置. 可以在启动Ingress控制器二进制文件时使用
--kubeconfig参数. 标志的值是文件的路径,该文件指定如何连接到API服务器. 使用--kubeconfig不需要--apiserver-host参数. 该文件的格式与~/.kube/config相同,kubectl用于连接到API服务器。有关详细信息,请参见'kubeconfig'部分Using the flag
--apiserver-host: 使用参数--apiserver-host=http://localhost:8080可以使用kubectl代理指定不安全的API服务器或访问远程kubernetes集群。请不要在生产中使用这种方法
在下图中,您可以看到带有所有选项的完整身份验证流程,从左下角的浏览器开始
Service Account
如果使用服务帐户连接到API服务器,则仪表板希望文件/var/run/secrets/kubernetes.io/serviceaccount/token存在。 它提供了使用API服务器进行身份验证所需的秘密令牌。
使用以下命令进行验证:
如果不起作用,可能有两个原因:
令牌的内容无效。使用
kubectl get secrets | grep service-account并使用kubectl delete secret <name>删除它. 它将自动重新创建.您具有非标准的Kubernetes安装,并且包含令牌的文件可能不存在。 API服务器将安装包含该文件的 volume,但前提是将API服务器配置为使用ServiceAccount准入控制器。 如果遇到此错误,请验证您的API服务器正在使用ServiceAccount准入控制器。 如果要手动配置API服务器,则可以使用
--admission-control参数进行设置请注意,您还应该使用其他准入控制器。在配置此选项之前,您应该阅读有关准入控制器的信息。
更多信息:
Kube-Config
如果要使用kubeconfig文件进行身份验证, 请遵循 部署过程 并将参数 --kubeconfig=/etc/kubernetes/kubeconfig.yaml 添加到部署的args部分.
在Nginx中使用GDB
Gdb 可以与nginx一起使用来执行配置转储。这使我们可以查看正在使用的配置以及较旧的配置
注意:以下内容基于nginx 文档.
SSH进入worker
获取运行nginx的Docker容器
进入容器执行
确保nginx使用
--with-debug参数运行
获取容器上运行的进程列表
将gdb附加到nginx主进程
复制并粘贴以下内容:
通过按CTRL + D退出GDB
打开 nginx_conf.txt
Last updated
Was this helpful?