GKE Ingress 找不到服务资源

GKE Ingress cannot find service resource

我有一个 GKE Ingress,根据 this 教程设置。它运行了几周,直到我想向 YAML 配置添加一个新规则。

显示以下错误并且不再创建入口:

Error syncing to GCP: error running backend syncing routine: googleapi: Error 404: The resource 'projects/<project_id>/zones/<zone>/networkEndpointGroups/<my-service>' was not found, notFound

我已将 yaml 简化为只有一个服务,但它仍然不起作用:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: basic-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: "web-static-ip"
    networking.gke.io/managed-certificates: "cluster-certificate"
    kubernetes.io/ingress.class: "gce"
spec:
  defaultBackend:
    service:
      name: webserver
      port:
        number: 3007

在上面的例子中,没有定义任何规则,只是默认的后端。添加规则不会改变错误;有时它只显示不同的服务。也不管用什么服务,所有的资源都找不到。

但是,Ingress 的仪表板没有显示有关服务的错误(所有健康检查似乎都通过了):

我现在已经挣扎了一段时间,尝试使用不同的服务,使用不同的规则,但我想我遗漏了一些东西。

  1. 哪个系统负责此资源?服务本身似乎工作正常并且健康检查通过,所以是 Ingress 端的错误吗?
  2. 查看 LoadBalancer dashboard 时,没有创建 LoadBalancer。难道也是因为Ingress创建失败?

我知道可能需要更多信息来帮助我,但我不确定要提供什么,因为感觉就像在黑暗中搜索。请告诉我!


-更新-

如下所示,'webserver' 服务看起来不错。

我已经多次删除并重新创建Ingress,但这没有效果。 kubectl describe Ingress basic-ingress 显示如下:

Name:             basic-ingress
Namespace:        production
Address:          
Default backend:  webserver:3007 (10.6.128.139:3007)
Rules:
  Host        Path  Backends
  ----        ----  --------
  *           *     webserver:3007 (10.6.128.139:3007)
Annotations:  ingress.gcp.kubernetes.io/pre-shared-cert: mcrt-065ca8b6-e85b-42ad-9113-6babe367a2d8
              kubernetes.io/ingress.class: gce
              kubernetes.io/ingress.global-static-ip-name: web-static-ip
              networking.gke.io/managed-certificates: cluster-certificate
Events:
  Type     Reason  Age                    From                     Message
  ----     ------  ----                   ----                     -------
  Normal   Sync    3m48s (x3 over 3m48s)  loadbalancer-controller  Scheduled for sync
  Warning  Sync    31s (x16 over 3m30s)   loadbalancer-controller  Error syncing to GCP: error running backend syncing routine: googleapi: Error 404: The resource 'projects/<project_id>/zones/<zone>/networkEndpointGroups/<my-service>' was not found, notFound

kubectl get ingress basic-ingress 显示:

NAME            CLASS    HOSTS   ADDRESS   PORTS   AGE
basic-ingress   <none>   *                 80      6m34s

在网络服务menu/Backend服务中,显示如下:

所有其他选项卡都是空的(因此看不到负载平衡器)。它说该服务没有被任何东西使用(见上图)。

我仍然不明白为什么它被破坏了,或者为什么下面修复了它。

我将 Ingress 简化为没有任何注释并应用了:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: basic-ingress
spec:
  defaultBackend:
    service:
      name: webserver
      port:
        number: 3007

这导致 Ingress 正常工作!在此之后,我添加了 networking.gke.io/managed-certificates: "cluster-certificate" 注释,它仍然有效。最后,我添加了 kubernetes.io/ingress.global-static-ip-name: "web-static-ip"。 我的开发网站又能用了。

不知何故,似乎出了点问题,简单地删除并重新应用并没有解决问题。应用一个非常简单的 Ingress 确实修复了它。