7.2. Ingress クラスタートラフィックの設定
7.2.1. Ingress クラスタートラフィックの設定の概要 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は、クラスター内で実行されるサービスを使用してクラスター外からの通信を可能にする以下の方法を提供します。
以下の方法が推奨されます。以下は、これらの方法の優先される順です。
- HTTP/HTTPS を使用する場合は Ingress Controller を使用する。
- HTTPS 以外の TLS で暗号化されたプロトコルを使用する場合、たとえば、SNI ヘッダーを使用する TLS の場合は、Ingress Controller を使用します。
-
それ以外の場合は、ロードバランサー、外部 IP、または
NodePort
を使用します。
方法 | 目的 |
---|---|
HTTP/HTTPS トラフィックおよび HTTPS 以外の TLS で暗号化されたプロトコル (TLS と SNI ヘッダーの使用など) へのアクセスを許可します。 | |
プールから割り当てられた IP アドレスを使用した非標準ポートへのトラフィックを許可します。ほとんどのクラウドプラットフォームは、ロードバランサーの IP アドレスでサービスを開始する方法を提供します。 | |
マシンネットワーク上のプールから特定の IP アドレスまたはアドレスへのトラフィックを許可します。ベアメタルインストールまたはベアメタルのようなプラットフォームの場合、MetalLB は、ロードバランサーの IP アドレスを使用してサービスを開始する方法を提供します。 | |
特定の IP アドレスを使用した非標準ポートへのトラフィックを許可します。 | |
クラスターのすべてのノードでサービスを公開します。 |
7.2.1.1. 比較: 外部 IP アドレスへのフォールトトレランスアクセス リンクのコピーリンクがクリップボードにコピーされました!
外部 IP アドレスへのアクセスを提供する通信メソッドの場合、IP アドレスへのフォールトトレランスアクセスは別の考慮事項となります。以下の機能は、外部 IP アドレスへのフォールトトレランスアクセスを提供します。
- IP フェイルオーバー
- IP フェイルオーバーはノードセットの仮想 IP アドレスのプールを管理します。これは、Keepalived および Virtual Router Redundancy Protocol (VRRP) で実装されます。IP フェイルオーバーはレイヤー 2 のメカニズムのみで、マルチキャストに依存します。マルチキャストには、一部のネットワークに欠点がある場合があります。
- MetalLB
- MetalLB にはレイヤー 2 モードがありますが、マルチキャストは使用されません。レイヤー 2 モードには、1 つのノードで外部 IP アドレスのトラフィックをすべて転送する欠点があります。
- 外部 IP アドレスの手動割り当て
- クラスターを、外部 IP アドレスをサービスに割り当てるために使用される IP アドレスブロックで設定できます。デフォルトでは、この機能は無効にされています。この機能は柔軟性がありますが、クラスターまたはネットワーク管理者に最大の負担をかけます。クラスターは、外部 IP 宛てのトラフィックを受信する準備ができていますが、各顧客は、トラフィックをノードにルーティングする方法を決定する必要があります。
7.2.2. サービスの ExternalIP の設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、トラフィックをクラスター内のサービスに送信できるクラスター外の IP アドレスブロックを指定できます。
この機能は通常、ベアメタルハードウェアにインストールされているクラスターに最も役立ちます。
7.2.2.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
- ネットワークインフラストラクチャーは、外部 IP アドレスのトラフィックをクラスターにルーティングする必要があります。
7.2.2.2. ExternalIP について リンクのコピーリンクがクリップボードにコピーされました!
非クラウド環境の場合、OpenShift Container Platform は、Service
オブジェクトの spec.externalIPs[]
パラメーターで外部 IP アドレスを指定するための ExternalIP 機能の使用をサポートしています。ExternalIP で設定されたサービスは、type=NodePort
を持つサービスと同様に機能し、トラフィックは負荷分散のためにローカルノードに送信されます。
クラウド環境の場合、クラウドの自動デプロイメントのためにロードバランサーサービスを使用し、サービスのエンドポイントをターゲットに設定します。
パラメーターの値を指定すると、OpenShift Container Platform はサービスに追加の仮想 IP アドレスを割り当てます。IP アドレスは、クラスターに定義したサービスネットワークの外部に存在することができます。
ExternalIP はデフォルトで無効になっているため、ExternalIP 機能を有効にすると、外部 IP アドレスへのクラスター内トラフィックがそのサービスに送信されるため、サービスにセキュリティーリスクが生じる可能性があります。この設定は、クラスターユーザーが外部リソース宛ての機密トラフィックをインターセプトできることを意味します。
MetalLB 実装または IP フェイルオーバーデプロイメントのいずれかを使用して、次の方法で ExternalIP リソースをサービスに接続できます。
- 外部 IP の自動割り当て
-
OpenShift Container Platform は、
spec.type=LoadBalancer
を設定してService
オブジェクトを作成する際に、IP アドレスをautoAssignCIDRs
CIDR ブロックからspec.externalIPs[]
配列に自動的に割り当てます。この設定では、OpenShift Container Platform はロードバランサーサービスタイプのクラウドバージョンを実装し、サービスに IP アドレスを割り当てます。自動割り当てはデフォルトでは無効になっており、クラスター管理者が「ExternalIP の設定」セクションの説明に従い設定する必要があります。 - 外部 IP の手動割り当て
-
OpenShift Container Platform は
Service
オブジェクトの作成時にspec.externalIPs[]
配列に割り当てられた IP アドレスを使用します。別のサービスによってすでに使用されている IP アドレスを指定することはできません。
MetalLB 実装または IP フェイルオーバーデプロイメントのいずれかを使用して外部 IP アドレスブロックをホストした後、外部 IP アドレスブロックがクラスターにルーティングされるようにネットワークインフラストラクチャーを設定する必要があります。この設定は、ノードからのネットワークインターフェイスに IP アドレスが設定されていないことを意味します。トラフィックを処理するには、静的な Address Resolution Protocol (ARP) エントリーなどの方法を使用して、ルーティングと外部 IP へのアクセスを設定する必要があります。
OpenShift Container Platform は以下の機能を追加して Kubernetes の ExternalIP 機能を拡張します。
- 設定可能なポリシーでの、ユーザーによる外部 IP アドレスの使用の制限
- 要求時の外部 IP アドレスのサービスへの自動割り当て
7.2.2.3. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
7.2.2.4. ExternalIP の設定 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform での外部 IP アドレスの使用は、cluster
という名前の Network.config.openshift.io
カスタムリソース (CR) の以下のパラメーターで制御されます。
-
spec.externalIP.autoAssignCIDRs
は、サービスの外部 IP アドレスを選択する際にロードバランサーによって使用される IP アドレスブロックを定義します。OpenShift Container Platform は、自動割り当て用の単一 IP アドレスブロックのみをサポートします。手動で ExternalIP をサービスに割り当てる場合は、数に限りのある共有 IP アドレスのポートスペースを管理する必要があるため、この設定はそ手動で設定するよりも少ない手順で行えます。自動割り当てを有効にすると、spec.type=LoadBalancer
が設定されたService
オブジェクトに外部 IP アドレスが割り当てられます。 -
spec.externalIP.policy
は、IP アドレスを手動で指定する際に許容される IP アドレスブロックを定義します。OpenShift Container Platform は、spec.externalIP.autoAssignCIDRs
パラメーターで定義した IP アドレスブロックにポリシールールを適用しません。
ルーティングが正しく行われると、設定された外部 IP アドレスブロックからの外部トラフィックは、サービスが公開する TCP ポートまたは UDP ポートを介してサービスのエンドポイントに到達できます。
クラスター管理者は、externalIP へのルーティングを設定する必要があります。割り当てる IP アドレスブロックがクラスター内の 1 つ以上のノードで終了することを確認する必要もあります。詳細は、Kubernetes External IPs を参照してください。
OpenShift Container Platform は IP アドレスの自動および手動割り当ての両方をサポートしており、それぞれのアドレスは 1 つのサービスの最大数に割り当てられることが保証されます。この設定により、ポートが他のサービスで公開されているかにかかわらず、各サービスはそれぞれ選択したポートを公開できます。
OpenShift Container Platform の autoAssignCIDRs
で定義された IP アドレスブロックを使用するには、ホストのネットワークに必要な IP アドレスの割り当ておよびルーティングを設定する必要があります。
以下の YAML は、外部 IP アドレスが設定されたサービスを説明しています。
spec.externalIPs[]
が設定された Service
オブジェクトの例
7.2.2.5. 外部 IP アドレスの割り当ての制限 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、IP アドレスブロックを指定してサービスの IP アドレスを許可または拒否できます。制限は、cluster-admin
権限を持たないユーザーにのみ適用されます。クラスター管理者は、サービスの spec.externalIPs[]
フィールドを任意の IP アドレスに常に設定できます。
policy
オブジェクトの spec.ExternalIP.policy
パラメーターに Classless Inter-Domain Routing (CIDR) アドレスブロックを指定して、IP アドレスポリシーを設定します。
policy
オブジェクトとその CIDR パラメーターの JSON 形式の例
ポリシーの制限を設定する際に、以下のルールが適用されます。
-
policy
が{}
に設定されている場合、spec.ExternalIPs[]
を使用してService
オブジェクトを作成すると、サービスが失敗します。これは、OpenShift Container Platform のデフォルト設定です。policy: null
の場合も同じ動作になります。 policy
が設定され、policy.allowedCIDRs[]
またはpolicy.rejectedCIDRs[]
のいずれかが設定される場合、以下のルールが適用されます。-
allowedCIDRs[]
とrejectedCIDRs[]
の両方が設定される場合、rejectedCIDRs[]
がallowedCIDRs[]
よりも優先されます。 -
allowedCIDRs[]
が設定される場合、spec.ExternalIPs[]
が設定されているService
オブジェクトの作成は、指定された IP アドレスが許可される場合にのみ正常に実行されます。 -
rejectedCIDRs[]
が設定される場合、spec.ExternalIPs[]
が設定されているService
オブジェクトの作成は、指定された IP アドレスが拒否されていない場合にのみ正常に実行されます。
-
7.2.2.6. ポリシーオブジェクトの例 リンクのコピーリンクがクリップボードにコピーされました!
このセクションの例では、さまざまな spec.externalIP.policy
設定を示します。
以下の例のポリシーは、外部 IP アドレスが指定されたサービスを OpenShift Container Platform が作成できないようにします。
Service
オブジェクトのspec.externalIPs[]
に指定された値を拒否するポリシーの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の例では、
allowedCIDRs
およびrejectedCIDRs
フィールドの両方が設定されます。許可される、および拒否される CIDR ブロックの両方を含むポリシーの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の例では、
policy
は{}
に設定されます。これが設定されている場合、oc get networks.config.openshift.io -o yaml
コマンドを使用して設定を表示してもpolicy
パラメーターはコマンド出力に表示されません。policy: null
の場合も同じ動作になります。Service
オブジェクトのspec.externalIPs[]
に指定された値を許可するポリシーの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.2.7. ExternalIP アドレスブロックの設定 リンクのコピーリンクがクリップボードにコピーされました!
ExternalIP アドレスブロックの設定は、cluster
という名前の Network カスタムリソース (CR) で定義されます。ネットワーク CR は config.openshift.io
API グループに含まれます。
クラスターのインストール時に、Cluster Version Operator (CVO) は cluster
という名前のネットワーク CR を自動的に作成します。このタイプのその他の CR オブジェクトの作成はサポートされていません。
以下の YAML は ExternalIP 設定を説明しています。
cluster
という名前の network.config.openshift.io CR
以下の YAML は、policy
スタンザのフィールドを説明しています。
Network.config.openshift.io policy
スタンザ
policy: allowedCIDRs: [] rejectedCIDRs: []
policy:
allowedCIDRs: []
rejectedCIDRs: []
外部 IP 設定の例
外部 IP アドレスプールの予想される複数の設定が以下の例で表示されています。
以下の YAML は、自動的に割り当てられた外部 IP アドレスを有効にする設定を説明しています。
spec.externalIP.autoAssignCIDRs
が設定された設定例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の YAML は、許可された、および拒否された CIDR 範囲のポリシールールを設定します。
spec.externalIP.policy
が設定された設定例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.2.8. クラスターの外部 IP アドレスブロックの設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、以下の ExternalIP を設定できます。
-
Service
オブジェクトのspec.clusterIP
フィールドを自動的に設定するために OpenShift Container Platform によって使用される ExternalIP アドレスブロック。 -
IP アドレスを制限するポリシーオブジェクトは
Service
オブジェクトのspec.clusterIP
配列に手動で割り当てられます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。
手順
オプション: 現在の外部 IP 設定を表示するには、以下のコマンドを入力します。
oc describe networks.config cluster
$ oc describe networks.config cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 設定を編集するには、以下のコマンドを入力します。
oc edit networks.config cluster
$ oc edit networks.config cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の例のように ExternalIP 設定を変更します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
externalIP
スタンザの設定を指定します。
更新された ExternalIP 設定を確認するには、以下のコマンドを入力します。
oc get networks.config cluster -o go-template='{{.spec.externalIP}}{{"\n"}}'
$ oc get networks.config cluster -o go-template='{{.spec.externalIP}}{{"\n"}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.2.9. 次のステップ リンクのコピーリンクがクリップボードにコピーされました!
7.2.3. Ingress Controller を使用した Ingress クラスターの設定 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は、クラスター内で実行されるサービスを使用してクラスター外からの通信を可能にする方法を提供します。この方法は Ingress Controller を使用します。
7.2.3.1. Ingress Controller およびルートの使用 リンクのコピーリンクがクリップボードにコピーされました!
Ingress Operator は Ingress Controller およびワイルドカード DNS を管理します。
Ingress Controller の使用は、最も一般的な、OpenShift Container Platform クラスターへの外部アクセスを許可する方法です。
Ingress Controller は外部要求を許可し、設定されたルートに基づいてそれらをプロキシー送信するよう設定されます。これは、HTTP、SNI を使用する HTTPS、SNI を使用する TLS に限定されており、SNI を使用する TLS で機能する Web アプリケーションやサービスには十分な設定です。
管理者と連携して Ingress Controller を設定します。外部要求を許可し、設定されたルートに基づいてそれらをプロキシー送信するように Ingress Controller を設定します。
管理者はワイルドカード DNS エントリーを作成してから Ingress Controller を設定できます。その後は管理者に問い合わせることなく edge Ingress Controller と連携できます。
デフォルトで、クラスター内のすべての Ingress Controller はクラスター内の任意のプロジェクトで作成されたすべてのルートを許可します。
Ingress Controller:
- デフォルトでは 2 つのレプリカがあるので、これは 2 つのワーカーノードで実行する必要があります。
- 追加のノードにレプリカを組み込むためにスケールアップすることができます。
このセクションの手順では、クラスターの管理者が事前に行っておく必要のある前提条件があります。
7.2.3.2. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
以下の手順を開始する前に、管理者は以下の条件を満たしていることを確認する必要があります。
- 要求がクラスターに到達できるように、クラスターネットワーク環境に対して外部ポートをセットアップします。
クラスター管理者ロールを持つユーザーが 1 名以上いることを確認します。このロールをユーザーに追加するには、以下のコマンドを実行します。
oc adm policy add-cluster-role-to-user cluster-admin username
$ oc adm policy add-cluster-role-to-user cluster-admin username
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1 つ以上のマスターと 1 つ以上のノードを持つ OpenShift Container Platform クラスターと、クラスターへのネットワークアクセス権を持つクラスター外部のシステムを用意します。この手順では、外部システムがクラスターと同じサブセットにあることを前提とします。別のサブセットの外部システムに必要な追加のネットワーク設定については、このトピックでは扱いません。
7.2.3.3. プロジェクトおよびサービスの作成 リンクのコピーリンクがクリップボードにコピーされました!
公開するプロジェクトとサービスが存在しない場合は、プロジェクトを作成してからサービスを作成します。
プロジェクトとサービスがすでに存在する場合は、サービスを公開してルートを作成する手順に進みます。
前提条件
-
OpenShift CLI (
oc
) をインストールし、クラスター管理者としてログインしている。
手順
oc new-project
コマンドを実行して、サービス用の新しいプロジェクトを作成します。oc new-project <project_name>
$ oc new-project <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc new-app
コマンドを使用してサービスを作成します。oc new-app nodejs:12~https://github.com/sclorg/nodejs-ex.git
$ oc new-app nodejs:12~https://github.com/sclorg/nodejs-ex.git
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サービスが作成されたことを確認するには、以下のコマンドを実行します。
oc get svc -n <project_name>
$ oc get svc -n <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nodejs-ex ClusterIP 172.30.197.157 <none> 8080/TCP 70s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nodejs-ex ClusterIP 172.30.197.157 <none> 8080/TCP 70s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記デフォルトで、新規サービスには外部 IP アドレスがありません。
7.2.3.4. ルートの作成によるサービスの公開 リンクのコピーリンクがクリップボードにコピーされました!
oc expose
コマンドを使用して、サービスをルートとして公開することができます。
前提条件
- OpenShift Container Platform にログインしている。
手順
公開するサービスが置かれているプロジェクトにログインします。
oc project <project_name>
$ oc project <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc expose service
コマンドを実行して、ルートを公開します。oc expose service nodejs-ex
$ oc expose service nodejs-ex
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
route.route.openshift.io/nodejs-ex exposed
route.route.openshift.io/nodejs-ex exposed
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サービスが公開されていることを確認するには、
curl
などのツールを使用して、クラスター外からサービスにアクセスできることを確認します。ルートのホスト名を見つけるには、次のコマンドを入力します。
oc get route
$ oc get route
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD nodejs-ex nodejs-ex-myproject.example.com nodejs-ex 8080-tcp None
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD nodejs-ex nodejs-ex-myproject.example.com nodejs-ex 8080-tcp None
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ホストが GET 要求に応答することを確認するには、次のコマンドを入力します。
curl
コマンドの例curl --head nodejs-ex-myproject.example.com
$ curl --head nodejs-ex-myproject.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
HTTP/1.1 200 OK ...
HTTP/1.1 200 OK ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.3.5. OpenShift Container Platform での Ingress シャーディング リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform では、Ingress Controller はすべてのルートを提供することも、ルートのサブセットを提供することもできます。デフォルトでは、Ingress Controller は、クラスター内の任意の namespace で作成されたすべてのルートを提供します。別の Ingress Controller をクラスターに追加して、選択した特性に基づくルートのサブセットである シャード を作成することにより、ルーティングを最適化できます。ルートをシャードのメンバーとしてマークするには、ルートまたは namespace の メタデータ
フィールドでラベルを使用します。Ingress Controller は、選択式 とも呼ばれる セレクター を使用して、ルートのプール全体からルートのサブセットを選択し、サービスを提供します。
Ingress シャーディングは、受信トラフィックを複数の Ingress Controller 間で負荷分散する場合に、トラフィックを分離して特定の Ingress Controller にルーティングする場合、または次のセクションで説明する他のさまざまな理由で役立ちます。
デフォルトでは、各ルートはクラスターのデフォルトドメインを使用します。ただし、代わりにルーターのドメインを使用するようにルートを設定できます。
7.2.3.6. Ingress Controller のシャーディング リンクのコピーリンクがクリップボードにコピーされました!
Ingress シャーディング (ルーターシャーディングとも呼ばれます) を使用して、ルート、namespace、またはその両方にラベルを追加することで、一連のルートを複数のルーターに分散できます。Ingress Controller は、対応する一連のセレクターを使用して、指定されたラベルが含まれるルートのみを許可します。各 Ingress シャードは、特定の選択式を使用してフィルタリングされたルートで構成されます。
トラフィックがクラスターに送信される主要なメカニズムとして、Ingress Controller への要求が大きくなる可能性があります。クラスター管理者は、以下を実行するためにルートをシャード化できます。
- Ingress Controller またはルーターを複数のルートに分散し、変更に対する応答を高速化する。
- 特定のルートに、他のルートとは異なる信頼性保証を割り当てる。
- 特定の Ingress Controller に異なるポリシーを定義することを許可します。
- 特定のルートのみが追加機能を使用することを許可します。
- たとえば、異なるアドレスで異なるルートを公開し、内部ユーザーおよび外部ユーザーが異なるルートを認識できるようにします。
- Blue-Green デプロイ時に、あるバージョンのアプリケーションから別のバージョンにトラフィックを転送する。
Ingress Controller がシャーディングされると、特定のルートがグループ内の 0 個以上の Ingress Controller に受け入れられます。ルートのステータスから、Ingress Controller がルートを許可したかどうかがわかります。Ingress Controller は、ルートがシャードに固有のものである場合にのみルートを許可します。
シャーディングを使用すると、ルートのサブセットを複数の Ingress Controller に分散できます。ルートのサブセットは、重複なし (従来 のシャーディング) にすることも、重複あり (オーバーラップ シャーディング) にすることもできます。
次の表に、3 つのシャーディング方法の概要を示します。
シャーディング方法 | 説明 |
---|---|
namespace セレクター | Ingress Controller に namespace セレクターを追加すると、namespace セレクターに一致するラベルを持つ namespace 内のすべてのルートが Ingress シャードに追加されます。namespace 内に作成されたすべてのルートを Ingress Controller で提供する場合は、この方法を検討してください。 |
ルートセレクター | Ingress Controller にルートセレクターを追加すると、ルートセレクターに一致するラベルを持つすべてのルートが Ingress シャードに追加されます。ルートのサブセットのみ、または namespace 内の特定のルートのみを Ingress Controller で提供する場合は、この方法を検討してください。 |
namespace およびルートセレクター | namespace セレクターとルートセレクター両方の方法で Ingress Controller のスコープを指定します。namespace セレクターとルートセレクター両方の方法の柔軟性が必要な場合は、この方法を検討してください。 |
7.2.3.6.1. 従来のシャーディングの例 リンクのコピーリンクがクリップボードにコピーされました!
キー値が finance
と ops
に設定されたラベルセレクター spec.namespaceSelector.matchExpressions
を持つ、設定済みの Ingress Controller finops-router
の例:
finops-router
の YAML 定義の例
キー値が dev
に設定されたラベルセレクター spec.namespaceSelector.matchLabels.name
を持つ、設定済みの Ingress Controller dev-router
の例:
dev-router
の YAML 定義の例
すべてのアプリケーションルートが、それぞれ name:finance
、name:ops
、name:dev
などのラベルが付けられた別々の namespace にある場合は、設定によって 2 つの Ingress Controller 間でルートが効果的に分散されます。コンソール、認証、およびその他の目的の OpenShift Container Platform ルートは処理しないでください。
前のシナリオでは、シャーディングは重複するサブセットを持たないパーティション設定の特別なケースとなります。ルートは複数のルーターシャード間で分割されます。
デフォルト
の Ingress Controller は、namespaceSelector
または routeSelector
フィールドに除外対象のルートが含まれていない限り、引き続きすべてのルートを提供します。デフォルトの Ingress Controller からルートを除外する方法の詳細は、この Red Hat ナレッジベースのソリューション と「デフォルトの Ingress Controller のシャーディング」のセクションを参照してください。
7.2.3.6.2. 重複シャーディングの例 リンクのコピーリンクがクリップボードにコピーされました!
キー値が dev
と ops
に設定されたラベルセレクター spec.namespaceSelector.matchExpressions
を持つ、設定済みの Ingress Controller devops-router
の例:
devops-router
の YAML 定義の例
name:dev
および name:ops という
名前の namespace のルートは、2 つの異なる Ingress Controller によって処理されるようになりました。この設定では、ルートのサブセットが重複しています。
重複するルートのサブセットを使用すると、より複雑なルーティングルールを作成できます。たとえば、優先度の低いトラフィックを devops-router
に送信しながら、優先度の高いトラフィックを専用の finops-router
に迂回させることができます。
7.2.3.6.3. デフォルトの Ingress Controller のシャーディング リンクのコピーリンクがクリップボードにコピーされました!
新しい Ingress シャードを作成した後に、デフォルトの Ingress Controller と、新しい Ingress シャードの両方により許可されるルートが存在する場合があります。これは、デフォルトの Ingress Controller にセレクターがなく、デフォルトですべてのルートを許可するためです。
namespace セレクターまたはルートセレクターを使用して、Ingress Controller が特定のラベルが割り当てられたルートの処理を制限できます。次の手順では、namespace セレクターを使用して、デフォルトの Ingress Controller が新しく分割された finance
、ops
、および dev
ルートにサービスを提供しないように制限します。これにより、Ingress シャードがさらに分離されます。
OpenShift Container Platform のすべての管理ルートを同じ Ingress Controller で保持する必要があります。したがって、これらの重要なルートを除外するセレクターをデフォルトの Ingress Controller に追加することは避けてください。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 - プロジェクト管理者としてログインしている。
手順
次のコマンドを実行して、デフォルトの Ingress Controller を変更します。
oc edit ingresscontroller -n openshift-ingress-operator default
$ oc edit ingresscontroller -n openshift-ingress-operator default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ingress Controller を編集して、
finance
、ops
、およびdev
ラベルのいずれかを持つルートを除外するnamespaceSelector
を含めます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
デフォルトの Ingress Controller では、name:finance
、name:ops
、および name:dev
という名前の namespace が提供されなくなります。
7.2.3.6.4. Ingress シャーディングと DNS リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、プロジェクト内のルーターごとに個別の DNS エントリーを作成します。ルーターは不明なルートを別のルーターに転送することはありません。
以下の例を考慮してください。
-
Router A はホスト 192.168.0.5 にあり、
*.foo.com
のルートを持つ。 -
Router B はホスト 192.168.1.9 にあり、
*.example.com
のルートを持つ。
個別の DNS エントリーは、*.foo.com
をルーター A をホストするノードに解決し、*.example.com
をルーター B をホストするノードに解決する必要があります。
-
*.foo.com A IN 192.168.0.5
-
*.example.com A IN 192.168.1.9
7.2.3.6.5. ルートラベルを使用した Ingress Controller のシャーディングの設定 リンクのコピーリンクがクリップボードにコピーされました!
ルートラベルを使用した Ingress Controller のシャーディングとは、Ingress Controller がルートセレクターによって選択される任意 namespace の任意のルートを提供することを意味します。
図7.1 ルートラベルを使用した Ingress シャーディング
Ingress Controller のシャーディングは、一連の Ingress Controller 間で着信トラフィックの負荷を分散し、トラフィックを特定の Ingress Controller に分離する際に役立ちます。たとえば、Company A のトラフィックをある Ingress Controller に指定し、Company B を別の Ingress Controller に指定できます。
手順
router-internal.yaml
ファイルを編集します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Ingress Controller が使用するドメインを指定します。このドメインは、デフォルトの Ingress Controller ドメインとは異なる必要があります。
Ingress Controller の
router-internal.yaml
ファイルを適用します。oc apply -f router-internal.yaml
# oc apply -f router-internal.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ingress Controller は、
type: sharded
というラベルのある namespace のルートを選択します。router-internal.yaml
で設定されたドメインを使用して新しいルートを作成します。oc expose svc <service-name> --hostname <route-name>.apps-sharded.basedomain.example.net
$ oc expose svc <service-name> --hostname <route-name>.apps-sharded.basedomain.example.net
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.3.6.6. namespace ラベルを使用した Ingress Controller のシャーディングの設定 リンクのコピーリンクがクリップボードにコピーされました!
namespace ラベルを使用した Ingress Controller のシャーディングとは、Ingress Controller が namespace セレクターによって選択される任意の namespace の任意のルートを提供することを意味します。
図7.2 namespace ラベルを使用した Ingress シャーディング
Ingress Controller のシャーディングは、一連の Ingress Controller 間で着信トラフィックの負荷を分散し、トラフィックを特定の Ingress Controller に分離する際に役立ちます。たとえば、Company A のトラフィックをある Ingress Controller に指定し、Company B を別の Ingress Controller に指定できます。
手順
router-internal.yaml
ファイルを編集します。cat router-internal.yaml
$ cat router-internal.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Ingress Controller が使用するドメインを指定します。このドメインは、デフォルトの Ingress Controller ドメインとは異なる必要があります。
Ingress Controller の
router-internal.yaml
ファイルを適用します。oc apply -f router-internal.yaml
$ oc apply -f router-internal.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ingress Controller は、
type: sharded
というラベルのある namespace セレクターによって選択される namespace のルートを選択します。router-internal.yaml
で設定されたドメインを使用して新しいルートを作成します。oc expose svc <service-name> --hostname <route-name>.apps-sharded.basedomain.example.net
$ oc expose svc <service-name> --hostname <route-name>.apps-sharded.basedomain.example.net
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.3.6.7. Ingress Controller シャーディングのルート作成 リンクのコピーリンクがクリップボードにコピーされました!
ルートを使用すると、URL でアプリケーションをホストできます。この場合、ホスト名は設定されず、ルートは代わりにサブドメインを使用します。サブドメインを指定すると、ルートを公開する Ingress Controller のドメインが自動的に使用されます。ルートが複数の Ingress Controller によって公開されている状況では、ルートは複数の URL でホストされます。
以下の手順では、例として hello-openshift
アプリケーションを使用して、Ingress Controller シャーディングのルートを作成する方法を説明します。
Ingress Controller のシャーディングは、一連の Ingress Controller 間で着信トラフィックの負荷を分散し、トラフィックを特定の Ingress Controller に分離する際に役立ちます。たとえば、Company A のトラフィックをある Ingress Controller に指定し、Company B を別の Ingress Controller に指定できます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 - プロジェクト管理者としてログインしている。
- ポートを公開する Web アプリケーションと、そのポート上のトラフィックをリッスンする HTTP または TLS エンドポイントがある。
- シャーディング用に Ingress Controller を設定している。
手順
次のコマンドを実行して、
hello-openshift
というプロジェクトを作成します。oc new-project hello-openshift
$ oc new-project hello-openshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行してプロジェクトに Pod を作成します。
oc create -f https://raw.githubusercontent.com/openshift/origin/master/examples/hello-openshift/hello-pod.json
$ oc create -f https://raw.githubusercontent.com/openshift/origin/master/examples/hello-openshift/hello-pod.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、
hello-openshift
というサービスを作成します。oc expose pod/hello-openshift
$ oc expose pod/hello-openshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow hello-openshift-route.yaml
というルート定義を作成します。シャーディング用に作成したルートの YAML 定義
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行し、
hello-openshift-route.yaml
を使用してhello-openshift
アプリケーションへのルートを作成します。oc -n hello-openshift create -f hello-openshift-route.yaml
$ oc -n hello-openshift create -f hello-openshift-route.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
次のコマンドを使用して、ルートのステータスを取得します。
oc -n hello-openshift get routes/hello-openshift-edge -o yaml
$ oc -n hello-openshift get routes/hello-openshift-edge -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 結果の
Route
リソースは次のようになります。出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
7.2.4. Ingress Controller エンドポイント公開戦略の設定 リンクのコピーリンクがクリップボードにコピーされました!
endpointPublishingStrategy
は Ingress Controller エンドポイントを他のネットワークに公開し、ロードバランサーの統合を有効にし、他のシステムへのアクセスを提供するために使用されます。
Red Hat OpenStack Platform (RHOSP) では、クラウドプロバイダーがヘルスモニターを作成するように設定されている場合にのみ、LoadBalancerService
エンドポイントの公開ストラテジーがサポートされます。RHOSP 16.2 の場合、このストラテジーは Amphora Octavia プロバイダーを使用する場合にのみ可能です。
詳細は、RHOSP インストールドキュメントの「RHOSP Cloud Controller Manager オプションの設定」セクションを参照してください。
7.2.4.1. Ingress Controller エンドポイントの公開ストラテジー リンクのコピーリンクがクリップボードにコピーされました!
NodePortService
エンドポイントの公開ストラテジー
NodePortService
エンドポイント公開ストラテジーは、Kubernetes NodePort サービスを使用して Ingress Controller を公開します。
この設定では、Ingress Controller のデプロイメントはコンテナーのネットワークを使用します。NodePortService
はデプロイメントを公開するために作成されます。特定のノードポートは OpenShift Container Platform によって動的に割り当てられますが、静的ポートの割り当てをサポートするために、管理対象の NodePortService
のノードポートフィールドへの変更が保持されます。
図7.3 NodePortService の図
前述の図では、OpenShift Container Platform Ingress NodePort エンドポイントの公開戦略に関する以下のような概念を示しています。
- クラスターで利用可能なノードにはすべて、外部からアクセス可能な独自の IP アドレスが割り当てられています。クラスター内で動作するサービスは、全ノードに固有の NodePort にバインドされます。
-
たとえば、クライアントが図に示す IP アドレス
10.0.128.4
に接続してダウンしているノードに接続した場合に、ノードポートは、サービスを実行中で利用可能なノードにクライアントを直接接続します。このシナリオでは、ロードバランシングは必要ありません。イメージが示すように、10.0.128.4
アドレスがダウンしており、代わりに別の IP アドレスを使用する必要があります。
Ingress Operator は、サービスの .spec.ports[].nodePort
フィールドへの更新を無視します。
デフォルトで、ポートは自動的に割り当てられ、各種の統合用のポート割り当てにアクセスできます。ただし、既存のインフラストラクチャーと統合するために静的ポートの割り当てが必要になることがありますが、これは動的ポートに対応して簡単に再設定できない場合があります。静的ノードポートとの統合を実行するには、マネージドのサービスリソースを直接更新できます。
詳細は、NodePort
に関する Kubernetes サービスのドキュメント を参照してください。
HostNetwork
エンドポイントの公開ストラテジー
HostNetwork
エンドポイント公開ストラテジーは、Ingress Controller がデプロイされるノードポートで Ingress Controller を公開します。
HostNetwork
エンドポイント公開ストラテジーを持つ Ingress Controller には、ノードごとに 1 つの Pod レプリカのみを設定できます。n のレプリカを使用する場合、それらのレプリカをスケジュールできる n 以上のノードを使用する必要があります。各 Pod はスケジュールされるノードホストでポート 80
および 443
を要求するので、同じノードで別の Pod がそれらのポートを使用している場合、レプリカをノードにスケジュールすることはできません。
HostNetwork
オブジェクトには、オプションのバインディングポートのデフォルト値が httpPort:80
、httpsPort:443
、statsPort:1936
の hostNetwork
フィールドがあります。ネットワークに異なるバインディングポートを指定することで、HostNetwork
ストラテジーに対して、同じノードに複数の Ingress Controller をデプロイできます。
例
7.2.4.1.1. Ingress Controller エンドポイント公開スコープの内部への設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者がクラスターをプライベートに指定せずに新しいクラスターをインストールすると、scope
が External
に設定されたデフォルトの Ingress Controller が作成されます。クラスター管理者は、External
スコープの Ingress Controller を Internal
に変更できます。
前提条件
-
oc
CLI がインストールされている。
手順
External
スコープの Ingress Controller をInternal
に変更するには、次のコマンドを入力します。oc -n openshift-ingress-operator patch ingresscontrollers/default --type=merge --patch='{"spec":{"endpointPublishingStrategy":{"type":"LoadBalancerService","loadBalancer":{"scope":"Internal"}}}}'
$ oc -n openshift-ingress-operator patch ingresscontrollers/default --type=merge --patch='{"spec":{"endpointPublishingStrategy":{"type":"LoadBalancerService","loadBalancer":{"scope":"Internal"}}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ingress Controller のステータスを確認するには、次のコマンドを入力します。
oc -n openshift-ingress-operator get ingresscontrollers/default -o yaml
$ oc -n openshift-ingress-operator get ingresscontrollers/default -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ステータス状態が
Progressing
の場合は、さらにアクションを実行する必要があるかどうかを示します。たとえば、ステータスの状態によっては、次のコマンドを入力して、サービスを削除する必要があることを示している可能性があります。oc -n openshift-ingress delete services/router-default
$ oc -n openshift-ingress delete services/router-default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サービスを削除すると、Ingress Operator はサービスを
Internal
として再作成します。
7.2.4.1.2. Ingress Controller エンドポイント公開スコープの外部への設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者がクラスターをプライベートに指定せずに新しいクラスターをインストールすると、scope
が External
に設定されたデフォルトの Ingress Controller が作成されます。
Ingress Controller のスコープは、インストール中またはインストール後に Internal
になるように設定でき、クラスター管理者は Internal
の Ingress Controller を External
に変更できます。
一部のプラットフォームでは、サービスを削除して再作成する必要があります。
スコープを変更すると、場合によっては数分間、Ingress トラフィックが中断される可能性があります。これが該当するのは、サービスを削除して再作成する必要があるプラットフォームです。理由は、この手順により、OpenShift Container Platform が既存のサービスロードバランサーのプロビジョニングを解除して新しいサービスロードバランサーをプロビジョニングし、DNS を更新する可能性があるためです。
前提条件
-
oc
CLI がインストールされている。
手順
Internal
スコープの入力コントローラーをExternal
に変更するには、次のコマンドを入力します。oc -n openshift-ingress-operator patch ingresscontrollers/private --type=merge --patch='{"spec":{"endpointPublishingStrategy":{"type":"LoadBalancerService","loadBalancer":{"scope":"External"}}}}'
$ oc -n openshift-ingress-operator patch ingresscontrollers/private --type=merge --patch='{"spec":{"endpointPublishingStrategy":{"type":"LoadBalancerService","loadBalancer":{"scope":"External"}}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ingress Controller のステータスを確認するには、次のコマンドを入力します。
oc -n openshift-ingress-operator get ingresscontrollers/default -o yaml
$ oc -n openshift-ingress-operator get ingresscontrollers/default -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ステータス状態が
Progressing
の場合は、さらにアクションを実行する必要があるかどうかを示します。たとえば、ステータスの状態によっては、次のコマンドを入力して、サービスを削除する必要があることを示している可能性があります。oc -n openshift-ingress delete services/router-default
$ oc -n openshift-ingress delete services/router-default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サービスを削除すると、Ingress Operator はサービスを
External
として再作成します。
7.2.4.1.3. Ingress Controller への単一の NodePort サービスの追加 リンクのコピーリンクがクリップボードにコピーされました!
各プロジェクトに NodePort
タイプの Service
を作成する代わりに、NodePortService
エンドポイント公開ストラテジーを使用するカスタム Ingress Controller を作成できます。Ingress シャーディングを介して、すでに HostNetwork
Ingress Controller が存在する可能性のあるノードにルートのセットを適用する場合は、ポートの競合を防ぐために、このような Ingress Controller の設定を検討してください。
各プロジェクトに NodePort
タイプの Service
を設定する前に、次の考慮事項を確認してください。
- Nodeport Ingress Controller ドメインのワイルドカード DNS レコードを作成する必要があります。Nodeport Ingress Controller ルートには、ワーカーノードのアドレスからアクセスできます。ルートに必要な DNS レコードの詳細は、「user-provisioned DNS 要件」を参照してください。
-
サービス用のルートを公開し、カスタム Ingress Controller ドメインの
--hostname
引数を指定する必要があります。 -
アプリケーション Pod にアクセスできるようにするには、
NodePort
タイプのService
に割り当てられているポートをルートに追加する必要があります。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてログインしている。 - ワイルドカード DNS レコードが作成されている。
手順
Ingress Controller のカスタムリソース (CR) ファイルを作成します。
IngressController
オブジェクトの情報を定義する CR ファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
IngressController
CR のカスタムのname
を指定します。- 2
- Ingress Controller が提供する DNS の名前。たとえば、デフォルトの ingresscontroller ドメインは
apps.ipi-cluster.example.com
であるため、<custom_ic_domain_name>
にはnodeportsvc.ipi-cluster.example.com
を指定します。 - 3
- カスタム Ingress Controller を含むノードのラベルを指定します。
- 4
- namespace のセットのラベルを指定します。
<key>:<value>
は、キーと値のペアのマップに置き換えます。<key>
は新しいラベルの一意の名前、<value>
はその値です。たとえば、ingresscontroller: custom-ic
です。
oc label node
コマンドを使用してノードにラベルを追加します。oc label node <node_name> <key>=<value>
$ oc label node <node_name> <key>=<value>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<value>
は、IngressController
CR のnodePlacement
セクションで指定したキーと値のペアと同じである必要があります。
IngressController
オブジェクトを作成します。oc create -f <ingress_controller_cr>.yaml
$ oc create -f <ingress_controller_cr>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IngressController
CR 用に作成されたサービスのポートを確認します。oc get svc -n openshift-ingress
$ oc get svc -n openshift-ingress
Copy to Clipboard Copied! Toggle word wrap Toggle overflow router-nodeport-custom-ic3
サービスのポート80:32432/TCP
を示す出力例NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE router-internal-default ClusterIP 172.30.195.74 <none> 80/TCP,443/TCP,1936/TCP 223d router-nodeport-custom-ic3 NodePort 172.30.109.219 <none> 80:32432/TCP,443:31366/TCP,1936:30499/TCP 155m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE router-internal-default ClusterIP 172.30.195.74 <none> 80/TCP,443/TCP,1936/TCP 223d router-nodeport-custom-ic3 NodePort 172.30.109.219 <none> 80:32432/TCP,443:31366/TCP,1936:30499/TCP 155m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいプロジェクトを作成するために、次のコマンドを入力します。
oc new-project <project_name>
$ oc new-project <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい namespace にラベルを付けるために、次のコマンドを入力します。
oc label namespace <project_name> <key>=<value>
$ oc label namespace <project_name> <key>=<value>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<key>=<value>
は、Ingress Controller CR のnamespaceSelector
セクションの値と同じである必要があります。
クラスター内に新しいアプリケーションを作成します。
oc new-app --image=<image_name>
$ oc new-app --image=<image_name>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<image_name>
の例は、quay.io/openshifttest/hello-openshift:multiarch
です。
サービスの
Route
オブジェクトを作成して、Pod がサービスを使用してアプリケーションをクラスターの外部に公開できるようにします。oc expose svc/<service_name> --hostname=<svc_name>-<project_name>.<custom_ic_domain_name>
$ oc expose svc/<service_name> --hostname=<svc_name>-<project_name>.<custom_ic_domain_name>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記--hostname
引数で、カスタム Ingress Controller のドメイン名を指定する必要があります。これを行わない場合、Ingress Operator がデフォルトの Ingress Controller を使用してクラスターのすべてのルートを提供します。ルートのステータスが
Admitted
であり、カスタム Ingress Controller のメタデータがルートに含まれていることを確認します。oc get route/hello-openshift -o json | jq '.status.ingress'
$ oc get route/hello-openshift -o json | jq '.status.ingress'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトの
IngressController
CR を更新して、デフォルトの Ingress Controller がNodePort
タイプのService
を管理しないようにします。他のすべてのクラスタートラフィックは、引き続きデフォルトの Ingress Controller によって監視します。oc patch --type=merge -n openshift-ingress-operator ingresscontroller/default --patch '{"spec":{"namespaceSelector":{"matchExpressions":[{"key":"<key>","operator":"NotIn","values":["<value>]}]}}}'
$ oc patch --type=merge -n openshift-ingress-operator ingresscontroller/default --patch '{"spec":{"namespaceSelector":{"matchExpressions":[{"key":"<key>","operator":"NotIn","values":["<value>]}]}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
次のコマンドを入力して、DNS エントリーがクラスターの内外にルーティングできることを確認します。このコマンドでは、上記の手順で
oc label node
コマンドを実行してラベルを追加したノードの IP アドレスが出力されます。dig +short <svc_name>-<project_name>.<custom_ic_domain_name>
$ dig +short <svc_name>-<project_name>.<custom_ic_domain_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスターが DNS 解決に外部 DNS サーバーの IP アドレスを使用していることを確認するために、次のコマンドを入力してクラスターの接続を確認します。
curl <svc_name>-<project_name>.<custom_ic_domain_name>:<port>
$ curl <svc_name>-<project_name>.<custom_ic_domain_name>:<port>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Hello OpenShift!
Hello OpenShift!
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.5. ロードバランサーを使用した Ingress クラスターの設定 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は、クラスター内で実行されるサービスを使用してクラスター外からの通信を可能にする方法を提供します。この方法では、ロードバランサーを使用します。
7.2.5.1. ロードバランサーを使用したトラフィックのクラスターへの送信 リンクのコピーリンクがクリップボードにコピーされました!
特定の外部 IP アドレスを必要としない場合、ロードバランサーサービスを OpenShift Container Platform クラスターへの外部アクセスを許可するよう設定することができます。
ロードバランサーサービスは固有の IP を割り当てます。ロードバランサーには単一の edge ルーター IP があります (これは仮想 IP (VIP) の場合もありますが、初期の負荷分散では単一マシンになります。
プールが設定される場合、これはクラスター管理者によってではなく、インフラストラクチャーレベルで実行されます。
このセクションの手順では、クラスターの管理者が事前に行っておく必要のある前提条件があります。
7.2.5.2. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
以下の手順を開始する前に、管理者は以下の条件を満たしていることを確認する必要があります。
- 要求がクラスターに到達できるように、クラスターネットワーク環境に対して外部ポートをセットアップします。
クラスター管理者ロールを持つユーザーが 1 名以上いることを確認します。このロールをユーザーに追加するには、以下のコマンドを実行します。
oc adm policy add-cluster-role-to-user cluster-admin username
$ oc adm policy add-cluster-role-to-user cluster-admin username
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - OpenShift Container Platform クラスターを、1 つ以上のマスターと 1 つ以上のノード、およびクラスターへのネットワークアクセスのあるクラスター外のシステムと共に用意します。この手順では、外部システムがクラスターと同じサブセットにあることを前提とします。別のサブセットの外部システムに必要な追加のネットワーク設定については、このトピックでは扱いません。
7.2.5.3. プロジェクトおよびサービスの作成 リンクのコピーリンクがクリップボードにコピーされました!
公開するプロジェクトとサービスが存在しない場合は、プロジェクトを作成してからサービスを作成します。
プロジェクトとサービスがすでに存在する場合は、サービスを公開してルートを作成する手順に進みます。
前提条件
-
OpenShift CLI (
oc
) をインストールし、クラスター管理者としてログインしている。
手順
oc new-project
コマンドを実行して、サービス用の新しいプロジェクトを作成します。oc new-project <project_name>
$ oc new-project <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc new-app
コマンドを使用してサービスを作成します。oc new-app nodejs:12~https://github.com/sclorg/nodejs-ex.git
$ oc new-app nodejs:12~https://github.com/sclorg/nodejs-ex.git
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サービスが作成されたことを確認するには、以下のコマンドを実行します。
oc get svc -n <project_name>
$ oc get svc -n <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nodejs-ex ClusterIP 172.30.197.157 <none> 8080/TCP 70s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nodejs-ex ClusterIP 172.30.197.157 <none> 8080/TCP 70s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記デフォルトで、新規サービスには外部 IP アドレスがありません。
7.2.5.4. ルートの作成によるサービスの公開 リンクのコピーリンクがクリップボードにコピーされました!
oc expose
コマンドを使用して、サービスをルートとして公開することができます。
前提条件
- OpenShift Container Platform にログインしている。
手順
公開するサービスが置かれているプロジェクトにログインします。
oc project <project_name>
$ oc project <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc expose service
コマンドを実行して、ルートを公開します。oc expose service nodejs-ex
$ oc expose service nodejs-ex
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
route.route.openshift.io/nodejs-ex exposed
route.route.openshift.io/nodejs-ex exposed
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サービスが公開されていることを確認するには、
curl
などのツールを使用して、クラスター外からサービスにアクセスできることを確認します。ルートのホスト名を見つけるには、次のコマンドを入力します。
oc get route
$ oc get route
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD nodejs-ex nodejs-ex-myproject.example.com nodejs-ex 8080-tcp None
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD nodejs-ex nodejs-ex-myproject.example.com nodejs-ex 8080-tcp None
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ホストが GET 要求に応答することを確認するには、次のコマンドを入力します。
curl
コマンドの例curl --head nodejs-ex-myproject.example.com
$ curl --head nodejs-ex-myproject.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
HTTP/1.1 200 OK ...
HTTP/1.1 200 OK ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.5.5. ロードバランサーサービスの作成 リンクのコピーリンクがクリップボードにコピーされました!
以下の手順を使用して、ロードバランサーサービスを作成します。
前提条件
- 公開するプロジェクトとサービスがあること。
- クラウドプロバイダーがロードバランサーをサポートしている。
手順
ロードバランサーサービスを作成するには、以下を実行します。
- OpenShift Container Platform にログインします。
公開するサービスが置かれているプロジェクトを読み込みます。
oc project project1
$ oc project project1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コントロールプレーンノードでテキストファイルを開き、以下のテキストを貼り付け、必要に応じてファイルを編集します。
ロードバランサー設定ファイルのサンプル
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記ロードバランサーを通過するトラフィックを特定の IP アドレスに制限するには、Ingress Controller フィールド
spec.endpointPublishingStrategy.loadBalancer.allowedSourceRanges
を使用することを推奨します。loadBalancerSourceRanges
フィールドを設定しないでください。- ファイルを保存し、終了します。
以下のコマンドを実行してサービスを作成します。
oc create -f <file-name>
$ oc create -f <file-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下に例を示します。
oc create -f mysql-lb.yaml
$ oc create -f mysql-lb.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して新規サービスを表示します。
oc get svc
$ oc get svc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE egress-2 LoadBalancer 172.30.22.226 ad42f5d8b303045-487804948.example.com 3306:30357/TCP 15m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE egress-2 LoadBalancer 172.30.22.226 ad42f5d8b303045-487804948.example.com 3306:30357/TCP 15m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有効にされたクラウドプロバイダーがある場合、サービスには外部 IP アドレスが自動的に割り当てられます。
マスターで cURL などのツールを使用し、パブリック IP アドレスを使用してサービスに到達できることを確認します。
curl <public-ip>:<port>
$ curl <public-ip>:<port>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下に例を示します。
curl 172.29.121.74:3306
$ curl 172.29.121.74:3306
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このセクションの例では、クライアントアプリケーションを必要とする MySQL サービスを使用しています。
Got packets out of order
のメッセージと共に文字ストリングを取得する場合は、このサービスに接続していることになります。MySQL クライアントがある場合は、標準 CLI コマンドでログインします。
mysql -h 172.30.131.89 -u admin -p
$ mysql -h 172.30.131.89 -u admin -p
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. MySQL [(none)]>
Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. MySQL [(none)]>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.6. AWS での Ingress クラスタートラフィックの設定 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は、クラスター内で実行されるサービスを使用してクラスター外からの通信を可能にする方法を提供します。この方法では、AWS のロードバランサー、具体的には Network Load Balancer (NLB) またはク Classic Load Balancer (CLB) を使用します。どちらのタイプのロードバランサーもクライアントの IP アドレスをノードに転送できますが、CLB にはプロキシープロトコルのサポートが必要です。これは OpenShift Container Platform によって自動的に有効になります。
NLB を使用するように Ingress Controller を設定するには、次の 2 つの方法があります。
-
現在 CLB を使用している Ingress Controller を強制的に置き換える。これにより、
IngressController
オブジェクトが削除され、新しい DNS レコードが伝達され、NLB がプロビジョニングされている間、停止が発生します。 -
CLB を使用する既存の Ingress Controller を編集して、NLB を使用する。これにより、
IngressController
オブジェクトを削除して再作成することなく、ロードバランサーが変更されます。
どちらの方法も、NLB から CLB への切り替えに使用できます。
これらのロードバランサーは、新規または既存の AWS クラスターで設定できます。
7.2.6.1. AWS での Classic Load Balancer タイムアウトの設定 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は、特定のルートまたは Ingress Controller のカスタムタイムアウト期間を設定するためのメソッドを提供します。さらに、AWS Classic Load Balancer (CLB) には独自のタイムアウト期間があり、デフォルトは 60 秒です。
CLB のタイムアウト期間がルートタイムアウトまたは Ingress Controller タイムアウトよりも短い場合、ロードバランサーは接続を途中で終了する可能性があります。ルートと CLB の両方のタイムアウト期間を増やすことで、この問題を防ぐことができます。
7.2.6.1.1. ルートのタイムアウトの設定 リンクのコピーリンクがクリップボードにコピーされました!
Service Level Availability (SLA) で必要とされる、低タイムアウトが必要なサービスや、バックエンドでの処理速度が遅いケースで高タイムアウトが必要なサービスがある場合は、既存のルートに対してデフォルトのタイムアウトを設定することができます。
OpenShift Container Platform クラスターの前にユーザー管理の外部ロードバランサーを設定した場合は、ユーザー管理の外部ロードバランサーのタイムアウト値がルートのタイムアウト値よりも高いことを確認してください。この設定により、クラスターが使用するネットワーク上でのネットワーク輻輳の問題を防ぐことができます。
前提条件
- 実行中のクラスターでデプロイ済みの Ingress Controller が必要になります。
手順
oc annotate
コマンドを使用して、ルートにタイムアウトを追加します。oc annotate route <route_name> \ --overwrite haproxy.router.openshift.io/timeout=<timeout><time_unit>
$ oc annotate route <route_name> \ --overwrite haproxy.router.openshift.io/timeout=<timeout><time_unit>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- サポートされる時間単位は、マイクロ秒 (us)、ミリ秒 (ms)、秒 (s)、分 (m)、時間 (h)、または日 (d) です。
以下の例では、2 秒のタイムアウトを
myroute
という名前のルートに設定します。oc annotate route myroute --overwrite haproxy.router.openshift.io/timeout=2s
$ oc annotate route myroute --overwrite haproxy.router.openshift.io/timeout=2s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.6.1.2. Classic Load Balancer タイムアウトの設定 リンクのコピーリンクがクリップボードにコピーされました!
Classic Load Balancer (CLB) のデフォルトのタイムアウトを設定して、アイドル接続を延長できます。
前提条件
- 実行中のクラスターにデプロイ済みの Ingress Controller がある。
手順
次のコマンドを実行して、デフォルト
ingresscontroller
の AWS 接続アイドルタイムアウトを 5 分に設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 次のコマンドを実行して、タイムアウトのデフォルト値を復元します。
oc -n openshift-ingress-operator patch ingresscontroller/default \ --type=merge --patch='{"spec":{"endpointPublishingStrategy": \ {"loadBalancer":{"providerParameters":{"aws":{"classicLoadBalancer": \ {"connectionIdleTimeout":null}}}}}}}'
$ oc -n openshift-ingress-operator patch ingresscontroller/default \ --type=merge --patch='{"spec":{"endpointPublishingStrategy": \ {"loadBalancer":{"providerParameters":{"aws":{"classicLoadBalancer": \ {"connectionIdleTimeout":null}}}}}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
現在のスコープがすでに設定されている場合を除き、接続タイムアウト値を変更するには scope
フィールドを指定する必要があります。デフォルトのタイムアウト値に戻す場合は、scope
フィールドを設定する際に再度設定する必要はありません。
7.2.6.2. ネットワークロードバランサーを使用した AWS での Ingress クラスタートラフィックの設定 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は、クラスター内で実行されるサービスを使用してクラスター外からの通信を可能にする方法を提供します。そのような方法の 1 つでは、Network Load Balancer (NLB) を使用します。NLB を新規または既存の AWS クラスターに設定することができます。
7.2.6.2.1. Ingress Controller を Classic Load Balancer から Network Load Balancer に切り替える リンクのコピーリンクがクリップボードにコピーされました!
Classic Load Balancer (CLB) を使用している Ingress Controller を、AWS の Network Load Balancer (NLB) を使用する Ingress Controller に切り替えることができます。
これらのロードバランサーを切り替えても、IngressController
オブジェクトは削除されません。
この手順により、次の問題が発生する可能性があります。
- 新しい DNS レコードの伝播、新しいロードバランサーのプロビジョニング、およびその他の要因により、数分間続く可能性のある停止。この手順を適用すると、Ingress Controller ロードバランサーの IP アドレスや正規名が変更になる場合があります。
- サービスのアノテーションの変更により、ロードバランサーリソースがリークする。
手順
NLB を使用して切り替える既存の Ingress Controller を変更します。この例では、デフォルトの Ingress Controller に
External
スコープがあり、他のカスタマイズがないことを前提としています。ingresscontroller.yaml
ファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記spec.endpointPublishingStrategy.loadBalancer.providerParameters.aws.type
フィールドの値を指定しない場合、Ingress Controller は、インストール時に設定されたクラスターIngress
設定のspec.loadBalancer.platform.aws.type
値を使用します。ヒントIngress Controller に、ドメインの変更など、更新したい他のカスタマイズがある場合は、代わりに Ingress Controller 定義ファイルを強制的に置き換えることを検討してください。
次のコマンドを実行して、Ingress Controller YAML ファイルに変更を適用します。
oc apply -f ingresscontroller.yaml
$ oc apply -f ingresscontroller.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ingress Controller の更新中は、数分間の停止が予想されます。
7.2.6.2.2. Network Load Balancer の使用から Classic Load Balancer への Ingress Controller の切り替え リンクのコピーリンクがクリップボードにコピーされました!
Network Load Balancer (NLB) を使用している Ingress Controller を、AWS の Classic Load Balancer (CLB) を使用する Ingress Controller に切り替えることができます。
これらのロードバランサーを切り替えても、IngressController
オブジェクトは削除されません。
この手順により、新しい DNS レコードの伝播、新しいロードバランサーのプロビジョニング、およびその他の要因により、数分間続く停止が発生する可能性があります。この手順を適用すると、Ingress Controller ロードバランサーの IP アドレスや正規名が変更になる場合があります。
手順
CLB を使用して切り替える既存の Ingress Controller を変更します。この例では、デフォルトの Ingress Controller に
External
スコープがあり、他のカスタマイズがないことを前提としています。ingresscontroller.yaml
ファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記spec.endpointPublishingStrategy.loadBalancer.providerParameters.aws.type
フィールドの値を指定しない場合、Ingress Controller は、インストール時に設定されたクラスターIngress
設定のspec.loadBalancer.platform.aws.type
値を使用します。ヒントIngress Controller に、ドメインの変更など、更新したい他のカスタマイズがある場合は、代わりに Ingress Controller 定義ファイルを強制的に置き換えることを検討してください。
次のコマンドを実行して、Ingress Controller YAML ファイルに変更を適用します。
oc apply -f ingresscontroller.yaml
$ oc apply -f ingresscontroller.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ingress Controller の更新中は、数分間の停止が予想されます。
7.2.6.2.3. Ingress Controller Classic Load Balancer の Network Load Balancer への置き換え リンクのコピーリンクがクリップボードにコピーされました!
Classic Load Balancer (CLB) を使用している Ingress Controller は、AWS の Network Load Balancer (NLB) を使用している Ingress Controller に置き換えることができます。
この手順により、次の問題が発生する可能性があります。
- 新しい DNS レコードの伝播、新しいロードバランサーのプロビジョニング、およびその他の要因により、数分間続く可能性のある停止。この手順を適用すると、Ingress Controller ロードバランサーの IP アドレスや正規名が変更になる場合があります。
- サービスのアノテーションの変更により、ロードバランサーリソースがリークする。
手順
新しいデフォルトの Ingress Controller を含むファイルを作成します。以下の例では、デフォルトの Ingress Controller の範囲が
External
で、その他のカスタマイズをしていないことを想定しています。ingresscontroller.yml
ファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトの Ingress Controller が他にカスタマイズされている場合には、それに応じてファイルを修正してください。
ヒントIngress Controller に他のカスタマイズがなく、ロードバランサータイプのみを更新する場合は、「Ingress Controller を Classic Load Balancer から Network Load Balancer に切り替える」に記載の手順に従ってください。
Ingress Controller の YAML ファイルを強制的に置き換えます。
oc replace --force --wait -f ingresscontroller.yml
$ oc replace --force --wait -f ingresscontroller.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ingress Controller の置き換えが完了するまでお待ちください。数分間の停止が予想されます。
7.2.6.2.4. 既存 AWS クラスターでの Ingress Controller ネットワークロードバランサーの設定 リンクのコピーリンクがクリップボードにコピーされました!
AWS Network Load Balancer (NLB) がサポートする Ingress Controller を既存のクラスターに作成できます。
前提条件
- AWS クラスターがインストールされている。
インフラストラクチャーリソースの
PlatformStatus
は AWS である必要があります。PlatformStatus
が AWS であることを確認するには、以下を実行します。oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.type}'
$ oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.type}' AWS
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
既存のクラスターの AWS NLB がサポートする Ingress Controller を作成します。
Ingress Controller のマニフェストを作成します。
cat ingresscontroller-aws-nlb.yaml
$ cat ingresscontroller-aws-nlb.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスターにリソースを作成します。
oc create -f ingresscontroller-aws-nlb.yaml
$ oc create -f ingresscontroller-aws-nlb.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
新規 AWS クラスターで Ingress Controller NLB を設定する前に、インストール設定ファイルの作成 手順を完了する必要があります。
7.2.6.2.5. 新規 AWS クラスターでの Ingress Controller ネットワークロードバランサーの設定 リンクのコピーリンクがクリップボードにコピーされました!
新規クラスターに AWS Network Load Balancer (NLB) がサポートする Ingress Controller を作成できます。
前提条件
-
install-config.yaml
ファイルを作成し、これに対する変更を完了します。
手順
新規クラスターの AWS NLB がサポートする Ingress Controller を作成します。
インストールプログラムが含まれるディレクトリーに切り替え、マニフェストを作成します。
./openshift-install create manifests --dir <installation_directory>
$ ./openshift-install create manifests --dir <installation_directory>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<installation_directory>
については、クラスターのinstall-config.yaml
ファイルが含まれるディレクトリーの名前を指定します。
cluster-ingress-default-ingresscontroller.yaml
という名前のファイルを<installation_directory>/manifests/
ディレクトリーに作成します。touch <installation_directory>/manifests/cluster-ingress-default-ingresscontroller.yaml
$ touch <installation_directory>/manifests/cluster-ingress-default-ingresscontroller.yaml
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<installation_directory>
については、クラスターのmanifests/
ディレクトリーが含まれるディレクトリー名を指定します。
ファイルの作成後は、以下のようにいくつかのネットワーク設定ファイルが
manifests/
ディレクトリーに置かれます。ls <installation_directory>/manifests/cluster-ingress-default-ingresscontroller.yaml
$ ls <installation_directory>/manifests/cluster-ingress-default-ingresscontroller.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
cluster-ingress-default-ingresscontroller.yaml
cluster-ingress-default-ingresscontroller.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow エディターで
cluster-ingress-default-ingresscontroller.yaml
ファイルを開き、必要な Operator 設定を記述するカスタムリソース (CR) を入力します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
cluster-ingress-default-ingresscontroller.yaml
ファイルを保存し、テキストエディターを終了します。 -
オプション:
manifests/cluster-ingress-default-ingresscontroller.yaml
ファイルをバックアップします。インストールプログラムは、クラスターの作成時にmanifests/
ディレクトリーを削除します。
7.2.6.2.6. LoadBalancerService Ingress Controller の作成時にサブネットを選択する リンクのコピーリンクがクリップボードにコピーされました!
既存クラスター内の Ingress Controller のロードバランサーサブネットを手動で指定できます。デフォルトでは、ロードバランサーのサブネットは AWS によって自動的に検出されます。しかし、Ingress Controller でサブネットを指定すると、これがオーバーライドされ、手動で制御できるようになります。
前提条件
- AWS クラスターがインストールされている。
-
IngressController
をマッピングするサブネットの名前または ID がわかっている。
手順
カスタムリソース (CR) ファイルを作成します。
次の内容の YAML ファイル (例:
sample-ingress.yaml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow カスタムリソース (CR) ファイルを作成します。
YAML ファイルにサブネットを追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<name>
は、IngressController
の名前に置き換えます。- 2
<domain>
は、IngressController
によって提供される DNS 名に置き換えます。- 3
- NLB を使用する場合は、
networkLoadBalancer
フィールドを使用することもできます。 - 4
- 必要に応じて、ID でサブネットを指定する代わりに、
names
フィールドを使用して名前でサブネットを指定することもできます。 - 5
- サブネット ID (
names
を使用する場合は名前) を指定します。重要アベイラビリティーゾーンごとに最大 1 つのサブネットを指定できます。外部 Ingress Controller にはパブリックサブネットだけを指定し、内部 Ingress Controller にはプライベートサブネットだけを指定してください。
CR ファイルを適用します。
ファイルを保存し、OpenShift CLI (
oc
) を使用して適用します。oc apply -f sample-ingress.yaml
$ oc apply -f sample-ingress.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IngressController
の状態を確認して、ロードバランサーが正常にプロビジョニングされたことを確認します。oc get ingresscontroller -n openshift-ingress-operator <name> -o jsonpath="{.status.conditions}" | yq -PC
$ oc get ingresscontroller -n openshift-ingress-operator <name> -o jsonpath="{.status.conditions}" | yq -PC
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.6.2.7. 既存の Ingress Controller のサブネットを更新する リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform で手動で指定したロードバランサーサブネットを使用して IngressController
を更新することで、システム停止を回避し、サービスの安定性を維持し、ネットワーク設定を特定の要件に準拠させることができます。次の手順では、新しいサブネットを選択して適用し、設定の変更を検証し、ロードバランサーのプロビジョニングが成功したことを確認する方法を示します。
この手順により、新しい DNS レコードの伝播、新しいロードバランサーのプロビジョニング、およびその他の要因により、数分間の停止が発生する可能性があります。この手順を適用すると、Ingress Controller ロードバランサーの IP アドレスや正規名が変更になる場合があります。
手順
手動で指定したロードバランサーサブネットを使用して IngressController
を更新するには、次の手順に従います。
既存の IngressController を変更して、新しいサブネットに更新します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要アベイラビリティーゾーンごとに最大 1 つのサブネットを指定できます。外部 Ingress Controller にはパブリックサブネットだけを指定し、内部 Ingress Controller にはプライベートサブネットだけを指定してください。
次のコマンドを実行して、
IngressController
のProgressing
状態を調べ、サブネットの更新を適用する方法について確認します。oc get ingresscontroller -n openshift-ingress-operator subnets -o jsonpath="{.status.conditions[?(@.type==\"Progressing\")]}" | yq -PC
$ oc get ingresscontroller -n openshift-ingress-operator subnets -o jsonpath="{.status.conditions[?(@.type==\"Progressing\")]}" | yq -PC
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
lastTransitionTime: "2024-11-25T20:19:31Z" message: 'One or more status conditions indicate progressing: LoadBalancerProgressing=True (OperandsProgressing: One or more managed resources are progressing: The IngressController subnets were changed from [...] to [...]. To effectuate this change, you must delete the service: `oc -n openshift-ingress delete svc/router-<name>`; the service load-balancer will then be deprovisioned and a new one created. This will most likely cause the new load-balancer to have a different host name and IP address and cause disruption. To return to the previous state, you can revert the change to the IngressController: [...]' reason: IngressControllerProgressing status: "True" type: Progressing
lastTransitionTime: "2024-11-25T20:19:31Z" message: 'One or more status conditions indicate progressing: LoadBalancerProgressing=True (OperandsProgressing: One or more managed resources are progressing: The IngressController subnets were changed from [...] to [...]. To effectuate this change, you must delete the service: `oc -n openshift-ingress delete svc/router-<name>`; the service load-balancer will then be deprovisioned and a new one created. This will most likely cause the new load-balancer to have a different host name and IP address and cause disruption. To return to the previous state, you can revert the change to the IngressController: [...]' reason: IngressControllerProgressing status: "True" type: Progressing
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 更新を適用するために、次のコマンドを実行して、Ingress Controller に関連付けられているサービスを削除します。
oc -n openshift-ingress delete svc/router-<name>
$ oc -n openshift-ingress delete svc/router-<name>
検証
ロードバランサーが正常にプロビジョニングされたことを確認するには、次のコマンドを実行して
IngressController
の状態を確認します。oc get ingresscontroller -n openshift-ingress-operator <name> -o jsonpath="{.status.conditions}" | yq -PC
$ oc get ingresscontroller -n openshift-ingress-operator <name> -o jsonpath="{.status.conditions}" | yq -PC
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.6.2.8. Network Load Balancer (NLB) の AWS Elastic IP (EIP) アドレスの設定 リンクのコピーリンクがクリップボードにコピーされました!
Ingress Controller の Network Load Balancer ー (NLB) に静的 IP (別名 Elastic IP) を指定できます。これは、クラスターネットワークに適切なファイアウォールルールを設定する場合に便利です。
前提条件
- AWS クラスターがインストールされている。
-
IngressController
をマッピングするサブネットの名前または ID がわかっている。
手順
以下の内容を含む YAML ファイルを作成します。
sample-ingress.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要アベイラビリティーゾーンごとに最大 1 つのサブネットを指定できます。外部 Ingress Controller にはパブリックサブネットのみを提供します。サブネットごとに 1 つの EIP アドレスを関連付けることができます。
次のコマンドを入力して、CR ファイルの保存と適用を実行します。
oc apply -f sample-ingress.yaml
$ oc apply -f sample-ingress.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
ロードバランサーが正常にプロビジョニングされたことを確認するために、次のコマンドを実行して
IngressController
の状態を確認します。oc get ingresscontroller -n openshift-ingress-operator <name> -o jsonpath="{.status.conditions}" | yq -PC
$ oc get ingresscontroller -n openshift-ingress-operator <name> -o jsonpath="{.status.conditions}" | yq -PC
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.7. サービスの外部 IP を使用した Ingress クラスタートラフィックの設定 リンクのコピーリンクがクリップボードにコピーされました!
MetalLB 実装または IP フェイルオーバーデプロイメントのいずれかを使用して、ExternalIP リソースをサービスに接続し、OpenShift Container Platform クラスター外部のトラフィックでそのサービスを利用できるようにすることができます。この方法で外部 IP アドレスをホストすることは、ベアメタルハードウェアにインストールされたクラスターにのみ適用されます。
トラフィックをサービスにルーティングするには、外部ネットワークインフラストラクチャーを正しく設定する必要があります。
7.2.7.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
クラスターが ExternalIP が有効にされた状態で設定されている。詳細は、サービスの ExternalIP の設定 を参照してください。
注記Egress IP に同じ ExternalIP を使用しないでください。
7.2.7.2. ExternalIP のサービスへの割り当て リンクのコピーリンクがクリップボードにコピーされました!
サービスに ExternalIP リソースを割り当てることができます。リソースをサービスに自動的に割り当てるようにクラスターを設定した場合は、ExternalIP をサービスに手動でアタッチする必要がない場合があります。
この手順の例では、IP フェイルオーバー設定を持つクラスター内のサービスに ExternalIP リソースを手動で割り当てるシナリオを使用します。
手順
CLI で次のコマンドを実行して、ExternalIP リソースの互換性のある IP アドレス範囲を確認します。
oc get networks.config cluster -o jsonpath='{.spec.externalIP}{"\n"}'
$ oc get networks.config cluster -o jsonpath='{.spec.externalIP}{"\n"}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記autoAssignCIDRs
が設定されていて、ExternalIP リソースのspec.externalIPs
の値を指定していないと、OpenShift Container Platform は新しいService
オブジェクトに ExternalIP を自動的に割り当てます。サービスに ExternalIP リソースを割り当てるには、次のいずれかのオプションを選択します。
新しいサービスを作成する場合は、
spec.externalIPs
フィールドに値を指定し、allowedCIDRs
パラメーターに 1 つ以上の有効な IP アドレスの配列を指定します。ExternalIP リソースをサポートするサービス YAML 設定ファイルの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ExternalIP を既存のサービスに割り当てる場合は、以下のコマンドを入力します。
<name>
をサービス名に置き換えます。<ip_address>
を有効な ExternalIP アドレスに置き換えます。コンマで区切られた複数の IP アドレスを指定できます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下に例を示します。
oc patch svc mysql-55-rhel7 -p '{"spec":{"externalIPs":["192.174.120.10"]}}'
$ oc patch svc mysql-55-rhel7 -p '{"spec":{"externalIPs":["192.174.120.10"]}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
"mysql-55-rhel7" patched
"mysql-55-rhel7" patched
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ExternalIP アドレスがサービスに割り当てられていることを確認するには、以下のコマンドを入力します。新規サービスに ExternalIP を指定した場合、まずサービスを作成する必要があります。
oc get svc
$ oc get svc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE mysql-55-rhel7 172.30.131.89 192.174.120.10 3306/TCP 13m
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE mysql-55-rhel7 172.30.131.89 192.174.120.10 3306/TCP 13m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.8. NodePort を使用した Ingress クラスタートラフィックの設定 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は、クラスター内で実行されるサービスを使用してクラスター外からの通信を可能にする方法を提供します。この方法は NodePort
を使用します。
7.2.8.1. NodePort を使用したトラフィックのクラスターへの送信 リンクのコピーリンクがクリップボードにコピーされました!
NodePort
-type Service
リソースを使用して、クラスター内のすべてのノードの特定のポートでサービスを公開します。ポートは Service
リソースの .spec.ports[*].nodePort
フィールドで指定されます。
ノードポートを使用するには、追加のポートリソースが必要です。
NodePort
は、ノードの IP アドレスの静的ポートでサービスを公開します。NodePort
はデフォルトで 30000
から 32767
の範囲に置かれます。つまり、NodePort
はサービスの意図されるポートに一致しないことが予想されます。たとえば、ポート 8080
はノードのポート 31020
として公開できます。
管理者は、外部 IP アドレスがノードにルーティングされることを確認する必要があります。
NodePort
および外部 IP は独立しており、両方を同時に使用できます。
このセクションの手順では、クラスターの管理者が事前に行っておく必要のある前提条件があります。
7.2.8.2. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
以下の手順を開始する前に、管理者は以下の条件を満たしていることを確認する必要があります。
- 要求がクラスターに到達できるように、クラスターネットワーク環境に対して外部ポートをセットアップします。
クラスター管理者ロールを持つユーザーが 1 名以上いることを確認します。このロールをユーザーに追加するには、以下のコマンドを実行します。
oc adm policy add-cluster-role-to-user cluster-admin <user_name>
$ oc adm policy add-cluster-role-to-user cluster-admin <user_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - OpenShift Container Platform クラスターを、1 つ以上のマスターと 1 つ以上のノード、およびクラスターへのネットワークアクセスのあるクラスター外のシステムと共に用意します。この手順では、外部システムがクラスターと同じサブセットにあることを前提とします。別のサブセットの外部システムに必要な追加のネットワーク設定については、このトピックでは扱いません。
7.2.8.3. プロジェクトおよびサービスの作成 リンクのコピーリンクがクリップボードにコピーされました!
公開するプロジェクトとサービスが存在しない場合は、プロジェクトを作成してからサービスを作成します。
プロジェクトとサービスがすでに存在する場合は、サービスを公開してルートを作成する手順に進みます。
前提条件
-
OpenShift CLI (
oc
) をインストールし、クラスター管理者としてログインしている。
手順
oc new-project
コマンドを実行して、サービス用の新しいプロジェクトを作成します。oc new-project <project_name>
$ oc new-project <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc new-app
コマンドを使用してサービスを作成します。oc new-app nodejs:12~https://github.com/sclorg/nodejs-ex.git
$ oc new-app nodejs:12~https://github.com/sclorg/nodejs-ex.git
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サービスが作成されたことを確認するには、以下のコマンドを実行します。
oc get svc -n <project_name>
$ oc get svc -n <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nodejs-ex ClusterIP 172.30.197.157 <none> 8080/TCP 70s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nodejs-ex ClusterIP 172.30.197.157 <none> 8080/TCP 70s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記デフォルトで、新規サービスには外部 IP アドレスがありません。
7.2.8.4. ルートの作成によるサービスの公開 リンクのコピーリンクがクリップボードにコピーされました!
oc expose
コマンドを使用して、サービスをルートとして公開することができます。
前提条件
- OpenShift Container Platform にログインしている。
手順
公開するサービスが置かれているプロジェクトにログインします。
oc project <project_name>
$ oc project <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションのノードポートを公開するには、次のコマンドを入力して、サービスのカスタムリソース定義 (CRD) を変更します。
oc edit svc <service_name>
$ oc edit svc <service_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: サービスが公開されるノードポートで利用可能なことを確認するには、以下のコマンドを入力します。
oc get svc -n myproject
$ oc get svc -n myproject
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nodejs-ex ClusterIP 172.30.217.127 <none> 3306/TCP 9m44s nodejs-ex-ingress NodePort 172.30.107.72 <none> 3306:31345/TCP 39s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nodejs-ex ClusterIP 172.30.217.127 <none> 3306/TCP 9m44s nodejs-ex-ingress NodePort 172.30.107.72 <none> 3306:31345/TCP 39s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
oc new-app
コマンドによって自動的に作成されたサービスを削除するには、以下のコマンドを入力します。oc delete svc nodejs-ex
$ oc delete svc nodejs-ex
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
サービスノードポートが
30000 ~ 32767
の範囲のポートで更新されていることを確認するには、次のコマンドを入力します。oc get svc
$ oc get svc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の出力例では、更新されたポートは
30327
です。出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE httpd NodePort 172.xx.xx.xx <none> 8443:30327/TCP 109s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE httpd NodePort 172.xx.xx.xx <none> 8443:30327/TCP 109s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.9. ロードバランサーの許可された送信元範囲を使用した Ingress クラスタートラフィックの設定 リンクのコピーリンクがクリップボードにコピーされました!
IngressController
の IP アドレス範囲の一覧を指定できます。endpointPublishingStrategy
が LoadBalancerService
の場合、これにより、ロードバランサーサービスへのアクセスが制限されます。
7.2.9.1. ロードバランサーの許可されるソース範囲の設定 リンクのコピーリンクがクリップボードにコピーされました!
spec.endpointPublishingStrategy.loadBalancer.allowedSourceRanges
フィールドを有効にして設定できます。ロードバランサーの許可されるソース範囲を設定することで、Ingress Controller のロードバランサーへのアクセスを、指定した IP アドレス範囲のリストに制限できます。Ingress Operator はロードバランサー Service を調整し、AllowedSourceRanges
に基づいて spec.loadBalancerSourceRanges
フィールドを設定します。
以前のバージョンの OpenShift Container Platform で spec.loadBalancerSourceRanges
フィールドまたはロードバランサーサービスアノテーション service.beta.kubernetes.io/load-balancer-source-ranges
をすでに設定している場合、Ingress Controller はアップグレード後に Progressing=True
のレポートを開始します。.これを修正するには、spec.loadBalancerSourceRanges
フィールドを上書きし、service.beta.kubernetes.io/load-balancer-source-ranges
アノテーションをクリアする AllowedSourceRanges
を設定します。Ingress Controller は、再び Progressing=False
の報告を開始します。
前提条件
- 実行中のクラスターにデプロイされた Ingress Controller があります。
手順
次のコマンドを実行して、Ingress Controller の許可されるソース範囲 API を設定します。
oc -n openshift-ingress-operator patch ingresscontroller/default \ --type=merge --patch='{"spec":{"endpointPublishingStrategy": \ {"type":"LoadBalancerService", "loadbalancer": \ {"scope":"External", "allowedSourceRanges":["0.0.0.0/0"]}}}}'
$ oc -n openshift-ingress-operator patch ingresscontroller/default \ --type=merge --patch='{"spec":{"endpointPublishingStrategy": \ {"type":"LoadBalancerService", "loadbalancer": \ {"scope":"External", "allowedSourceRanges":["0.0.0.0/0"]}}}}'
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 例の値
0.0.0.0/0
は、許可されるソース範囲を指定します。
7.2.9.2. ロードバランサーの許可されたソース範囲への移行 リンクのコピーリンクがクリップボードにコピーされました!
注釈 service.beta.kubernetes.io/load-balancer-source-ranges
をすでに設定している場合は、ロードバランサーの許可されたソース範囲に移行できます。AllowedSourceRanges
を設定すると、Ingress Controller は AllowedSourceRanges
値に基づいて spec.loadBalancerSourceRanges
フィールドを設定し、service.beta.kubernetes.io/load-balancer-source-ranges
アノテーションを設定解除します。
以前のバージョンの OpenShift Container Platform で spec.loadBalancerSourceRanges
フィールドまたはロードバランサーサービスアノテーション service.beta.kubernetes.io/load-balancer-source-ranges
をすでに設定している場合、Ingress Controller はアップグレード後に Progressing=True
のレポートを開始します。.これを修正するには、spec.loadBalancerSourceRanges
フィールドを上書きし、service.beta.kubernetes.io/load-balancer-source-ranges
アノテーションをクリアする AllowedSourceRanges
を設定します。Ingress Controller は再び Progressing=False
の報告を開始します。
前提条件
-
service.beta.kubernetes.io/load-balancer-source-ranges
アノテーションを設定しました。
手順
service.beta.kubernetes.io/load-balancer-source-ranges
が設定されていることを確認します。oc get svc router-default -n openshift-ingress -o yaml
$ oc get svc router-default -n openshift-ingress -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/load-balancer-source-ranges: 192.168.0.1/32
apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/load-balancer-source-ranges: 192.168.0.1/32
Copy to Clipboard Copied! Toggle word wrap Toggle overflow spec.loadBalancerSourceRanges
フィールドが設定されていないことを確認します。oc get svc router-default -n openshift-ingress -o yaml
$ oc get svc router-default -n openshift-ingress -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
... spec: loadBalancerSourceRanges: - 0.0.0.0/0 ...
... spec: loadBalancerSourceRanges: - 0.0.0.0/0 ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - クラスターを OpenShift Container Platform 4.19 に更新します。
次のコマンドを実行して、
ingresscontroller
の許可されるソース範囲 API を設定します。oc -n openshift-ingress-operator patch ingresscontroller/default \ --type=merge --patch='{"spec":{"endpointPublishingStrategy": \ {"loadBalancer":{"allowedSourceRanges":["0.0.0.0/0"]}}}}'
$ oc -n openshift-ingress-operator patch ingresscontroller/default \ --type=merge --patch='{"spec":{"endpointPublishingStrategy": \ {"loadBalancer":{"allowedSourceRanges":["0.0.0.0/0"]}}}}'
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 例の値
0.0.0.0/0
は、許可されるソース範囲を指定します。
7.2.10. 既存の Ingress オブジェクトのパッチ適用 リンクのコピーリンクがクリップボードにコピーされました!
オブジェクトを再作成したり、オブジェクトへのサービスを中断したりすることなく、以下の既存の Ingress
オブジェクトフィールドを更新または変更できます。
- Specifications
- Host
- Path
- Backend services
- SSL/TLS settings
- アノテーション
7.2.10.1. Ingress オブジェクトのパッチ適用による ingressWithoutClassName アラートの解決 リンクのコピーリンクがクリップボードにコピーされました!
ingressClassName
フィールドは、IngressClass
オブジェクトの名前を指定します。各 Ingress
オブジェクトの ingressClassName
フィールドを定義する必要があります。
Ingress
オブジェクトの ingressClassName
フィールドを定義していない場合は、ルーティングの問題が発生する可能性があります。24 時間後、ingressWithoutClassName
アラートが届き、ingressClassName
フィールドを設定するように通知されます。
手順
適切なルーティングと機能性を確保するために、完了した ingressClassName
フィールドを使用して Ingress
オブジェクトにパッチを適用します。
すべての
IngressClass
オブジェクトをリスト表示します。oc get ingressclass
$ oc get ingressclass
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 全 namespace 内の
Ingress
オブジェクトをすべてリスト表示します。oc get ingress -A
$ oc get ingress -A
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ingress
オブジェクトにパッチを適用します。oc patch ingress/<ingress_name> --type=merge --patch '{"spec":{"ingressClassName":"openshift-default"}}'
$ oc patch ingress/<ingress_name> --type=merge --patch '{"spec":{"ingressClassName":"openshift-default"}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <ingress_name>
はIngress
オブジェクトの名前に置き換えます。このコマンドは、Ingress
オブジェクトにパッチを適用して、目的の Ingress クラス名を含めます。
7.2.11. 特定のサブネットへのロードバランサーの割り当て リンクのコピーリンクがクリップボードにコピーされました!
ロードバランサーを割り当てることで、アプリケーショントラフィックを効率的に管理できます。ネットワーク管理者は、ロードバランサーを割り当ててデプロイメントをカスタマイズし、最適なトラフィック分散、アプリケーションの高可用性、中断のないサービス、ネットワークのセグメンテーションを確保できます。
7.2.11.1. AWS 上の特定のサブネットに API および Ingress ロードバランサーを割り当てる リンクのコピーリンクがクリップボードにコピーされました!
install-config.yaml
ファイルの platform.aws.vpc.subnets
セクションにおいて、Virtual Private Cloud (VPC) のサブネットを明示的に定義し、それらに特定のロールを直接を割り当てることで、AWS 上の OpenShift ロードバランサー (Ingress Controller 用を含む) のネットワーク配置を制御できます。この方法では、Ingress Controller やその他のクラスターコンポーネントなどのリソースに使用するサブネットを詳細に制御できます。
7.2.11.1.1. インストール時に OpenShift API と Ingress ロードバランサーの AWS サブネットを指定する リンクのコピーリンクがクリップボードにコピーされました!
API および Ingress ロードバランサーを特定のサブネットに割り当てるには、次の手順を実行します。
前提条件
始める前に、以下を用意してください。
- 既存の AWS Virtual Private Cloud (VPC)。
OpenShift クラスターで使用するために事前設定された AWS サブネット。次の点に注意してください。
-
サブネット ID のリストがある (例:
subnet-0123456789abcdef0
)。これらの ID はinstall-config.yaml
ファイルで使用されます。 - ロードバランサーやコントロールプレーンなどのその他の重要なコンポーネントの高可用性を確保するために、少なくとも 2 つのアベイラビリティーゾーン (AZ) にまたがるサブネットを使用している。
- これらのサブネット内には、割り当てられたすべてのロールに対して使用可能な IP アドレスが十分にある。
- ネットワーク ACL やセキュリティーグループを含むこれらのサブネットの AWS 設定では、割り当てられたすべてのロールに必要なトラフィックを許可する必要がある。Ingress Controller をホストするサブネットの場合、これには通常、必要なソースからの TCP ポート 80 と 443 が含まれます。
-
サブネット ID のリストがある (例:
- ターゲットの OpenShift バージョン用の OpenShift インストーラーバイナリー。
-
install-config.yaml
ファイル。
手順
install-config.yaml
ファイルを準備します。まだ準備していない場合は、OpenShift インストーラーを使用してインストール設定ファイルを生成します。
openshift-install create install-config --dir=<your_installation_directory>
$ openshift-install create install-config --dir=<your_installation_directory>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、指定されたディレクトリーに
install-config.yaml
ファイルを作成します。サブネットを定義し、ロールを割り当てます。
テキストエディターを使用して、
<your_installation_directory>
にあるinstall-config.yaml
ファイルを開きます。VPC サブネットと指定されたロールは、platform.aws.vpc.subnets
フィールドで定義します。クラスターが使用する予定の AWS サブネットごとに、その
id
とroles
のリストを指定するエントリーを作成します。各ロールは、type
キーを持つオブジェクトです。デフォルトの Ingress Controller のサブネットを指定するには、type: IngressControllerLB
のロールを割り当てます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 使用中のベースドメイン。
- 2
- 使用中の AWS リージョン。
- 3
platform.aws
の下の vpc オブジェクトには、サブネットリストが含まれます。- 4
- OpenShift が使用するすべてのサブネットオブジェクトのリスト。各オブジェクトは、サブネット ID とそのロールを定義します。
- 5
- AWS サブネット ID に置き換えます。
- 6
type: IngressControllerLB
ロールは、このサブネットをデフォルトの Ingress Controller の LoadBalancer 用に明示的に指定します。プライベート/内部クラスターでは、IngressControllerLB
ロールを持つサブネットはプライベートである必要があります。- 7
type: ClusterNode
ロールは、コントロールプレーンとコンピュートノード用にこのサブネットを指定します。これらは通常、プライベートサブネットです。- 8
- 使用中のプルシークレット。
- 9
- 使用中の SSH キー。
subnets
リスト内のコントロールプレーンロードバランサーのエントリーも同様のパターンに従います。Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトのパブリック Ingress Controller の場合、
install-config.yaml
ファイルでIngressControllerLB
ロールが割り当てられているサブネットは、すべてパブリックサブネットである必要があります。たとえば、送信トラフィックをインターネットゲートウェイ (IGW) に誘導するルートテーブルエントリーが AWS 内に存在している必要があります。AZ 全体の必要なすべてのサブネット (パブリックとプライベート) をリストし、クラスターアーキテクチャーに応じて適切なロールを割り当てます。
サブネット ID は既存の VPC 内のサブネットを定義し、オプションでその目的のロールを指定できます。どのサブネットにもロールが指定されていない場合は、サブネットのロールが自動的に決定されます。この場合、VPC には
kubernetes.io/cluster/<cluster-id>
タグのない他の非クラスターサブネットを含めることはできません。サブネットにロールを指定する場合、各サブネットに少なくとも 1 つのロールが割り当てられている必要があり、
ClusterNode
、BootstrapNode
、IngressControllerLB
、ControlPlaneExternalLB
、およびControlPlaneInternalLB
のロールが少なくとも 1 つのサブネットに割り当てられている必要があります。ただし、クラスタースコープが内部の場合、ControlPlaneExternalLB
は必要ありません。クラスターのインストールを続行します。
install-config.yaml
ファイルへの変更を保存したら、クラスターを作成します。openshift-install create cluster --dir=<your_installation_directory>
$ openshift-install create cluster --dir=<your_installation_directory>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow インストールプログラムは、
install-config.yaml
ファイルのplatform.aws.vpc.subnets
セクションのサブネット定義と明示的なロール割り当てを使用して、IngressControllerLB
ロールで指定したサブネットに Ingress Controller の LoadBalancer を配置するなど、クラスターリソースをプロビジョニングするようになりました。
IngressControllerLB
、ClusterNode
、ControlPlaneExternalLB
、ControlPlaneInternalLB
、BootstrapNode
などのタイプを指定するなど、platform.aws.vpc.subnets
内のロール割り当てメカニズムは、OpenShift インストーラーがさまざまなクラスターサービスとコンポーネントに適したサブネットを識別する包括的な方法です。
7.2.12. 手動 DNS 管理のための Ingress Controller の設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者として Ingress Controller を作成すると、Operator は DNS レコードを自動的に管理します。必要な DNS ゾーンがクラスター DNS ゾーンと異なる場合、または DNS ゾーンがクラウドプロバイダーの外部でホストされている場合、これにはいくつかの制限があります。
クラスター管理者は、Ingress Controller を設定して、自動 DNS 管理を停止し、手動 DNS 管理を開始することができます。dnsManagementPolicy
を設定して、いつ自動または手動で管理するかを指定します。
Ingress Controller を Managed
から Unmanaged
DNS 管理ポリシーに変更すると、Operator はクラウドでプロビジョニングされた以前のワイルドカード DNS レコードをクリーンアップしません。Ingress Controller を Unmanaged
から Managed
DNS 管理ポリシーに変更すると、Operator は、クラウドプロバイダーに DNS レコードが存在しない場合は作成を試み、DNS レコードがすでに存在する場合は更新を試みます。
dnsManagementPolicy
を unmanaged
に設定すると、クラウドプロバイダーでワイルドカード DNS レコードのライフサイクルを手動で管理する必要があります。
7.2.12.1. Managed DNS 管理ポリシー リンクのコピーリンクがクリップボードにコピーされました!
Ingress Controller の Managed
DNS 管理ポリシーにより、クラウドプロバイダーのワイルドカード DNS レコードのライフサイクルが Operator によって自動的に管理されるようになります。
7.2.12.2. Unmanaged DNS 管理ポリシー リンクのコピーリンクがクリップボードにコピーされました!
Ingress Controller の Unmanaged
DNS 管理ポリシーにより、クラウドプロバイダーのワイルドカード DNS レコードのライフサイクルが自動的に管理されず、代わりにクラスター管理者の責任になります。
AWS クラウドプラットフォームでは、Ingress Controller のドメインが dnsConfig.Spec.BaseDomain
と一致しない場合、DNS 管理ポリシーは自動的に Unmanaged
に設定されます。
7.2.12.3. Unmanaged DNS 管理ポリシーを使用したカスタム Ingress Controller の作成 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、Unmanaged
DNS 管理ポリシーを使用して、新しいカスタム Ingress Controller を作成できます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてログインしている。
手順
以下を含む
sample-ingress.yaml
という名前のカスタムリソース (CR) ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 変更を適用するためにファイルを保存します。
oc apply -f <name>.yaml
oc apply -f <name>.yaml
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.12.4. 既存の Ingress Controller の変更 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、既存の Ingress Controller を変更して、DNS レコードのライフサイクルを手動で管理できます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてログインしている。
手順
選択した
IngressController
を変更してdnsManagementPolicy
を設定します。SCOPE=$(oc -n openshift-ingress-operator get ingresscontroller <name> -o=jsonpath="{.status.endpointPublishingStrategy.loadBalancer.scope}") oc -n openshift-ingress-operator patch ingresscontrollers/<name> --type=merge --patch='{"spec":{"endpointPublishingStrategy":{"type":"LoadBalancerService","loadBalancer":{"dnsManagementPolicy":"Unmanaged", "scope":"${SCOPE}"}}}}'
SCOPE=$(oc -n openshift-ingress-operator get ingresscontroller <name> -o=jsonpath="{.status.endpointPublishingStrategy.loadBalancer.scope}") oc -n openshift-ingress-operator patch ingresscontrollers/<name> --type=merge --patch='{"spec":{"endpointPublishingStrategy":{"type":"LoadBalancerService","loadBalancer":{"dnsManagementPolicy":"Unmanaged", "scope":"${SCOPE}"}}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - オプション: クラウドプロバイダーで関連付けられている DNS レコードを削除できます。
7.2.13. OpenShift Container Platform ネットワーキングにおける Gateway API リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform では、Ingress Operator で Gateway API を使用することにより、ネットワークトラフィックを設定するための追加の方法が提供されます。
Gateway API はユーザー定義ネットワーク (UDN) をサポートしていません。
7.2.13.1. Gateway API の概要 リンクのコピーリンクがクリップボードにコピーされました!
Gateway API は、オープンソースのコミュニティー管理された Kubernetes ネットワークメカニズムです。これは、クラスターのトランスポートレイヤー (L4) とアプリケーションレイヤー (L7) 内のルーティングに重点を置いています。さまざまなベンダーが Gateway API の実装 を多数提供しています。
このプロジェクトは、幅広いコミュニティーのサポートを受けた移植可能な API を使用して、標準化されたエコシステムを提供するための取り組みです。Gateway API 機能を Ingress Operator に統合することで、既存のコミュニティーとアップストリーム開発の取り組みに沿ったネットワークソリューションが可能になります。
Gateway API は Ingress Operator の機能を拡張し、よりきめ細かいクラスタートラフィックとルーティング設定を処理します。これらの機能を使用すると、Gateway API のカスタムリソース定義 (CRD) のインスタンスを作成できます。OpenShift Container Platform クラスターの場合、Ingress Operator は次のリソースを作成します。
- Gateway
- このリソースでは、トラフィックをクラスター内のサービスに変換する方法について説明します。たとえば、特定のロードバランサー設定などです。
- GatewayClass
-
このリソースは、共通の設定と動作を共有する
Gateway
オブジェクトのセットを定義します。たとえば、パブリックアプリケーションまたはプライベートアプリケーションに使用されるGateway
リソースのセットを区別するために、2 つの個別のGatewayClass
オブジェクトが作成される場合があります。 - HTTPRoute
- このリソースは、Gateway からサービスへの HTTP 要求のルーティング動作を指定し、HTTP 接続または終了した HTTPS 接続を多重化する場合に特に役立ちます。
- GRPCRoute
- このリソースは、gRPC リクエストのルーティング動作を指定します。
- ReferenceGrant
- このリソースは、namespace 間の参照を可能にします。たとえば、ルートが別の namespace にあるバックエンドにトラフィックを転送できるようになります。
OpenShift Container Platform では、Gateway API の実装は gateway.networking.k8s.io/v1
に基づいており、このバージョンのすべてのフィールドがサポートされています。
7.2.13.1.1. Gateway API の利点 リンクのコピーリンクがクリップボードにコピーされました!
Gateway API には次の利点があります。
-
移植性: OpenShift Container Platform は Ingress のパフォーマンスを向上させるために HAProxy を使用しますが、Gateway API は特定の動作を提供するためにベンダー固有のアノテーションに依存することはありません。HAProxy と同等のパフォーマンスを得るには、
Gateway
オブジェクトを水平方向にスケーリングするか、関連するノードを垂直方向にスケーリングする必要があります。 -
関心の分離: Gateway API は、そのリソースに対してロールベースのアプローチを採用しています。これにより、大規模な組織における責任分担やチーム体制と、よりうまく適合します。プラットフォームエンジニアは
GatewayClass
リソースに重点を置き、クラスター管理者はGateway
リソースの設定に重点を置き、アプリケーション開発者はHTTPRoute
リソースを使用したサービスのルーティングに重点を置く可能性があります。 - 拡張性: 追加機能は標準化された CRD として開発されます。
7.2.13.1.2. Gateway API の制限 リンクのコピーリンクがクリップボードにコピーされました!
Gateway API には次の制限があります。
- バージョンの非互換性: Gateway API エコシステムは急速に変化しており、一部の実装は、その機能セットが異なるバージョンの Gateway API に基づいているため、他の実装と連携しません。
- リソースのオーバーヘッド: より柔軟ではありますが、Gateway API は結果を達成するために複数のリソースタイプを使用します。小規模なアプリケーションの場合、従来の Ingress のシンプルさがより適している可能性があります。
7.2.13.2. OpenShift Container Platform の Gateway API 実装 リンクのコピーリンクがクリップボードにコピーされました!
Ingress Operator は、他のベンダー実装が OpenShift Container Platform クラスターで定義された CRD を利用できるように、Gateway API CRD のライフサイクルを管理します。
Gateway API が提供するフィールドの中に、特定のベンダーによる実装ではサポートされていないものが含まれる場合があります。しかしその場合でも、サポートされていないフィールドを除けば、その実装は残りのフィールドとスキーマレベルで互換性があります。これらの「デッドフィールド」により、Ingress ワークロードが中断され、アプリケーションとサービスが不適切にプロビジョニングされ、セキュリティー関連の問題が発生する可能性があります。OpenShift Container Platform は特定のバージョンの Gateway API CRD を使用するため、サードパーティーの Gateway API 実装を使用する場合は、すべてのフィールドが期待どおりに機能するように、OpenShift Container Platform 実装に準拠する必要があります。
OpenShift Container Platform 4.19 クラスター内で作成されたすべての CRD は、Ingress Operator によって互換性のあるバージョン管理とメンテナンスが行われます。CRD がすでに存在するものの、以前は Ingress Operator によって管理されていなかった場合、Ingress Operator は、それらの設定が OpenShift Container Platform がサポートする Gateway API バージョンと互換性があるかをチェックします。その後、CRD の管理を引き継ぐことへの承認をユーザーに求める admin-gate を作成します。
Gateway API CRD を含む以前の OpenShift Container Platform バージョンからクラスターを更新する場合は、それらのリソースを変更して、OpenShift Container Platform でサポートされているバージョンと完全に一致するようにします。そうしないと、それらの CRD は OpenShift Container Platform によって管理されていなかったため、Red Hat でサポートされていない機能が含まれている可能性があり、クラスターを更新できません。
7.2.13.3. Ingress Operator の Gateway API を使い始める リンクのコピーリンクがクリップボードにコピーされました!
最初のステップに示すように GatewayClass を作成すると、クラスターで使用するための Gateway API が設定されます。
手順
GatewayClass
オブジェクトを作成します。次の情報が含まれる YAML ファイル
openshift-default.yaml
を作成します。GatewayClass
CR の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要Ingress Operator がこれを管理するには、コントローラー名が表示されているとおりである必要があります。このフィールドを他の値に設定すると、Ingress Operator は
GatewayClass
オブジェクトと、それに関連付けられたすべてのGateway
、GRPCRoute
、およびHTTPRoute
オブジェクトを無視します。コントローラー名は OpenShift Container Platform の Gateway API の実装に関連付けられており、許可されるコントローラー名はopenshift.io/gateway-controller/v1
のみです。次のコマンドを実行して、
GatewayClass
リソースを作成します。oc create -f openshift-default.yaml
$ oc create -f openshift-default.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
gatewayclass.gateway.networking.k8s.io/openshift-default created
gatewayclass.gateway.networking.k8s.io/openshift-default created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow GatewayClass
リソースの作成中に、Ingress Operator は Red Hat OpenShift Service Mesh の軽量バージョン、Istio カスタムリソース、およびopenshift-ingress
namespace に新しいデプロイメントをインストールします。オプション: 新しいデプロイメント
istiod-openshift-gateway
が準備され、利用可能であることを確認します。oc get deployment -n openshift-ingress
$ oc get deployment -n openshift-ingress
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY UP-TO-DATE AVAILABLE AGE istiod-openshift-gateway 1/1 1 1 55s router-default 2/2 2 2 6h4m
NAME READY UP-TO-DATE AVAILABLE AGE istiod-openshift-gateway 1/1 1 1 55s router-default 2/2 2 2 6h4m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のコマンドを実行してシークレットを作成します。
oc -n openshift-ingress create secret tls gwapi-wildcard --cert=wildcard.crt --key=wildcard.key
$ oc -n openshift-ingress create secret tls gwapi-wildcard --cert=wildcard.crt --key=wildcard.key
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Ingress Operator のドメインを取得します。
DOMAIN=$(oc get ingresses.config/cluster -o jsonpath={.spec.domain})
$ DOMAIN=$(oc get ingresses.config/cluster -o jsonpath={.spec.domain})
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Gateway
オブジェクトを作成します。次の情報が含まれる YAML ファイル
example-gateway.yaml
を作成します。Gateway
CR の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
Gateway
オブジェクトは、openshift-ingress
namespace に作成する必要があります。- 2
Gateway
オブジェクトは、以前に作成されたGatewayClass
オブジェクトの名前を参照する必要があります。- 3
- HTTPS リスナーは、クラスタードメインのサブドメインに一致する HTTPS 要求をリッスンします。このリスナーを使用し、Gateway API
HTTPRoute
リソースを使用してアプリケーションへの Ingress を設定します。 - 4
- ホスト名は、Ingress Operator ドメインのサブドメインである必要があります。ドメインを使用する場合、リスナーはそのドメイン内のすべてのトラフィックを処理しようとします。
- 5
- 以前に作成されたシークレットの名前。
次のコマンドを実行して、リソースを適用します。
oc apply -f example-gateway.yaml
$ oc apply -f example-gateway.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
Gateway
オブジェクトを作成すると、Red Hat OpenShift Service Mesh は同じ名前のデプロイメントとサービスを自動的にプロビジョニングします。以下のコマンドを実行して、これを確認します。デプロイメントを確認するには、次のコマンドを実行します。
oc get deployment -n openshift-ingress example-gateway-openshift-default
$ oc get deployment -n openshift-ingress example-gateway-openshift-default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY UP-TO-DATE AVAILABLE AGE example-gateway-openshift-default 1/1 1 1 25s
NAME READY UP-TO-DATE AVAILABLE AGE example-gateway-openshift-default 1/1 1 1 25s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サービスを確認するには、次のコマンドを実行します。
oc get service -n openshift-ingress example-gateway-openshift-default
$ oc get service -n openshift-ingress example-gateway-openshift-default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE example-gateway-openshift-default LoadBalancer 10.1.2.3 <external_ipname> <port_info> 47s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE example-gateway-openshift-default LoadBalancer 10.1.2.3 <external_ipname> <port_info> 47s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
オプション: Ingress Operator は、リスナーからのホスト名を使用して
DNSRecord
CR を自動的に作成し、ラベルgateway.networking.k8s.io/gateway-name=example-gateway
を追加します。次のコマンドを実行して、DNS レコードのステータスを確認します。oc -n openshift-ingress get dnsrecord -l gateway.networking.k8s.io/gateway-name=example-gateway -o yaml
$ oc -n openshift-ingress get dnsrecord -l gateway.networking.k8s.io/gateway-name=example-gateway -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
すでに作成済みの namespace と
example-app/example-app
というアプリケーションにリクエストを送信するHTTPRoute
リソースを作成します。次の情報が含まれる YAML ファイル
example-route.yaml
を作成します。HTTPRoute
CR の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、リソースを適用します。
oc apply -f example-route.yaml
$ oc apply -f example-route.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
httproute.gateway.networking.k8s.io/example-route created
httproute.gateway.networking.k8s.io/example-route created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
次のコマンドを実行して、
Gateway
オブジェクトがデプロイされ、状態がProgrammed
であることを確認します。oc wait -n openshift-ingress --for=condition=Programmed gateways.gateway.networking.k8s.io example-gateway
$ oc wait -n openshift-ingress --for=condition=Programmed gateways.gateway.networking.k8s.io example-gateway
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
gateway.gateway.networking.k8s.io/example-gateway condition met
gateway.gateway.networking.k8s.io/example-gateway condition met
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 設定された
HTTPRoute
オブジェクトのホスト名にリクエストを送信します。curl -I --cacert <local cert file> https://example.gwapi.${DOMAIN}:443
$ curl -I --cacert <local cert file> https://example.gwapi.${DOMAIN}:443
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.13.4. Gateway API デプロイメントトポロジー リンクのコピーリンクがクリップボードにコピーされました!
Gateway API は、共有ゲートウェイと専用ゲートウェイの 2 つのトポロジーに対応するように設計されています。各トポロジーには独自の利点があり、セキュリティー上の意味合いも異なります。
- 専用ゲートウェイ
-
ルートおよびロードバランサーやプロキシーは、同じ namespace から提供されます。
Gateway
オブジェクトは、特定のアプリケーション namespace へのルートを制限します。これは、OpenShift Container Platform に Gateway API リソースをデプロイする場合のデフォルトのトポロジーです。 - 共有ゲートウェイ
-
ルートは、複数の namespace から、または複数のホスト名で提供されます。
Gateway
オブジェクトフィルターは、spec.listeners.allowedRoutes.namespaces
フィールドを使用して、アプリケーション namespace からのルートを許可します。
7.2.13.4.1. 専用ゲートウェイの例 リンクのコピーリンクがクリップボードにコピーされました!
次の例は、専用の Gateway
リソースの fin-gateway
を示しています。
専用 Gateway
リソースの例
- 1
spec.listeners[].allowedRoutes
を設定せずにGateway
リソースを作成すると、namespaces.from
フィールドの値がSame
に暗黙的に設定されます。
次の例は、専用の Gateway
オブジェクトにアタッチされる、関連付けられた HTTPRoute
リソースの sales-db
を示しています。
HTTPRoute
リソースの例
HTTPRoute
リソースをゲートウェイにアタッチするには、その parentRefs
フィールドの値として Gateway
オブジェクトの名前を指定する必要があります。暗黙的に、ルートは Gateway
オブジェクトと同じ namespace にあると想定されます。