You need to enable JavaScript to run this app.
导航

请求 Ingress 无响应,该如何处理?

最近更新时间2023.11.21 19:52:00

首次发布时间2023.11.21 19:52:00

问题现象

请求 Ingress 时无响应,无法访问后端服务。

解决方案

请求 Ingress 时,需要经过 Ingress、Service、Pod,逐个排查每个环节是否正常。排查步骤如下:

  1. 根据所用的 Ingress 名称,查看 Ingress 的转发规则。示例如下:
kubectl get ingress test-ingress -n default -oyaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress
  namespace: default
spec:
  ingressClassName: nginx
  rules:
  - host: test.com
    http:
      paths:
      - backend:
          service:
            name: test
            port:
              number: 3001
        path: /
        pathType: Prefix
status:
  loadBalancer: {}
  1. 排查后端 service 是否存在,由以上示例所示,请求将被 nginx 转发到 default 命名空间下,名称为 test 的 servcie,service 的端口号为 3001。若能够找到对应的 service,则表示 service 正常;若 service 不存在,则需要创建对应的 service。
kubectl get service test -n default
NAME       TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
test      ClusterIP   xxx.xxx.xxx.xx   <none>        443/TCP   1h
  1. 通过如下命令判断 service 对应的 endpoints 列表是否为空,若 endpoints 字段为空,说明该 service 后端没有挂载 Pod,则需要创建对应负载。
kubectl get ep test -n default
NAME       ENDPOINTS                                  AGE
platform   xxx.xxx.xxx.xxx:3001,xxx.xxx.xxx.xxx:3001   1h
  1. 排查主机上是否存在相同端口的监听,导致 nginx 无法监听指定的端口。