すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:ALB Ingress に関するよくある質問

最終更新日:Sep 10, 2025

このトピックでは、ALB Ingress についてよく寄せられる質問をリストしています。

目次

カテゴリ

リンク

一般的な質問

使用時の異常

パフォーマンスの最適化

一般的な質問

ALB Ingress と Nginx Ingress の違いは何ですか?

ALB Ingress は、Nginx Ingress よりもいくつかの利点を提供します。自分で管理する必要がある Nginx Ingress とは異なり、ALB Ingress は Alibaba Cloud Application Load Balancer (ALB) に基づいています。ALB はフルマネージドの Alibaba Cloud サービスであり、運用と保守の必要性を排除します。強力な Ingress トラフィック管理と高性能ゲートウェイサービスを提供します。Nginx Ingress、ALB Ingress、および MSE Ingress の詳細な比較については、「Nginx Ingress、ALB Ingress、および MSE Ingress の比較」をご参照ください。

ALB Ingress はパブリックネットワークアクセスと内部ネットワークアクセスの両方をサポートしていますか?

症状

一部のビジネスシナリオでは、インターネットと内部ネットワークの両方から ALB Ingress にアクセスする必要がある場合があります。

解決策

はい、サポートしています。インターネットと内部ネットワークの両方から ALB Ingress にアクセスするには、パブリック向けの ALB インスタンスを作成します。このインスタンスは、各ゾーンにパブリック エラスティック IP アドレス (EIP) を作成し、ALB インスタンスがインターネットと通信できるようにします。また、インスタンスは内部向けの仮想 IP アドレス (VIP) も提供します。内部向けの VIP を使用して、内部ネットワークから ALB インスタンスにアクセスできます。内部ネットワークからのみ ALB Ingress にアクセスする必要がある場合は、内部向けの ALB インスタンスを作成できます。

ALB Ingress が固定 ALB ドメイン名を使用するようにするにはどうすればよいですか?

AlbConfig を使用して ALB インスタンスを作成した後、ALB Ingress は IngressClass を介して AlbConfig を参照し、対応する ALB インスタンスのドメイン名を使用します。ALB Ingress に関連付けられた IngressClass と AlbConfig が変更されない限り、ドメイン名は変更されません。

クラスタ内で ALB Ingress Controller ポッドが見つからないのはなぜですか?

症状

クラスタ内で ALB Ingress Controller ポッドを検索しても、kube-system 名前空間に関連するポッドが見つかりません。

解決策

ACK 専用クラスターでのみ、kube-system 名前空間で ALB Ingress Controller ポッドを見つけることができます。ACK 標準クラスター、ACK Pro マネージドクラスター、および Serverless Kubernetes クラスターの場合、ALB Ingress Controller コンポーネントは Alibaba Cloud によって管理されます。したがって、クラスタ内でポッドを見つけることはできません。ACK 専用クラスターを ACK Pro マネージドクラスターにアップグレードする方法の詳細については、「ACK 専用クラスターを ACK Pro クラスターにホットマイグレーションする」をご参照ください。

IP ベースのサーバーをマウントするにはどうすればよいですか?

症状

バックエンドポッドを IP ベースのサーバーとして ALB インスタンスにマウントする必要があります。ただし、デフォルトの構成では、サービスは IP ベースのサーバーグループを自動的に作成できません。これにより、トラフィックがバックエンドサービスに配信されなくなります。

解決策

サービスのアノテーションに alb.ingress.kubernetes.io/server-group-type: Ip アノテーションを追加できます。これにより、サービスの IP ベースのサーバーグループが作成され、IP アドレスによってバックエンドポッドを ALB インスタンスに登録できます。

