IBM Cloud 内の Ingress
Ingressは Kubernetes、アプリへのリクエストを転送し、ネットワーク・トラフィックのワークロードをバランスさせることで、クラスタ内のサービスをパブリック・ネットワークまたはプライベート・ネットワークに公開するサービス・ディスカバリ・メソッドである。 Ingress は、ユーザーが構成し、すべての着信トラフィックに適用される一連のルーティング・ルールに基づいて、サービスへの外部アクセスを管理します。
IBM Cloud Kubernetes Service クラスターをプロビジョンすると、 IBM は、Ingress を使用するために必要なすべてのコンポーネントを提供します。 次に、開始する準備ができたら、Ingress リソースを作成して、これらのコンポーネントの連携方法を指定します。
Kubernetes Ingress について詳しくは、 Kubernetes の資料を参照してください。
IBM提供の Ingress コンポーネント
クラスターの作成時に、Ingress を使用するために必要なすべてのコンポーネントが提供されます。 これらのコンポーネントは、Ingress リソースを作成するときに指定します。
- 入口ドメイン
- Ingress クラス
- アプリケーション・ロード・バランサー (ALB)
- TLS証明書
入口ドメイン
デフォルトのIngressドメインは、クラスタ内の各アプリに対して一意の URL、クラスタ内のALBのIPアドレスによって参照されるドメインを形成するために使用されます。 クラスターを作成すると、固有の Ingress サブドメインが自動的に作成され、デフォルト・ドメインとして登録されます。 クラスター内に存在する任意のドメインに デフォルト・ドメインを変更 できます。
また、 IBM Cloud の内部ドメイン・プロバイダまたは IBM Cloud Internet Services の外部プロバイダで登録した 独自のドメインを作成または追加する こともできます。
プライベートALBは、 IBM-提供されたIngressサブドメインを参照せず、代わりに カスタムドメインを 必要とする。
サブドメインは以下の形式で登録される。
<cluster_name>.<globally_unique_account_HASH>-0000.<region>.containers.appdomain.cloud
以下の表は、サブドメインの各部分について説明したものである。
| サブドメインの構成要素 | 説明 |
|---|---|
* |
クラスターには、サブドメインのワイルドカードがデフォルトで登録されます。 |
<cluster_name> |
クラスターの名前。
|
<globally_unique_account_HASH> |
IBM Cloud アカウントにグローバルに一意のハッシュが作成されます。 アカウントのクラスター内で NLB に作成したすべてのサブドメインは、このグローバルに一意のハッシュを使用します。 |
0000 |
クラスター内に作成された各サブドメインのカウンターとして機能します。 |
<region> |
クラスターが作成されたリージョン。 |
containers.appdomain.cloud |
IBM Cloud Kubernetes Service のサブドメインのサブドメイン。 |
アプリごとに固有の URL を形成するために、アプリ・サービスへのパスがパブリック経路に付加されます。 例えば、以下のアプリの URLを参照してください。
mycluster-a1b2cdef345678g9hi012j3kl4567890-0000.us-south.containers.appdomain.cloud/myapp1
Ingress クラス
Ingress クラスは、使用される Ingress コントローラーのタイプを決定します。 IBM には2つのIngressクラスがあります。1つは public (public-iks-k8s-nginx) で、もう1つは private (private-iks-k8s-nginx) です。どちらのクラスも NGINX Ingress コントローラを実装しています。 Ingress リソースを作成するときに、指定した
Ingress クラスによって、アプリがパブリックに公開されるかプライベートに公開されるかが決まります。
独自の IngressClass リソースを作成することで、カスタム Ingress クラスを使用できます。
アプリケーション・ロード・バランサー (ALB)
ALBは、 HTTP、 HTTPS、または TCP サービス要求の着信をリッスンし、Ingressリソースで定義したルールに従って、これらの要求を適切なアプリポッドに転送します。 クラシック・インフラストラクチャーまたは VPC インフラストラクチャーのいずれかを使用して標準クラスターを作成すると、ゾーンごとに 1 つのパブリック ALB と 1 つのプライベート ALB が自動的に作成されます。
クラシック・クラスター内の ALB
クラシック・クラスターを作成すると、各ゾーンに 1 つのパブリック ALB と 1 つのプライベート ALB が自動的に作成されます。 クラシック・クラスター内のパブリック ALB とプライベート ALB には、クラスターの存続期間中変更されない静的 IP アドレスが割り当てられます。
パブリック ALB は、クラスターのプロビジョン時に登録された同じ IBM提供の Ingress サブドメインを共有し、各パブリック ALB の個々の IP アドレスがこのサブドメインにリンクされます。 パブリック ALB の IP アドレスを見つけるには、 ibmcloud ks ingress alb ls を実行し、出力の ALB IP フィールドを確認します。
クラシック・クラスターのプライベート ALB は、 IBM提供の Ingress サブドメインを使用せず、自動的に有効になることもありません。 最初に CLI でプライベート ALB を有効にしてから、Ingress リソースで private-iks-k8s-nginx クラスを指定する必要があります。 プライベート ALB を有効にした後、 ibmcloud ks ingress alb ls を実行し、出力の ALB IP フィールドを確認することで、プライベート IP アドレスを見つけることができます。
パブリック ALB ポッドまたはプライベート ALB ポッドのスケジュールが変更された場合、同じ IP アドレスが保持されます。 ただし、ALB を使用してゾーンを削除したり、そのゾーン内の VLAN 上のすべてのワーカーを削除したりすると、その ALB の IP アドレスが削除されます。
VPC 内の ALB
VPC クラスターを作成すると、各ゾーンに 1 つのパブリック ALB と 1 つのプライベート ALB が自動的に作成されます。 さらに、VPC 内のクラスターの外部に 1 つのパブリック VPC ロード・バランサーが自動的に作成されます。 VPC クラスターでプライベート ALB を有効にすると、プライベート VPC ロード・バランサーも作成されます。
VPC クラスター内の ALB の IP アドレスは静的ではなく、時間の経過とともに変化する可能性があるため、VPC ロード・バランサーは、ALB のパブリック IP アドレスまたはプライベート IP アドレスを静的ホスト名の背後に配置します。 パブリック ALB またはプライベート ALB には別個のホスト名が適用されます。 ALB ホスト名は、クラスターの Ingress サブドメインとは別のものであることに注意してください。
VPC クラスター内の ALB のホスト名を見つけるには、 ibmcloud ks ingress alb ls を実行します。 プライベート・ホスト名は、プライベート ALB が有効になっている場合にのみリストされます。
ALB のワーカー・ノード要件
ALB が高可用性で機能し、定期的な更新を受け取るためには、クラスター内のゾーンごとに少なくとも 2 つのワーカー・ノードが必要です。 ALB ポッドのアンチアフィニティー・ルールにより、各ワーカー・ノードに 1 つのポッドのみがスケジュールされます。 ALBポッドに自動アップデートが適用されると、ポッドはリロードされる。 ワーカー・ノードが 1 つしかないために 1 つの ALB ポッドがある場合、トラフィックの中断を回避するためにポッドが自動的に更新されることはなく、ポッドを手動で削除して新しいポッドをスケジュール変更した場合にのみ更新が適用されます。 ゾーンごとに少なくとも 2 つのワーカー・ノードがあると、このシナリオは回避されます。
ゾーンに障害が発生すると、そのゾーンのIngress ALBへのリクエストに断続的な 障害が発生する可能性があることに注意。
デフォルト TLS 証明書
クラスタを作成すると、 IBM-提供されたIngressサブドメインで使用できるデフォルトの TLS 証明書が作成されます。 Ingressリソースには、デフォルトの TLS 証明書、または提供するカスタム証明書を指定できます。
を使用してください。 Secrets Manager を使って、Ingressサブドメインの証明書とその他の秘密を一元管理し、自動的に更新することを検討してください。
TLS 証明書を使ったIngressのセットアップには、シークレットの作成またはインポートが必要です。 IBM Cloud Ingress APIを使用してこれらの手順を実行する場合は、デフォルトの Secrets Manager インスタンスが必要です。 それ以外の場合は、 kubectl コマンドを使用して証明書をコピーできます。
Ingress の概要
クラスターで Ingress を使用する準備ができたら、 Ingress リソースを作成 して、Ingress コンポーネントを構成し、要求をルーティングするためのルールを定義し、アプリ・サービスへのパスを指定します。 公開するアプリまたはサービスが含まれている名前空間ごとに、別個の Ingress リソースが必要です。