Traefik Ingress in IBM Cloud

Ingressは、クラスター内のサービスをパブリックネットワークまたはプライベートネットワークに公開します。 これは、リクエストをアプリに転送し、設定したルーティングルールに基づいて外部からのアクセスを管理します。

IBM Cloud Kubernetes Service クラスターをプロビジョニングする際、TraefikベースのIngressコントローラーを1つ以上有効にすることができます。 IBM には、Ingressコントローラーを使用するために必要なコンポーネントが用意されています。 コンポーネント間の連携方法を定義するには、Ingressリソースを作成します。

Kubernetes Ingress の詳細については、『 Kubernetes 』のドキュメントを参照してください。

IBM-提供されたIngressコンポーネント

クラスターを作成すると、 IBM は、Ingress を使用するために必要なコンポーネントを提供します。 Ingress リソースでは、これらのコンポーネントをどのように使用するかを指定します。

  • 入口ドメイン
  • イングレスクラス
  • アプリケーション・ロード・バランサー (ALB)
  • TLS証明書

入口ドメイン

デフォルトのIngressドメインは、クラスター内のアプリごとに一意の URL を形成します。 このドメインは、クラスター内のすべてのALBのIPアドレスによって参照されます。

クラスターを作成すると、一意のIngressサブドメインが自動的に作成され、デフォルトのドメインとして登録されます。 デフォルトのドメインを変更する を、クラスター内に存在する任意のドメインに設定できます。

プライベートALBは、 IBM が提供するIngressサブドメインを参照せず、代わりに カスタムドメイン を必要とします。

また、 IBM Cloud の内部ドメインプロバイダー、または IBM Cloud Internet Services の外部プロバイダーで登録済みの 独自のドメインを作成・追加することも 可能です。

サブドメインは、以下の形式で登録されています。

<cluster_name>-<globally_unique_account_HASH>-0000.<region>.containers.appdomain.cloud

次の表は、サブドメインの各構成要素について説明したものです。

Ingress サブドメインのフォーマットについて
サブドメインの構成要素 説明
<cluster_name>

クラスタの名前。

  • クラスター名が 26 文字以下で、かつこのリージョン内で一意である場合、完全なクラスター名が使用されます: myclustername
  • クラスター名が 26 文字以下で、かつこのリージョン内に同じ名前のクラスターがすでに存在する場合、完全なクラスター名にダッシュと 6 文字のランダムな文字列が追加されます: myclustername-ABC123
  • クラスター名が 26 文字以上で、かつこのリージョン内でそのクラスター名が一意である場合、最初の 24 文字のみが使用されます: myveryverylongclusternam
  • クラスター名が 26 文字以上で、かつこのリージョン内に同じ名前のクラスターがすでに存在する場合、最初の 17 文字のみが使用され、ダッシュと 6 文字のランダムな文字が追加されます: myveryverylongclu-ABC123
<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 コントローラーのタイプを決定します。 IBM には、パブリッククラス(public-iks-traefik )とプライベートクラス(private-iks-traefik )の 2 つの Ingress クラスが用意されています。どちらのクラスも Traefik Ingress コントローラーを実装しています。 Ingressリソースを作成する際、指定したIngressクラスによって、アプリがパブリックに公開されるかプライベートに公開されるかが決まります。

カスタマイズ可能なデプロイメント設定ingressClass を設定することで、カスタムIngressクラスを使用できます。

アプリケーション・ロード・バランサー (ALB)

ALBは、 HTTP、 HTTPS、または TCP へのサービスリクエストを受信すると、Ingressリソースで定義したルールに従って、それらのリクエストを適切なアプリポッドに転送します。

クラシックまたはVPCインフラストラクチャのいずれかを使用して標準クラスターを作成すると、各ゾーンにパブリックALBとプライベートALBがそれぞれ1つずつ自動的に作成されます。

クラシック・クラスター内のALB

クラシッククラスターを作成すると、各ゾーンにパブリックALBとプライベートALBがそれぞれ1つずつ自動的に作成されます。 クラシック・クラスター内のパブリックおよびプライベートALBには、クラスターの存続期間を通じて変更されない静的IPアドレスが割り当てられます。

パブリックALBは、クラスターのプロビジョニング時に登録される、 IBM が提供するIngressサブドメインを共有しており、各パブリックALBの個別のIPアドレスはこのサブドメインに関連付けられています。 パブリック ALB の IP アドレスを確認するには、 ibmcloud ks ingress alb ls を実行し、出力結果の「 ALB IP 」フィールドを確認してください。

クラシック・クラスター内のプライベートALBは、 IBM が提供するIngressサブドメインを使用せず、自動的に有効化されることもありません。 まず、CLIでプライベートALBを有効にし、その後、Ingressリソースで private-iks-traefik クラスを指定する必要があります。 プライベートALBを有効にした後、 ibmcloud ks ingress alb ls を実行し、出力結果の「 ALB IP 」フィールドを確認することで、プライベートIPアドレスを確認できます。

パブリックまたはプライベートのALBポッドのスケジューリングが変更されても、IPアドレスは変わりません。 ただし、ALB を含むゾーンを削除したり、そのゾーン内の VLAN に属するすべてのワーカーを削除したりすると、その ALB の IP アドレスが削除されます。

VPC内のALB

VPCクラスターを作成すると、各ゾーンにパブリックALBとプライベートALBがそれぞれ1つずつ自動的に作成されます。 さらに、VPC内のクラスターの外側に、パブリックVPCロードバランサーが1つ自動的に作成されます。 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つしかなく、したがってALBポッドも1つしかない場合、トラフィックの途絶を防ぐためにポッドが自動的に更新されることはありません。 その場合、更新は、手動でポッドを削除し、新しいポッドを再スケジュールしたときにのみ適用されます。 ゾーンごとに少なくとも2つのワーカーノードを用意しておけば、このような事態は回避できます。

なお、ゾーンに障害が発生した場合、そのゾーン内のIngress ALBへのリクエストで断続的な障害が発生する可能性があります。

TLS のデフォルト証明書

クラスターを作成すると、デフォルトの TLS 証明書が作成され、 IBM が提供するIngressサブドメインとともに使用できます。 Ingressリソースでは、デフォルトの TLS 証明書、またはユーザーが用意したカスタム証明書のいずれかを指定できます。

以下の利用をご検討ください Secrets Manager Ingressのサブドメイン証明書やその他のシークレットを一元管理し、自動的に更新するために、

TLS の証明書を使用してIngressを設定するには、シークレットを作成またはインポートする必要があります。 IBM Cloud のIngress APIを使用してこれらの手順を実行するには、デフォルトの Secrets Manager インスタンスが必要です。 それ以外の場合は、 kubectl コマンドを使用して証明書をコピーすることもできます。

Ingressの始め方

クラスターでIngressを使用する準備が整ったら、 Ingressリソースを作成して、Ingressコンポーネントの設定、リクエストのルーティングに関するルールの定義、およびアプリサービスのパスの指定を行います。 公開したいアプリやサービスを含む各ネームスペースごとに、個別のIngressリソースが必要です。