説明
  • サーバーグループタイプは、作成後に変更することはできません。Flannel ネットワークモードでは、ClusterIP と NodePort の間で切り替えるなどしてサービスタイプを変更すると、バックエンドのアタッチメントタイプが IP と ECS の間で切り替わります。これにより、バックエンドが元のサーバーグループに追加されなくなります。したがって、サービスタイプを直接変更することはできません。

  • サーバーグループタイプを変更するには、新しいサービスを作成し、server-group-type: Ip アノテーションを指定します。これにより、既存のサーバーグループに接続されているノードへの影響を回避できます。

  • server-group-type アノテーションを設定した後は、削除しないでください。アノテーションを削除すると、サービスのサーバーグループタイプに不整合が生じます。これにより、調整が失敗し、バックエンドノードがサーバーグループに追加されなくなります。

apiVersion: v1
kind: Service
metadata:
  annotations:
    alb.ingress.kubernetes.io/server-group-type: Ip
  name: tea-svc
spec:
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
  selector:
    app: tea
  type: ClusterIP

ACK マネージドクラスターの作成時に ALB Ingress を選択した場合、ALB インスタンスは自動的に作成されますか?

いいえ、作成されません。ACK マネージドクラスターの作成時に ALB Ingress を選択した場合、ALB Ingress Controller のみがインストールされます。ALB インスタンスは自動的に作成されません。

ALB バックエンドリスナーは、デフォルトで kube-system-fake-svc-80 サーバーグループにリクエストを転送します。このサーバーグループの目的は何ですか?

リスナーを作成するときは、デフォルトの転送ルールを指定する必要があります。転送ルールは、サーバーグループにのみリクエストを転送できます。したがって、kube-system-fake-svc-80 サーバーグループは、リスナーを有効にするために作成されます。このサーバーグループはビジネス処理には関与しておらず、削除しないでください。

トラブルシューティング

ALB Ingress ルールが有効にならないのはなぜですか?

症状

ALB Ingress ルールを作成した後、ルーティングルールが期待どおりに有効になりません。リクエストは対応するバックエンドサービスに転送されません。

原因

ALB インスタンスは、ルーティングルールをシリアル方式で維持します。これは、複数の ALB Ingress が同じ ALB インスタンスを使用する場合、1 つの ALB Ingress の構成エラーにより、他の ALB Ingress への変更が有効にならないことを意味します。

解決策

作成した ALB Ingress が有効にならない場合は、以前に作成した ALB Ingress にエラーがある可能性があります。新しい ALB Ingress を有効にする前に、障害のある ALB Ingress を修正する必要があります。

ALB Ingress に加えた変更が有効にならないが、異常なアクティビティが報告されない場合はどうすればよいですか?

症状

ALB Ingress の構成を変更したり、AlbConfig に関連付けたりした後、変更が有効になりませんが、異常なアクティビティは報告されません。

解決策

AlbConfig に関連する調整イベントが実行されないか、変更イベントが処理されない場合、IngressClass と AlbConfig の間のバインディングが正しくない可能性があります。IngressClass で指定された parameters パラメータが正しいかどうかを確認してください。詳細については、「IngressClass を使用して AlbConfig を Ingress に関連付ける」をご参照ください。

ALB Ingress 転送ルールが作成直後に削除され、503 状態コードが返される場合はどうすればよいですか?

症状

ALB Ingress 転送ルールは、作成直後に削除されます。その結果、サービスへのリクエストは 503 状態コードを返し、トラフィックは配信されません。

解決策

転送ルールに対応するすべての Ingress に canary:true アノテーションが追加されているかどうかを確認します。カナリアリリースでは、トラフィックをルーティングするためにプライマリバージョンが必要です。したがって、プライマリバージョンの Ingress に canary:true アノテーションを追加する必要はありません。ALB Ingress を使用してサービスの段階的リリースを実装する方法の詳細については、「ALB Ingress を使用した段階的リリースの実装」をご参照ください。

カナリアリリース方式は 2 つの Ingress のみをサポートしており、制限があります。カスタム転送ルールを使用することで、より柔軟なトラフィックルーティングソリューションを実現できます。詳細については、「ALB Ingress の転送ルールをカスタマイズする」をご参照ください。

AlbConfig リソースが「listener is not exist in alb, port: xxx」エラーを報告するのはなぜですか?

症状

