Application Load Balancer (ALB) Ingressを設定する場合、クラスターに複数のリソースを作成して、ALB Ingressがトラフィックをバックエンドポッドにルーティングできるようにする必要があります。 このトピックでは、ALB Ingressを使用して外部サービスを提供するアプリケーションをデプロイする方法について説明します。
使用上の注意
Flannelネットワークプラグインを使用する場合、ALB IngressゲートウェイのバックエンドサービスはNodePortまたはLoadBalancerタイプである必要があります。
AlbConfigオブジェクト、名前空間、Ingress、およびServicesの名前は、aliyunで始めることはできません。
以前のNGINX Ingressコントローラーのバージョンでは、Ingressリソースの
spec : ingressClassName
フィールドを認識できません。 以前のバージョンのNGINX Ingressコントローラーがインストールされ、ACKクラスターでNGINX IngressとALB Ingressの両方が使用されている場合、ALB IngressはNGINX Ingressコントローラーによって調整される可能性があります。 この問題を回避するには、できるだけ早くNGINX Ingressコントローラーを更新するか、アノテーションを使用してALB IngressのIngressClassesを指定します。 詳細については、「NGINX Ingressコントローラーの更新」または「高度なALB Ingress設定」をご参照ください。
使用上の注意
ALB Ingressを作成する前に、ALBの原則と要件について学ぶことをお勧めします。 詳細については、「ALB Ingressの管理」をご参照ください。 次のリソース条件が満たされていることを確認してください。
ACK専用クラスターでALB Ingressを使用するには、最初にALB Ingressコントローラーにアクセスする権限をクラスターに付与する必要があります。 詳細については、「ACK専用クラスターにALB Ingressコントローラーへのアクセスを許可する」をご参照ください。
ALB Ingressをインストールするときに、Gateway Sourceパラメーターを異なる値に設定できます。
(推奨) 新規または既存を選択:
コントローラーは自動的に、
alb
という名前のAlbConfigと対応するIngressClassリソースを作成します。 デフォルトでは、AlbConfigはポート80のHTTPリスナーで構成されています。[なし] を選択:
ALB Ingressを作成する前に、手動でAlbConfigを作成し、IngressClassを作成する必要があります。 コントローラは対応するリソースを作成しません。
AlbConfigとIngressClass
AlbConfig:
AlbConfigは、ALBインスタンスの管理に使用されます。 AlbConfigのパラメーターは、ALBインスタンスの設定を決定します。 AlbConfigは、1つのALBインスタンスに対応する。 詳細については、「AlbConfigsを使用したALBインスタンスの設定」をご参照ください。
IngressClass:
IngressClassは、AlbConfigに関連付ける必要があります。このようにして、IngressClassをALBインスタンスに関連付けることができます。 ALB Ingressを作成するときに、対応するAlbConfig設定を使用するようにIngressClassを設定できます。 これにより、特定のアプリケーションルーティング設定と負荷分散ポリシーを使用できます。
デプロイメントとサービスの作成
サービスは、同じ機能を提供するポッドへの統合された入力です。 ALB Ingressを作成するときは、外部トラフィックを対応するサービスに転送するようにルーティングルールを設定する必要があります。
このトピックでは、ALB Ingressコントローラーのインストール時にGateway SourceパラメーターをNewに設定する方法について説明します。 coffee
とtea
という名前のアプリケーションと、対応するサービスがデプロイされます。 これらのアプリケーション用に、ドメイン名がdemo.domain. Ingress. top
のALB ingressが作成されます。 DNS解決が完了すると、アプリケーションにアクセスできます。
ALB Ingressコントローラのインストール
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、
を選択します。[アドオン] ページで、[ネットワーク] タブをクリックします。 ネットワーク セクションで、ALB Ingress Controllerカードを見つけ、右下隅の インストール をクリックします。
[コンポーネントALB Ingress Controllerのインストール] ダイアログボックスで、[ゲートウェイソース] を [新規] に設定し、[OK] をクリックします。
インスタンスソース
説明
結果
新しい
ネットワークタイプ: 必要に応じて、インターネットまたはイントラネット用のALBインスタンスを作成できます。 課金の詳細については、「ALB課金ルール」をご参照ください。
VPC: この値は、クラスターが存在する仮想プライベートクラウド (VPC) と同じであり、変更することはできません。
vSwitch: このVPCのALBでサポートされているゾーンに対応するvSwitchが表示されます。 異なるゾーンで2つのvSwitchを選択する必要があります。 それ以外の場合、2つの使用可能なvSwitchが自動的に選択されます。 [vSwitchの作成] をクリックして、新しいvSwitchを作成することもできます。
コントローラは自動的に
alb
という名前のAlbConfigと対応するIngressClassリソースを作成します。 AlbConfigでは、ポート80とプロトコルHTTPのリスナーがデフォルトで設定されます。 リスナー拡張機能の詳細については、「HTTPSリスナーの作成」をご参照ください。既存
再利用するために、ドロップダウンメニューから既存のALBインスタンスを選択できます。 基本ALBインスタンスはサポートされていません。 詳細については、「既存のALBインスタンスの再利用」をご参照ください。
なし
ALB Ingressコントローラのみがインストールされています。 ALBインスタンスが作成されていません。
コントローラは対応するリソースを作成しません。 手動でAlbConfigを作成し、IngressClassを作成する必要があります。
デプロイメントとサービスの作成
ACKコンソールの使用
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
[YAMLから作成] をクリックします。
サンプルテンプレート: [カスタム] を選択します。
テンプレート: 次のコードをコードエディターにコピーします。 YAML構成ファイルは、
coffee
とtea
という名前の2つのデプロイメントと、coffee-svc
とtea-svc
という名前の2つのサービスをデプロイするために使用されます。
設定が完了したら、[作成] をクリックします。 [作成済み] メッセージが表示されます。
次の手順を実行して、デプロイメントとサービスが作成されているかどうかを確認します。
左側のナビゲーションウィンドウで、[ワークロード]> [デプロイメント] を選択します。 コーヒーと紅茶という名前の展開が表示されます。
左側のナビゲーションウィンドウで、[ネットワーク]> [サービス] を選択します。 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 1/2 2 1 2m26s tea 1/1 1 1 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 Ingressy、またはNginx Ingressを選択できます。
3つのゲートウェイタイプの違いの詳細については、「Nginx Ingress、ALB Ingress、およびMSE Ingressの比較」をご参照ください。
ALBイングレス
名前
Ingressの名前を指定します。
カフェ-ingress
Ingressクラス
AlbConfigに関連付けられているIngressのクラスを指定します。
alb
ルール
[+ ルールの追加] をクリックして、Ingressルールを追加します。
ドメイン名: カスタムドメイン名を指定します。
マッピング: 次のパラメーターを設定します。
パス: バックエンドサービスのURLパスを指定します。
ルール:
プレフィックス (プレフィックスベースの一致): 要求されたURLパスのプレフィックスに一致します。
Exact (Exact Match): 要求されたURLパスと完全に一致します。
ImplementationSpecific (Default Value): ALB Ingressコントローラによって実装されるロジックに依存します。
詳細については、「URLパスに基づくリクエストの転送」をご参照ください。
サービス: バックエンドサービスを選択します。
ポート: 公開するサービスポートを指定します。
ドメイン名に複数のパスを設定できます。 [+ 追加] をクリックしてパスを追加します。
ドメイン名: demo. Domain. ingress.top
マッピング:
パス: /tea
ルール: プレフィックス (プレフィックスベースの一致)
サービス: tea-svc
ポート: 80
マッピング:
パス: /coffee
ルール: プレフィックス (プレフィックスベースの一致)
サービス: coffee-svc
ポート: 80
他のパラメーターにはデフォルト値を使用します。 詳細については、「 (オプション) 追加パラメーターの設定」をご参照ください。
設定が完了したら、[Ingressの作成] パネルの左下隅にある [OK] をクリックします。
Ingressが作成されているかどうかを確認し、エンドポイントをコピーします。
左側のナビゲーションウィンドウで、[ネットワーク]> [Ingress] を選択します。 Ingressページには、
cafe-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ルールのホストフィールドを使用して、リクエストのホストヘッダーと照合します。 ホストヘッダーが一致する場合、リクエストは対応するバックエンドサービスに送信されます。
説明カスタムドメイン名を指定する場合は、そのドメイン名のインターネットコンテンツプロバイダ (ICP) の申請が完了していることを確認してください。 そうしないと、ドメイン名の解決に失敗する可能性があります。 詳細については、「ICP登録プロセス」をご参照ください。
このパラメーターを空のままにすると、IngressルールはIngressコントローラーに送信されるすべてのリクエストと一致します。
spec.ru les.http.paths.path
はい
URLパス。
spec.ru les.http.paths.pathType
はい
URLマッチングルール。 詳細については、「URLパスに基づくリクエストの転送」をご参照ください。
spec.rules.http.paths.backend.service.name
はい
作成したサービスの名前。
spec.ru les.http.paths.backend.service.port.number
はい
作成したサービスのポート。
ポートはリクエストをバックエンドサービスにルーティングするために使用されるため、重要です。 要求がバックエンドサービスにルーティングされ、期待どおりに処理できるように、ポートが有効であることを確認します。
次のコマンドを実行して、外部からアクセス可能なドメイン名と
coffee
およびtea
Servicesのパス
を設定します。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リクエストの送信元のリージョン。 ドロップダウンリストから [デフォルト] を選択します。
レコード値
ALBインスタンスのドメイン名であるCNAMEを入力します。
TTL
DNSサーバーにキャッシュされるCNAMEレコードの有効期間 (TTL) 。 この例では、デフォルト値が使用されます。
トラフィック転送のテスト
ブラウザのアドレスバーに「test domain name + URL path」と入力して、トラフィックが指定されたサービスに転送されているかどうかを確認します。
この例では、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コントローラーのトラブルシューティング」をご参照ください。 以下のコンテンツは、よくある質問 (FAQ) を提供します。
「alb、port: xxxにリスナーが存在しない」というエラーメッセージが表示された場合はどうすればよいですか?
デフォルトでは、ポート80のリスナーのみがAlbConfigに設定されます。リスナーの作成方法の詳細については、「リスナーの作成」をご参照ください。
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}]' # Add this annotation if the ALB Ingress is associated with multiple listeners. spec: #...