排查 GKE Ingress 问题


本页介绍了如何解决与 Google Kubernetes Engine (GKE) 中的 Ingress 相关的问题。

如果您需要其他帮助,请与 Cloud Customer Care 联系。

Ingress 类的注解不正确

症状

创建 Ingress 时,您可能会看到以下错误:

Missing one or more resources. If resource creation takes longer than expected, you might have an invalid configuration.

潜在原因

创建 Ingress 时,您可能在清单中错误地配置了 Ingress 类。

解决方法

指定 Ingress 类必须使用 kubernetes.io/ingress.class 注解。您不能使用 spec.ingressClassName 指定 GKE Ingress。

  • 如需部署内部应用负载平衡器,请使用 kubernetes.io/ingress.class: gce-internal 注解。
  • 如需部署外部应用负载平衡器,请使用 kubernetes.io/ingress.class: gce 注解。

静态 IP 地址的注解不正确

症状

将外部 Ingress 配置为使用静态 IP 地址时,您可能会看到以下错误:

Error syncing to GCP: error running load balancer syncing routine: loadbalancer <Name of load balancer> does not exist: the given static IP name <Static IP> doesn't translate to an existing static IP.

潜在原因

  • 您在部署 Ingress 之前未创建静态外部 IP 地址。
  • 您使用的注解不适用于您的负载平衡器类型。

解决方法

如果您要配置外部 Ingress,请执行以下操作:

  • 在部署 Ingress 之前,请预留静态外部 IP 地址
  • 在 Ingress 资源上使用注解 kubernetes.io/ingress.global-static-ip-name

如果您要配置内部 Ingress,请执行以下操作:

  • 在部署 Ingress 之前,预留区域性静态内部 IP 地址。
  • 在 Ingress 资源上使用注解 kubernetes.io/ingress.regional-static-ip-name

静态 IP 地址已被使用

症状

当您指定静态 IP 地址来预配内部或外部 Ingress 资源时,可能会看到以下错误:

Error syncing to GCP: error running load balancer syncing
routine: loadbalancer <LB name> does not exist:
googleapi: Error 409: IP_IN_USE_BY_ANOTHER_RESOURCE - IP ''<IP address>'' is already being used by another resource.

潜在原因

静态 IP 地址已被其他资源使用。

停用 HTTP 并使用 Google 管理的证书时出错

症状

如果您在配置由 Google 管理的 SSL 证书并在 Ingress 上停用 HTTP 流量,则会看到以下错误:

Error syncing to GCP: error running load balancer syncing
routine: loadbalancer <Load Balancer name> does not exist:
googleapi: Error 404: The resource ''projects/<Project>/global/sslPolicies/<Policy name>' was not found, notFound

潜在原因

配置 Ingress 时,您不能同时使用以下注解:

  • networking.gke.io/managed-certificates(用于将 Google 管理的证书与 Ingress 相关联)
  • kubernetes.io/ingress.allow-http: false(用于停用 HTTP 流量)

解决方法

只有在外部应用负载平衡器完全编程后,您才能停用 HTTP 流量。您可以更新 Ingress,并将注解 kubernetes.io/ingress.allow-http: false 添加到清单中。

内部 Ingress 缺少代理专用子网

症状

为内部应用负载平衡器部署 Ingress 时,您可能会看到以下错误:

Error syncing to GCP: error running load balancer syncing routine:
loadbalancer <LB name> does not exist: googleapi: Error 400: Invalid value for field 'resource.target': 'https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/<Region>/targetHttpsProxies/<Target proxy>'.
An active proxy-only subnetwork is required in the same region and VPC as
the forwarding rule.

潜在原因

您在创建 Ingress 资源之前未创建代理专用子网。内部应用负载平衡器需要代理专用子网。

解决方法

创建代理专用子网,然后再部署内部 Ingress。

SSL 证书密钥过大

症状

如果负载均衡器的 SSL 证书密钥大小过大,您可能会看到以下错误:

Error syncing to GCP: error running load balancer syncing routine: loadbalancer gky76k70-load-test-trillian-api-ingress-fliismmb does not exist: Cert creation failures - k8s2-cr-gky76k70-znz6o1pfu3tfrguy-f9be3a4abbe573f7 Error:googleapi: Error 400: The SSL key is too large., sslCertificateKeyTooLarge

潜在原因

Google Cloud 对 SSL 证书密钥的长度限制为 2,048 位。

解决方法

将 SSL 证书密钥的大小缩减到 2,048 位或更小。

在标准层级中创建 Ingress 时出错

症状

如果您在将项目默认网络层级设置为“标准”的项目中部署 Ingress,系统会显示以下错误消息:

Error syncing to GCP: error running load balancer syncing routine: load balancer <LB Name> does not exist: googleapi: Error 400: STANDARD network tier (the project''s default network tier) is not supported: STANDARD network tier is not supported for global forwarding rule., badRequest

解决方法

将项目的默认网络层级配置为“优质”。