ポート 80 以外のポートにアクセスしようとすると、リクエストが接続に失敗します。AlbConfig リソースが「listener is not exist in alb, port: xxx」エラーを報告します。このエラーは、関連するポートがリッスンされておらず、トラフィックが転送されていないことを示しています。

解決策

デフォルトでは、AlbConfig にはポート 80 のリスナーのみが含まれています。他のポートをリッスンするには、それらのポートのリスナー構成を AlbConfig に追加する必要があります。詳細については、「リスナーを作成する」をご参照ください。

HTTP リスナーと HTTPS リスナーを AlbConfig で構成した後、HTTP リスナーポートと HTTPS リスナーポートにアクセスできないのはなぜですか。

症状

AlbConfig で HTTP リスナーポートと HTTPS リスナーポートを構成しました。しかし、サービスにアクセスしようとすると、HTTP ポートも HTTPS ポートもトラフィックを listen または転送していません。これらのポートを介してサービスにアクセスできません。

解決策

Ingress リソースのアノテーションに alb.ingress.kubernetes.io/listen-ports アノテーションを追加したことを確認します。このアノテーションは、ALB Ingress が HTTP(80)ポートと HTTPS(443)ポートの両方で listen することを指定します。次に例を示します。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: https-ingress
  annotations:
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS": 443}]' # 複数のリスナーを使用する場合に ALB Ingress が正しく機能するように、このアノテーションを追加します。
spec:
  #...

ALB コンソールで手動で行った構成の変更が失われたり、追加したルールが削除されたり、アクセスログが無効になったりする理由

症状

ALB コンソールで手動で構成を変更した後、変更が失われたり、自動的に削除されたりするのに気付きました。アクセスログ機能も無効になっています。

解決策

ALB Ingress の構成を変更するには、クラスタ内のリソースを変更する必要があります。対応する構成は、クラスタの API Server に ALB Ingress または AlbConfig として保存されます。 ALB コンソールで手動で行った変更は、API Server 内のリソースは変更しません。したがって、変更は有効になりません。クラスタで調整操作がトリガーされると、Ingress または AlbConfig の構成がコンソールの構成を上書きし、手動で行った変更が失われます。対応する構成を変更するには、ALB Ingress または AlbConfig を変更できます。

調整中に「指定されたパラメータ配列に含まれるアイテムが多すぎます。最大 15 アイテムです。証明書が無効です」というエラーが表示されるのはなぜですか。

症状

調整中に、「指定されたパラメータ配列に含まれるアイテムが多すぎます。最大 15 アイテムです。証明書が無効です」というエラーメッセージが表示されます。これにより、ALB Ingress が必要な証明書に関連付けられなくなります。

解決策

バージョン v2.11.0-aliyun.1 以降、ALB Ingress Controller コンポーネントは証明書のページングをサポートしています。調整中に「指定されたパラメータ配列に含まれるアイテムが多すぎます。最大 15 アイテムです。証明書が無効です」というエラーが表示された場合は、ALB Ingress Controller のバージョンが証明書のページングをサポートしておらず、1 回の調整で 15 を超える証明書を関連付けようとしていることを意味します。この問題を解決するには、ALB Ingress Controller コンポーネントを最新バージョンに [スペックアップ] します。コンポーネントのバージョンについては、「ALB Ingress Controller」をご参照ください。コンポーネントを [スペックアップ] する方法については、「ALB Ingress Controller コンポーネントの管理」をご参照ください。

コンソールで ALB インスタンスを構成した後、kubectl apply コマンドを実行して AlbConfig のアクセス制御リスト(ACL)構成を更新すると、一部のリスナーが削除されるのはなぜですか。

症状

コンソールで ALB インスタンスを作成および構成した後、kubectl apply コマンドを実行して、AlbConfig のアクセス制御リスト(ACL)構成を更新します。その結果、一部のリスナーが予期せず削除され、関連するポートまたはルールが無効になります。

解決策

説明

