流量:Internet → Ingress 控制器规则(根据你的 Ingress YAML)→ Service → Pods

调试流程:Pods → Service → Ingress → Ingress controller → Internet

检查 Deployment & Pods

  1. 确保 Pod 已启动并运行(Pod 的“Status”为“Running”)。 如果没有,请检查Deployment/Pod 资源事件和log日志以解决问题。
  2. 如果您使用的是 HTTP GET livenessProbe,请确保您的 Service 和 Ingress 已预先部署。
$ kubectl get deployment -n # logs of deployment
$ kubectl logs deployment/ -n # follow logs of deployment, ctrl+c to quit
$ kubectl logs -f deployment/ -n # check "Events" at bottom of the output
$ kubectl describe deployment  -n
$ kubectl get pods -n $ kubectl logs pod/ -n $ kubectl describe pod  -o wide -n

检查端口映射

Ingress

Ingress 可以配置为提供服务外部可访问的 URL、负载平衡流量、终止 SSL / TLS 并提供基于名称的虚拟主机。 Ingress 控制器负责实现 Ingress,通常使用负载均衡器,但它也可以配置边缘路由器或其他前端来帮助处理流量。

Ingress 不会暴露任意端口或协议。 向 Internet 公开 HTTP 和 HTTPS 以外的服务通常使用 Service.Type=NodePort 或 Service.Type=LoadBalancer 类型的服务。

检查 Service

  1. 检查 Service 中的“Endpoints”字段,该字段应与 Pod 的“IP”匹配。
  2. 如果您使用 GKE、AKS…等公共云,您可以将 Service Types 修改为 LoadBalancer 从而不经过ingress对外暴漏Service 。 如果能公网成功访问,这意味着您的 Pod 和服务正常工作,那么问题是由其他人造成的。
$ kubectl get service -n $ kubectl describe service  -n

检查 the Ingress & Ingress Controller 日志和资源时间

Ingress Controllers

为了使 Ingress 资源正常工作,集群必须运行一个入口控制器。

与作为 kube-controller-manager 二进制文件的一部分运行的其他类型的控制器不同,Ingress 控制器不会通过 GKE、AKS 等公共云中的集群自动启动。您需要选择最适合您的集群的入口控制器。

AKS 中的 Ingress Controller 是 AKS Application Gateway Ingress Controller,下面是 ingress-appgw-deployment。 入口控制器作为 AKS 群集中的 pod 运行。 它使用 Kubernetes Ingress 资源并将它们转换为 Azure 应用程序网关配置,该配置允许网关对 Kubernetes pod 的流量进行负载平衡。

  1. 检查您的 Ingress 是否有任何事件或错误日志
$ kubectl get ingress -n <namespace>
$ kubectl describe ingress <name-of-ingress> -n <namespace>
  1. 检查您的Ingress Controller 配置,看看它的规则是否与您刚刚应用的入口匹配。
λ kubectl get deployment  -n kube-system
NAME                       READY   UP-TO-DATE   AVAILABLE   AGE
ingress-appgw-deployment   1/1     1            1           48d
...
$ kubectl get pods -n kube-system
NAME                                        READY   STATUS    RESTARTS   AGE
azure-cni-networkmonitor-2fmfk              1/1     Running   0          7d5h
...
azure-ip-masq-agent-6k4rm                   1/1     Running   0          3d5h
...
coredns-84d976c568-pjt8q                    1/1     Running   1          86d
...
ingress-appgw-deployment-7b8b687b46-scvs7   1/1     Running   315        3d5h
kube-proxy-4c6qw                            1/1     Running   0          7d5h
...
metrics-server-569f6547dd-j2wjz             1/1     Running   5          86d
...
$ kubectl describe pod ingress-appgw-deployment-7b8b687b46-scvs7 -n kube-system

最后找出问题是由 Ingress 控制器在更新 Ingress YAML 或 Pod 服务端点(包括 livenessProbe)时无法将 Ingress YAML 转换为 Azure 应用程序网关配置引起的。

