Ingress のセットアップ
Ingress リソースを作成して、Ingress コンポーネントを構成し、要求をルーティングするためのルールを定義し、アプリ・サービスへのパスを指定します。 公開するアプリまたはサービスが含まれている名前空間ごとに、別個の Ingress リソースが必要です。
開始前に
始める前に、以下の準備手順に従ってください。
-
Ingress をセットアップするために必要な権限が与えられていることを確認してください。 以下の IBM Cloud IAM 役割 が必要です。
- クラスターに対する管理者のプラットフォーム・アクセス役割
- すべての名前空間に対するマネージャーのサービス・アクセス役割
-
IBM提供の Ingress サブドメインを使用するかどうかを決定します。 提供されたサブドメインを使用しない場合は、独自の カスタム・ドメイン を作成して登録する必要があります。
カスタムドメイン、またはプライベートALB経由でアプリを公開するために必要な、 IBM が提供するドメインの手動設定。
-
使用するALBが、想定されているバージョンであることを確認してください。
ibmcloud ks ingress alb versionsコマンドを実行して、現在サポートされているバージョンの一覧を表示し、ibmcloud ks ingress alb ls --cluster CLUSTERの出力結果と比較してください。 このドキュメントに従う場合は、Ingress- NGINX ベースの Ingress を実行していることが前提となります。Traefik に関する具体的な手順については、 対応するドキュメント を参照してください。 -
プライベート ALB を介してアプリを公開する場合は、CLI で各プライベート ALB を有効にする必要があります。 ALB IDを取得するには、
ibmcloud ks ingress alb ls --cluster CLUSTERを実行してください。
クラシック・クラスター 詳しくは、CLI リファレンス を参照してください。
sh {: pre} ibmcloud ks ingress alb enable classic --alb ALB_ID --cluster CLUSTER_NAME
VPC クラスター 詳細情報とコマンド・オプションについては、CLI リファレンス を参照してください。
sh {: pre} ibmcloud ks ingress alb enable vpc-gen2 --alb ALB_ID --cluster CLUSTER_NAME
-
高可用性を確保し、定期的な更新を適用するために、ゾーンごとに少なくとも 2 つのワーカー・ノードがクラスターに含まれていることを確認してください。 ゾーンにワーカーノードが1つしかない場合、ALBは自動更新を受信できない。 詳しくは、 ALB のワーカー・ノード要件 を参照してください。
-
クラシック・クラスタを使用している場合は、 IBM Cloud インフラストラクチャ・ アカウント 仮想ルーター機能(VRF )を有効にします。
- VRF を有効にするには、VRF の有効化を参照してください。
- VRF が既に有効になっているかどうかを確認するには、
ibmcloud account showコマンドを使用します。 - VRFを有効にできない、または有効にしたくない場合は、 VLANスパンニングを 有効にしてください。 VRF または VLAN スパンニングが有効になると、ALB は、アカウント内のさまざまなサブネットにパケットをルーティングできるようになります。
-
VPC クラスターの場合、VPC セキュリティグループで、Ingress によってルーティングされるトラフィックリクエストをノードポートが受信できるように設定されていることを確認してください。 詳細については、「 セキュア・バイ・デフォルトのクラスタVPCネットワークを理解する 」を参照してください。
-
自動化やテストなどの目的で、同じまたは類似した名前のクラスターを 7 日以内に 5 回以上作成および削除すると、Let's Encrypt の重複証明書レート制限に達する可能性があります。 Ingress のサブドメインと証明書が正しく登録されるようにするには、クラスターの名前の最初の 24 文字が異なっている必要があります。
-
ネットワーク・トラフィックをエッジ・ワーカー・ノードに制限する場合は、ALB が均等にデプロイされるように、各ゾーンで 2 つ以上のエッジ・ワーカー・ノードを有効にしてください。
ゾーンで障害が発生した場合、そのゾーンの Ingress ALB への要求で断続的に障害が発生する可能性があります。
セットアップ・ステップ
以下の手順に従って、Ingress をセットアップします。
ステップ 1: ClusterIP サービスを作成する
公開するアプリ・デプロイメントごとに、Kubernetes ClusterIP サービスを作成します。 アプリを Ingress ロード・バランシングに含めるには、Kubernetes サービスを介してアプリを公開する必要があります。
kubectl expose deploy <app_deployment_name> --name my-app-svc --port <app_port> -n <namespace>
ステップ2: TLS 証明書と Kubernetes シークレットを使って TLS ターミネーションをセットアップする
TLS 証明書は、アプリが存在する各ネームスペースに Kubernetes シークレットとして保存する必要があります。
-
IBM-提供されたIngressサブドメインを使用するには、 IBM-提供されたIngressサブドメインに TLS シークレットを設定する を参照のこと。
-
カスタムドメインを使用するには、 カスタムサブドメインの TLS シークレットの設定を 参照してください。
ステップ 3: Ingress リソースを作成する
Ingressリソースを作成し、Ingressコントローラーがアプリサービスへのトラフィックをルーティングする際に使用するルーティングルールを定義します。
-
YAML ファイルに Ingress リソースを作成します。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress-resource spec: ingressClassName: public-iks-k8s-nginx tls: - hosts: - <domain_name> secretName: <tls_secret_name> rules: - host: HOSTNAME http: paths: - path: <app_path_1> pathType: Prefix backend: service: name: <app_service_1> port: number: 80 - path: <app_path_2> pathType: Prefix backend: service: name: <app_service_2> port: number: 80
リソース・フィールド
ingressClassName- Ingress クラス名。 IBM提供の Ingress クラスは、パブリック ALB の場合は
public-iks-k8s-nginx、プライベート ALB の場合はprivate-iks-k8s-nginxです。 tls.hosts- TLS を使用するには、
<domain>を、IBM 提供の Ingress サブドメインまたはカスタム・ドメインで置き換えます。 tls.secretName<tls_secret_name>は、 TLS 証明書が 保存されている Kubernetes シークレットの名前に置き換えてください。host<domain>を、IBM 提供の Ingress サブドメインまたはカスタム・ドメインに置き換えます。path<app_path>を、スラッシュまたはアプリが listen しているパスに置き換えます。 このパスは、指定されたIngressドメインに追加され、アプリへの一意のルートが作成されます。 この経路を Web ブラウザーに入力すると、ネットワーク・トラフィックが ALB にルーティングされます。 ALB は、関連付けられたサービスを検索し、ネットワーク・トラフィックをそのサービスに送信します。 そして、サービスが、アプリを実行するポッドにトラフィックを転送します。pathType- URL パス・マッチング方式。 サポートされている値は、
ImplementationSpecific、Exact、またはPrefixです。 各パス種別に関する詳細や例については、 コミュニティの「 Kubernetes 」ドキュメントを参照してください。 service.nameapp1_serviceおよびapp2_serviceなどを、アプリを公開するために作成したサービスの名前に置き換えます。 指定するアプリが同じ名前空間内にあることを確認してください。service.name<app1_service>および<app2_service>などを、アプリを公開するために作成したサービスの名前に置き換えます。 指定するアプリが同じ名前空間内にあることを確認してください。service.port.number- サービスが listen するポート。 アプリ用に Kubernetes サービスを作成したときに定義したものと同じポートを使用します。
- Ingressリソースをクラスターに適用します。 リソースで指定したアプリ・サービスと同じ名前空間にリソースがデプロイされていることを確認します。
kubectl apply -f community-ingress-resource.yaml -n <namespace>
ステップ 4: Ingress セットアップを確認する
-
ALBの一覧を表示し、 Kubernetes Ingressイメージを実行しているALBのIPアドレス(クラシック)またはホスト名(VPC)をコピーしてください。 出力で、Build が形式
<community_version>_<ibm_build>_iksになっている ALB を選択します。ibmcloud ks ingress alb ls -c CLUSTER -
ALBのIPアドレス(クラシック)またはホスト名(VPC)、アプリのパス、およびご自身のドメインを使用して、このALBを経由してアプリにトラフィックを正常に送信できることを確認してください。
curl http://<ALB_IP>/<app_path> -H "Host: <ingress_subdomain>"たとえば、デフォルトのIngressサブドメインを使用して「
myapp」というアプリにリクエストを送信するには、次のコマンドを実行します。curl http://169.X.X.X/myapp -H "Host: mycluster-a1b2cdef345678g9hi012j3kl4567890-0000.us-south.containers.appdomain.cloud"
Ingress を介したアプリへの接続に問題が発生していますか? Ingress のトラブルシューティングを試してください。 ibmcloud ks ingress status-report get -c CLUSTER_NAME_OR_ID を実行すれば、Ingress コンポーネントの正常性と状況を確認できます。
Ingress を使用するカスタム・ドメイン
IBM が提供するIngressサブドメインを使用したくない場合は、Ingressリソースで指定した独自のカスタムドメインを使用することができます。 なお、プライベートALB経由でIngressを介して公開されるアプリについては、カスタムドメインを使用するか、 IBM が提供するドメインを手動で設定 する必要があります。
パブリック ALB 用のカスタム・ドメインの作成
パブリック ALB のカスタム・ドメインを作成するには、以下の手順を実行します。
-
カスタム・ドメインを作成します。 カスタム・ドメインを登録する時には、Domain Name Service (DNS) プロバイダーまたは IBM Cloud DNS を使用してください。 Ingress で公開するアプリが 1 つのクラスター内の別々の名前空間にある場合は、カスタム・ドメインをワイルドカード・ドメイン (
*.custom_domain.netなど) として登録します。 Kubernetes バージョン 1.20 以降では、ドメインは 130 文字以下に制限されていることに注意してください。 -
IBM 提供サブドメインを正規名レコード (CNAME) として指定することで、カスタム・ドメインの別名を定義します。 IBM 提供の Ingress ドメインを確認するには、
ibmcloud ks cluster get --cluster CLUSTER_NAMEを実行し、Ingress サブドメインフィールドを見つけます。IBM-提供されたサブドメインをCNAMEとして指定することは、DNSレスポンスから失敗したIPを削除する自動ヘルスチェックと、ALBを追加または削除したときにカスタムドメインが更新されることを保証するために必要です。
プライベート ALB 用のカスタム・ドメインの作成
プライベート ALB のカスタム・ドメインを作成するには、以下の手順を実行します。 プライベート ALB で Ingress を使用するには、カスタム・ドメインが必要であることに注意してください。
プライベート VLAN のみを使用するクラシック・クラスターの場合は、まず、プライベート・ネットワークで使用可能な独自の DNS サービスを構成する必要があります。
-
DNS サービス・プロバイダーを介してカスタム・ドメインを作成します。 Ingress URL は 130 文字以下でなければならないことに注意してください。
-
プライベート ALB の IP アドレスを A レコードとして追加するか (クラシック・クラスター)、VPC ホスト名を CNAME として追加して (VPC クラスター)、カスタム・ドメインをプライベート ALB にマップします。 ALB の IP アドレス (クラシック) またはホスト名 (VPC) を見つけるには、
ibmcloud ks ingress alb ls -c CLUSTER_NAME_OR_IDを実行します。