kubectl edit コマンドを使用して、リソース構成を直接更新できます。kubectl apply コマンドを使用する必要がある場合は、kubectl diff コマンドを実行して、kubectl apply コマンドを実行する前に変更をプレビューできます。変更が期待どおりであることを確認します。その後、kubectl apply コマンドを実行して、変更を Kubernetes クラスタに適用できます。

kubectl apply コマンドは AlbConfig を上書きします。したがって、kubectl apply コマンドを使用して AlbConfig の ACL 構成を更新する場合は、YAML ファイルに完全なリスナー構成が含まれていることを確認する必要があります。これにより、リストされていないリスナーが削除されるのを防ぎます。

kubectl apply コマンドを実行した後にリスナーが削除されたことが判明した場合は、次の手順でリスナーを [回復] できます。

  1. YAML ファイルにリスナーの完全なリストが指定されているかどうかを確認します。

    削除されたリスナーがリストにない場合は、次の手順に進みます。それ以外の場合は、操作は不要です。

  2. 次のコマンドを実行して AlbConfig を編集し、削除されたリスナー構成を追加します。

    kubectl -n <namespace> edit AlbConfig <albconfig-name> # <namespace> と <albconfig-name> を AlbConfig リソースの名前空間に置き換えます。

パフォーマンスの最適化

サービスのポッドスケーリングにおけるサーバー調整時間の最適化

問題

Kubernetes 環境では、サービスに関連付けられたポッドがスケールインまたはスケールアウトすると、サーバーの調整プロセスに時間がかかる場合があります。この遅延は、弾性スケーリングのリアルタイムパフォーマンスに影響します。調整時間は、関連付けられた Ingress の数が増えるにつれて大幅に増加します。

解決策

サーバー調整の効率を向上させるには、次の最適化を適用できます。

  • Ingress の数を制限する: 1 つのサービスに 30 を超える Ingress をアタッチしないでください。

  • Ingress ルールをマージする: Ingress が多数ある場合は、複数のサービスを 1 つの Ingress にアタッチできます。次に、その Ingress リソース内で複数の転送ルールを定義して、サーバー調整のパフォーマンスを向上させることができます。

Flannel プラグインとローカルモードサービスを使用する場合にノードの重みを自動的に割り当てる

問題

Flannel ネットワークプラグインを使用し、ローカルモードでサービスを構成すると、トラフィックはノード間で均等に分散されません。この不均衡は、一部のノードで高負荷を引き起こし、トラフィックのバランスの取れた分散を妨げます。目標は、より効果的なトラフィック分散のために、各ノードのポッド数に基づいてノードに重みを自動的に割り当てることです。

解決策

説明

バージョン v2.13.1-aliyun.1 以降、ALB Ingress Controller はノードの重みの自動割り当てをサポートしています。この機能を使用するには、最新バージョンにスペックアップしてください。詳細については、「ALB Ingress Controller コンポーネントをスペックアップする」をご参照ください。

Flannel プラグインを使用するクラスタでは、サービスがローカルモードに設定されている場合、ノードの重みは次のように計算されます。次の図は、アプリケーションポッド (app=nginx) が 3 つの ECS インスタンスにデプロイされ、サービス A を介して公開されている例を示しています。

サービスのバックエンドポッドの総数

説明

ポッド数 <= 100

ALB Ingress Controller は、各ノードの重みをそのノードのポッド数に設定します。

たとえば、前の図では、3 つの ECS インスタンスに 1、2、3 個のポッドがあります。これらの ECS インスタンスの重みは、それぞれ 1、2、3 に設定されます。その後、トラフィックは 1:2:3 の比率でインスタンスに分散され、ポッド全体の負荷がよりバランスの取れたものになります。

ポッド数 > 100

ALB Ingress Controller は、ノードにデプロイされているポッドの総数の割合に基づいてノードの重みを計算します。

たとえば、前の図の 3 つの ECS インスタンスに 100、200、300 個のポッドがある場合、対応する ECS の重みは 16、33、50 に設定されます。その後、トラフィックは 16:33:50 の比率でこれらの ECS インスタンスに分散され、よりバランスの取れたポッド負荷分散が実現します。