GKE Ingress のトラブルシューティング


このページでは、Google Kubernetes Engine(GKE)の Ingress に関連する問題を解決する方法について説明します。

さらにサポートを必要とされる場合は、Cloud カスタマーケアにお問い合わせください。

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 アドレスのアノテーションが正しくない

症状

静的 IP アドレスを使用するように外部 Ingress を構成すると、次のエラーが表示されることがあります。

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 アドレスはすでに使用されています

症状

内部または外部の Ingress リソースをプロビジョニングするために静的 IP アドレスを指定するときに、次のエラーが表示されることがあります。

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

解決策

プロジェクトのデフォルトのネットワーク階層をプレミアムに構成します。