$ kubectl logs -n kube-system ingress-appgw-deployment-7b8b687b46-scvs7 | grep --color=always -i error
E0110 03:19:02.123462       1 requestroutingrules.go:386] A path-rule with path '/merchant/*' already exists in config for BackendPool '/subscriptions/49fc9d19-f517-4ca5-a93e-76ed0fbd0ab1/resourceGroups/xxx/providers/Microsoft.Network/applicationGateways/aks-gw/backendAddressPools/defaultaddresspool'. Duplicate path-rule with BackendPool '/subscriptions/49fc9d19-f517-4ca5-a93e-76ed0fbd0ab1/resourceGroups/xxx/providers/Microsoft.Network/applicationGateways/aks-gw/backendAddressPools/pool-payment-payment-svc-80-bp-80' will not be applied

重启 Ingress Controller

$ kubectl rollout restart deployment <your-ingress-controller-deployment>

Application Gateway 失败原因

可能导致 Application Gateway 无法监控和应用 Ingress 配置的原因。

  1. 使用没有包含 TLS 私钥和证书的 Secret 的 HTTPS。 如果您使用 let’s encrypt 自动生成 tls.crt 和 tls.key 类型为 kubernates.io/tls 的机密文件,请确保它没有被您的 AKS 防火墙阻止,这将导致错误类型的 Secret(Opaque )。
apiVersion: v1
kind: Secret
metadata:name: testsecret-tlsnamespace: default
data:tls.crt: base64 encoded certtls.key: base64 encoded key
type: kubernetes.io/tls
  1. 重定向问题

Ingress gives 502 error
注意到应用程序必须在“/”处返回 200 状态码。 如果您的应用程序返回 302(重定向到登录),这将导致运行状况失败。 当健康检查失败时,入口资源返回502。

  1. 后端路径规则冲突。

如果您在 Ingress 中指定 backend-path-prefix,请确保它不会与您的后端资源 Deployment livenessProbe 路径前缀冲突。

Deployment

...       livenessProbe:httpGet:path: /payment_resource/healthcheck.jspport: 8080initialDelaySeconds: 180periodSeconds: 10timeoutSeconds: 3failureThreshold: 3successThreshold: 1

Ingress

kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:name: ingress-paymentnamespace: paymentannotations:appgw.ingress.kubernetes.io/backend-path-prefix: /payment_resource/appgw.ingress.kubernetes.io/connection-draining: 'true'appgw.ingress.kubernetes.io/connection-draining-timeout: '30'appgw.ingress.kubernetes.io/cookie-based-affinity: 'true'appgw.ingress.kubernetes.io/ssl-redirect: 'true'cert-manager.io/cluster-issuer: letsencrypt-productionkubernetes.io/ingress.allow-http: 'false'kubernetes.io/ingress.class: azure/application-gateway
spec:tls:- hosts:- xxx.xxx.xxx.azure.comsecretName: aks-ingress-certrules:- host: xxx.xxx.xxx.azure.comhttp:paths:- path: /payment/*pathType: ImplementationSpecificbackend:service:name: payment-svcport:number: 80

访问 https://xxx.xxx.xxx.azure.com/payment/healthcheck.jsp ,它将重定向到后端资源端点https://xxx.xxx.xxx.azure.com/payment_resource/healthcheck.jsp 。

Kubernetes Ingress and Services 故障排查相关推荐

  1. 容器编排技术 -- Kubernetes Ingress解析

    容器编排技术 -- Kubernetes Ingress解析 前言 这是kubernete官方文档中Ingress Resource的翻译,因为最近工作中用到,文章也不长,也很好理解,索性翻译一下,也 ...

  2. kuberntes集群不能解析service ip故障排查记录

    一.故障描述 涉及kubernetes版本: 1.20 kuberntes集群发布服务后,不能正常解析service ip,无法使用telnet测试服务ip 在kubernetes命名空间里部署red ...

  3. Kubernetes Ingress(和网络)的Why以及How

    客座文章最初由 Saaras 团队在Saaras 博客[1]上发表 在公有云或私有云上无法访问 Kubernetes 中运行的服务.这就是 Kubernetes 在设计时考虑到服务安全性的方式. 集群 ...

  4. Kubernetes Ingress with AWS ALB Ingress Controller

    Kubernetes Ingress with AWS ALB Ingress Controller by Nishi Davidson | on 20 NOV 2018 | in Amazon El ...

  5. mDNS故障排查(译)

    WLC上mDNS网关的理解及排查 第一部分:介绍 这篇文档描述了Bonjour协议在WLC上的操作,该文档旨在协助工程师理解该工作流量的原理以及提供故障排查的指导. 第二部分:需求和前提 知识需求: ...

  6. 宅家学习,如何进行Kubernetes Ingress控制器的技术选型?

    导语:在Kubernetes的实践.部署中,为了解决 Pod 迁移.Node Pod 端口.域名动态分配等问题,需要开发人员选择合适的 Ingress 解决方案.面对市场上众多Ingress产品,开发 ...

  7. MySQL性能优化、故障排查及最佳实践秘籍,阿里云数据库专家玄惭的“武功”全记录...

    为什么80%的码农都做不了架构师?>>>    文章简介 玄惭,真名罗龙九,阿里云DBA专家,负责阿里云RDS线上稳定以及专家服务团队.他经历过阿里历年双11实战考验,积累了7年对阿 ...

  8. 桌面虚拟化XenDesktop常见故障排查宝典

    XD故障排查宝典(1) XenServer安装时注意一定配置正确的时区和时间. 建议使用NTP来同步时间. 如果时区不对,或者时间有问题,会使虚机时间不对,影响VDA注册等一系列问题. 使用XenSe ...

  9. 线上应用故障排查之二:高内存占用

    为什么80%的码农都做不了架构师?>>>    搞Java开发的,经常会碰到下面两种异常: 1.java.lang.OutOfMemoryError: PermGen space 2 ...

最新文章

  1. 《微软的软件测试之道》(How We Test Software at Microsoft)
  2. 马尔科夫链和马尔科夫随机场
  3. Mysql:mysql函数GROUP_CONCAT()
  4. SparkSQL之External Data
  5. UNIX(进程间通信):05---守护进程
  6. oracle 时间按季度,Oracle按日期季度查询
  7. 所有XP_SP2服务的详细介绍
  8. 程序员的英语水平要达到什么程度才行?
  9. 12.这就是搜索引擎:核心技术详解 --- 搜索引擎发展趋势
  10. LabVIEW参考资料汇总
  11. 程序猿为什么逃离北上广?
  12. CANopen协议中文文档
  13. MySQL第六讲 MySQL分库分表方案
  14. 一本通题解——1438:灯泡
  15. 美图公司FinOps探索的那些事儿~
  16. 快传号视频批量上传,禁止转载!
  17. [墨者学院] Windows硬盘文件分析取证(新建的用户名)
  18. 如何用python计算excel两行之间的差值_excel表格求两列数据差值-怎样在EXCEL表格中求两列数的差?...
  19. 游戏——Flappy Bird
  20. windows 完成端口

热门文章

  1. ASP.NET + adminLTE (一)
  2. mac宽带连接找不到pppoe服务器,Mac如何建立PPPoE网络连接-Mac建立PPPoE网络连接教程 - 河东软件园...
  3. 【转载】各种屏幕元素显示
  4. bzoj3165 segment 超哥线段树
  5. iabp使用流程,bpa流程开发
  6. bzoj1038【ZJOI2008】瞭望塔
  7. JavaScript call,apply,bind详解及实现
  8. 摩拜共享单车技术含量
  9. 彻底搞懂计算机计算补码,就像接近宇宙的真理
  10. ngrok配置信息_ngrok配置https