Application Load Balancer(ALB)Ingress を構成する場合は、ALB Ingress がバックエンド ポッドにトラフィックをルーティングできるように、クラスタ内に複数のリソースを作成する必要があります。このトピックでは、ALB Ingress を使用して外部サービスを提供するアプリケーションをデプロイする方法について説明します。
Flannel ネットワークプラグインを使用する場合、ALB Ingress ゲートウェイのバックエンド サービスは、NodePort または LoadBalancer タイプである必要があります。
AlbConfig オブジェクト、名前空間、Ingress、およびサービスの名前は、aliyun で始めることはできません。
以前の NGINX Ingress コントローラーバージョンは、Ingress リソースの
spec : ingressClassName
フィールドを認識できません。以前の NGINX Ingress コントローラーバージョンがインストールされており、ACK クラスタで NGINX Ingress と ALB Ingress の両方を使用している場合、ALB Ingress は NGINX Ingress コントローラーによって調整される可能性があります。この問題を回避するには、できるだけ早く NGINX Ingress コントローラーを更新するか、アノテーションを使用して ALB Ingress の IngressClass を指定します。詳細については、「NGINX Ingress コントローラーの更新」または「ALB Ingress の高度な構成」をご参照ください。
使用上の注意
ALB Ingress を作成する前に、ALB の原則と要件について理解しておくことをお勧めします。詳細については、「ALB Ingress の管理」をご参照ください。以下のリソース条件が満たされていることを確認してください。
ACK 専用クラスタ で ALB Ingress を使用するには、最初にクラスタに ALB Ingress コントローラーにアクセスするための権限を付与する必要があります。詳細については、「ACK 専用クラスタに ALB Ingress コントローラーへのアクセスを承認する」をご参照ください。
ALB Ingress をインストールするときに、[ゲートウェイソース] パラメータを異なる値に設定できます。これにより、異なる操作結果が生じる可能性があります。
(推奨)[新規] または [既存] を選択します。
コントローラーは、
alb
という名前の AlbConfig と対応する IngressClass リソースを自動的に作成します。デフォルトでは、AlbConfig はポート 80 の HTTP リスナーで構成されます。(オプション)[なし] を選択します。
ALB Ingress を作成する前に、AlbConfig を作成し、IngressClass を作成する必要があります。コントローラーは対応するリソースを作成しません。
AlbConfig と IngressClass
AlbConfig:
AlbConfig は、ALB インスタンスを管理するために使用されます。AlbConfig のパラメータは、ALB インスタンスの構成を決定します。1 つの AlbConfig は 1 つの ALB インスタンスに対応します。詳細については、「AlbConfig を使用して ALB インスタンスを構成する」をご参照ください。
IngressClass:
IngressClass は AlbConfig に関連付けられている必要があります。このようにして、IngressClass は ALB インスタンスに関連付けることができます。ALB Ingress を作成するときに、対応する AlbConfig 構成を使用するように IngressClass を構成できます。このようにして、特定のアプリケーションルーティング構成と負荷分散ポリシーを使用できます。
デプロイメントとサービスの作成
サービスは、同じ機能を提供するポッドへの統一された入口です。ALB Ingress を作成するときは、外部トラフィックを対応するサービスに転送するルーティングルールを構成する必要があります。
このトピックでは、ALB Ingress コントローラーをインストールするときに ゲートウェイソース パラメータを 新規 に設定する方法について説明します。coffee
および tea
という名前のアプリケーションと、対応するサービスがデプロイされます。ドメイン名 demo.domain.ingress.top
を持つ ALB Ingress がこれらのアプリケーション用に作成されます。DNS 解決が完了すると、アプリケーションにアクセスできます。
ALB Ingress コントローラーのインストール
ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。
[クラスタ] ページで、管理するクラスタを見つけ、その名前をクリックします。左側のウィンドウで、
を選択します。[アドオン] ページで、[ネットワーキング] タブをクリックします。ネットワーク セクションで、[ALB Ingress Controller] カードを見つけて、右下隅にある インストール をクリックします。
[コンポーネント ALB Ingress Controller のインストール] ダイアログボックスで、[ゲートウェイソース] を [新規] に設定し、[OK] をクリックします。
インスタンスソース
説明
結果
[新規](推奨)
[ネットワークタイプ]:必要に応じて、[インターネット] または [イントラネット] の ALB インスタンスを作成できます。課金については、「請求ルール」をご参照ください。
[VPC]:この値は、クラスタが存在する VPC と同じであり、変更できません。
[vSwitch]:この VPC の下で ALB によってサポートされているゾーンに対応する vSwitch が表示されます。異なるゾーンの 2 つの vSwitch を選択する必要があります。選択しない場合、使用可能な 2 つの vSwitch が自動的に選択されます。[vSwitch の作成] をクリックして、新しい vSwitch を作成することもできます。
コントローラーは、
alb
という名前の AlbConfig と対応する IngressClass リソースを自動的に作成します。AlbConfig では、ポート 80 と HTTP を使用するリスナーがデフォルトで構成されます。リスナー拡張機能の詳細については、「HTTP リスナーの作成」をご参照ください。[既存](推奨)
ドロップダウンメニューから既存の ALB インスタンスを選択して再利用できます。ベーシック ALB インスタンスはサポートされていません。詳細については、「既存の ALB インスタンスの再利用」をご参照ください。
[なし](オプション)
ALB Ingress コントローラーのみがインストールされます。ALB インスタンスは作成されません。
重要コントローラーは対応するリソースを作成しません。AlbConfig と IngressClass を手動で作成する必要があります。
デプロイメントとサービスの作成
ACK コンソールの使用
ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。
[クラスタ] ページで、管理するクラスタを見つけ、その名前をクリックします。左側のウィンドウで、 を選択します。
[YAML から作成] をクリックします。
[サンプルテンプレート]:[カスタム] を選択します。
[テンプレート]:次のコードをコードエディターにコピーします。YAML 構成ファイルは、
coffee
およびtea
という名前の 2 つのデプロイメントと、coffee-svc
およびtea-svc
という名前の 2 つのサービスをデプロイするために使用されます。
構成が完了したら、[作成] をクリックします。[作成済み] メッセージが表示されます。
次の手順を実行して、デプロイメントとサービスが作成されたかどうかを確認します。
左側のナビゲーションウィンドウで、[ワークロード] > [デプロイメント] を選択します。coffee および tea という名前のデプロイメントが表示されます。
左側のナビゲーションウィンドウで、[ネットワーク > サービス] を選択します。 coffee-svc と tea-svc という名前のサービスが表示されます。
kubectl の使用
cafe-service.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。このファイルは、
coffee
およびtea
という名前の 2 つのデプロイメントと、coffee-svc
およびtea-svc
という名前の 2 つのサービスをデプロイするために使用されます。次のコマンドを実行して、デプロイメントとサービスをデプロイします。
kubectl apply -f cafe-service.yaml
予期される出力:
deployment "coffee" created service "coffee-svc" created deployment "tea" created service "tea-svc" created
デプロイメントとサービスのステータスを表示します。
次のコマンドを実行して、デプロイメントのステータスを表示します。
kubectl get deployment
予期される出力:
NAME READY UP-TO-DATE AVAILABLE AGE coffee 2/2 2 2 2m26s tea 2/2 2 2 2m26s
次のコマンドを実行して、サービスのステータスを表示します。
kubectl get svc
予期される出力:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE coffee-svc NodePort 172.16.XX.XX <none> 80:32056/TCP 9m38s tea-svc NodePort 172.16.XX.XX <none> 80:31696/TCP 9m38s
ALB Ingress の作成
ACK コンソールの使用
ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。
[クラスタ] ページで、管理するクラスタを見つけ、その名前をクリックします。左側のウィンドウで、 を選択します。
[Ingress] ページで、[Ingress の作成] をクリックします。[Ingress の作成] ダイアログボックスで、Ingress を構成します。
パラメータ
説明
例
[ゲートウェイタイプ]
要件に基づいて、[ALB Ingress]、[MSE Ingress]、または [Nginx Ingress] を選択できます。
3 つのゲートウェイタイプの相違点の詳細については、「NGINX Ingress、ALB Ingress、および MSE Ingress の比較」をご参照ください。
ALB Ingress
[名前]
Ingress の名前を指定します。
cafe-ingress
[Ingress クラス]
AlbConfig に関連付けられている Ingress のクラスを指定します。
alb
[ルール]
[+ ルールの追加] をクリックして、Ingress ルールを追加します。
[ドメイン名]:カスタムドメイン名を指定します。
[マッピング]:次のパラメータを構成します。
[パス]:バックエンド サービスの URL パスを指定します。
[ルール]:
[プレフィックス(プレフィックスベースのマッチ)]:リクエストされた URL パスのプレフィックスと一致します。
[完全一致(完全一致)]:リクエストされた URL パスと完全に一致します。
[実装固有(デフォルト値)]:ALB Ingress コントローラーによって実装されたロジックによって異なります。
詳細については、「URL パスに基づいてリクエストを転送する」をご参照ください。
[サービス]:バックエンド サービスを選択します。
[ポート]:公開するサービスポートを指定します。
ドメイン名に複数のパスを構成できます。[+ 追加] をクリックしてパスを追加します。
[ドメイン名]:demo.domain.ingress.top
[マッピング]:
[パス]:/tea
[ルール]:プレフィックス(プレフィックスベースのマッチ)
[サービス]:tea-svc
[ポート]:80
[マッピング]:
[パス]:/coffee
[ルール]:プレフィックス(プレフィックスベースのマッチ)
[サービス]:coffee-svc
[ポート]:80
その他のパラメータにはデフォルト値を使用します。詳細については、「(オプション)追加パラメータの構成」をご参照ください。
構成が完了したら、[Ingress の作成] パネルの左下隅にある [OK] をクリックします。
Ingress が作成されたかどうかを確認し、エンドポイントをコピーします。
左側のナビゲーションウィンドウで、[ネットワーク > Ingress] を選択します。
cafe-ingress
という名前の Ingress が Ingress ページに表示されます。cafe-ingress
の [エンドポイント] 列で、ALB インスタンスのドメイン名をコピーします。
kubectl の使用
cafe-ingress.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。このファイルは、Ingress を作成するために使用されます。
次の表は、指定できるパラメータについて説明しています。
パラメータ
必須
説明
metadata.name
はい
Ingress の名前。
説明Ingress の名前は、クラスタ内で一意である必要があります。Ingress を作成するときは、名前の競合を防ぐために、Ingress 名が一意であることを確認してください。
spec.ingressClassName
はい
関連付けられた IngressClass の名前。
spec.rules.host
いいえ
HTTP ホストヘッダーのドメイン名。このパラメータはカスタムドメイン名に設定する必要があります。
ブラウザで http://demo.domain.ingress.top などのドメイン名にアクセスすると、HTTP リクエストが送信されるときに、ブラウザは自動的に Host: demo.domain.ingress.top ヘッダーを追加します。このようにして、サーバーはヘッダーに基づいて宛先ホストを識別します。Kubernetes では、Ingress ルールの host フィールドは、リクエストのホストヘッダーと照合するために使用されます。ホストヘッダーが一致すると、リクエストは対応するバックエンド サービスに送信されます。
説明カスタムドメイン名を指定する場合は、ドメイン名のインターネットコンテンツプロバイダー(ICP)ファイリングが完了していることを確認してください。完了していない場合、ドメイン名が解決に失敗する可能性があります。詳細については、「ICP ファイリングプロセス」をご参照ください。
このパラメータを空のままにすると、Ingress ルールは Ingress コントローラーに送信されたすべてのリクエストと一致します。
spec.rules.http.paths.path
はい
URL パス。
spec.rules.http.paths.pathType
はい
URL マッチングルール。詳細については、「URL パスに基づいてリクエストを転送する」をご参照ください。
spec.rules.http.paths.backend.service.name
はい
作成したサービスの名前。
spec.rules.http.paths.backend.service.port.number
はい
作成したサービスのポート。
ポートは、リクエストをバックエンド サービスにルーティングするために使用されるため重要です。リクエストがバックエンド サービスにルーティングされ、予期どおりに処理されるように、ポートが有効であることを確認してください。
次のコマンドを実行して、外部からアクセス可能なドメイン名と
coffee
およびtea
サービスのpath
を構成します。kubectl apply -f cafe-ingress.yaml
予期される出力:
ingress.networking.k8s.io/cafe-ingress created
オプション。次のコマンドを実行して、ALB インスタンスのドメイン名を取得します。
kubectl get ingress
予期される出力:
NAME CLASS HOSTS ADDRESS PORTS AGE cafe-ingress alb demo.domain.ingress.top alb-m551oo2zn63yov****.cn-hangzhou.alb.aliyuncs.com 80 50s
ドメイン名解決の構成
Alibaba Cloud DNS コンソール にログインします。
[ドメイン名解決] ページで、[ドメイン名の追加] をクリックします。
[ドメイン名の追加] ダイアログボックスで、カスタムドメイン名を入力し、[OK] をクリックします。
重要CNAME レコードを作成する前に、ドメインが承認のための TXT レコード検証に合格している必要があります。
管理するドメイン名を見つけ、[操作] 列の [DNS 設定] をクリックします。
[DNS 設定] ページで、[DNS レコードの追加] をクリックします。
[DNS レコードの追加] パネルで、パラメータを構成し、[OK] をクリックします。次の表にパラメータを示します。
パラメータ
説明
[レコードタイプ]
DNS レコードのタイプ。ドロップダウンリストから [CNAME] を選択します。
[ホスト名]
ドメイン名のプレフィックス。例:
www
。[DNS リクエストソース]
DNS リクエストの送信元リージョン。ドロップダウンリストから [デフォルト] を選択します。
[レコード値]
CNAME(ALB インスタンスのドメイン名)を入力します。
[TTL]
DNS サーバーにキャッシュされる CNAME レコードの有効期間(TTL)。この例では、デフォルト値が使用されます。
トラフィック転送のテスト
ブラウザのアドレスバーに「テストドメイン名 + URL パス」と入力して、トラフィックが指定されたサービスに転送されるかどうかを確認します。
この例では、demo.domain.ingress.top
が使用されます。
ブラウザのアドレスバーに
demo.domain.ingress.top/coffee
と入力します。coffee-svc
サービスのページが表示されます。ブラウザのアドレスバーに
demo.domain.ingress.top/tea
と入力します。tea-svc
サービスのページが表示されます。
(オプション)追加パラメーターを構成する
パラメーター | 説明 | 参照 |
TLS 設定 | TLS 認証を有効にするかどうかを指定します。Ingress の TLS 認証を有効にできます。
[+ 追加] をクリックして、さらに TLS 証明書を追加できます。 | |
詳細 | ||
カスタム転送ルール | 詳細については、「ALB Ingress のカスタムルーティングルールを作成する」をご参照ください。 |
よくある質問
ALB Ingress の問題のトラブルシューティング方法の詳細については、「ALB Ingress コントローラーのトラブルシューティング」をご参照ください。次のコンテンツでは、よくある質問 (FAQ) を示します。
「listener is not exist in alb, port: xxx」というエラーメッセージが表示された場合はどうすればよいですか?
デフォルトでは、AlbConfig にはポート 80 のリスナーのみが構成されています。リスナーの作成方法の詳細については、「リスナーを作成する」をご参照ください。
AlbConfig に HTTP リスナーと HTTPS リスナーを構成した後、Ingress に HTTP リスナーと HTTPS リスナーを構成するにはどうすればよいですか?
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: #...