19.13. 出力サービスの設定
クラスター管理者は、Egress サービスを使用して、ロードバランサーサービスの背後にある Pod の Egress トラフィックを設定できます。
Egress サービスはテクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
EgressService カスタムリソース (CR) を使用して、次の方法で送信トラフィックを管理できます。
ロードバランサーサービスの IP アドレスを、ロードバランサーサービスの背後にある Pod の送信トラフィックの送信元 IP アドレスとして割り当てます。
このコンテキストでは、ロードバランサーの IP アドレスを送信元 IP アドレスとして割り当てると、単一の Egress と Ingress を提供するのに役立ちます。たとえば、一部のシナリオでは、ロードバランサーサービスの背後でアプリケーションと通信する外部システムは、アプリケーションの送信元 IP アドレスと宛先 IP アドレスが同じであると想定できます。
注記ロードバランサーサービスの IP アドレスをサービスの背後にある Pod の Egress トラフィックに割り当てると、OVN-Kubernetes は Ingress ポイントと Egress ポイントを単一のノードに制限します。これにより、MetalLB が通常提供するトラフィックのロードバランシングが制限されます。
ロードバランサーの背後にある Pod の Egress トラフィックを、デフォルトノードネットワークとは異なるネットワークに割り当てます。
これは、ロードバランサーの背後にあるアプリケーションの Egress トラフィックを、デフォルトネットワークとは異なるネットワークに割り当てる場合に便利です。通常、別のネットワークは、ネットワークインターフェイスに関連付けられた VRF インスタンスを使用して実装されます。
19.13.1. Egress サービスのカスタムリソース リンクのコピーリンクがクリップボードにコピーされました!
EgressService カスタムリソースで Egress サービスの設定を定義します。次の YAML は、egress サービスの設定のフィールドを説明します。
- 1
- Egress サービスの名前を指定します。
EgressServiceリソースの名前は、変更するロードバランサーサービスの名前と一致する必要があります。 - 2
- Egress サービスの namespace を指定します。
EgressServiceの namespace は、変更するロードバランサーサービスの namespace と一致する必要があります。Egress サービスは namespace スコープです。 - 3
- サービスの背後にある Pod の Egress トラフィックの送信元 IP アドレスを指定します。有効な値は、
LoadBalancerIPまたはNetworkです。LoadBalancerIP値を使用して、LoadBalancerサービスの Ingress IP アドレスを Egress トラフィックの送信元 IP アドレスとして割り当てます。ネットワークを指定して、ネットワークインターフェイス IP アドレスを Egress トラフィックの送信元 IP アドレスとして割り当てます。 - 4
- オプション:
sourceIPBy指定にLoadBalancerIP値を使用する場合、単一ノードがLoadBalancerサービストラフィックを処理します。このタスクを割り当て可能なノードを制限するには、nodeSelectorフィールドを使用します。サービストラフィックを処理するノードが選択されると、OVN-Kubernetes はそのノードにegress-service.k8s.ovn.org/<svc-namespace>-<svc-name>: ""という形式でラベルを付けます。nodeSelectorフィールドが指定されていない場合、どのノードでもLoadBalancerサービストラフィックを管理できます。 - 5
- オプション: Egress トラフィックのルーティングテーブル ID を指定します。必ず
NodeNetworkConfigurationPolicyリソースで定義されているroute-table-idID と一致する値を指定してください。network仕様を含めない場合、Egress サービスはデフォルトのホストネットワークを使用します。
Egress サービス仕様の例
19.13.2. Egress サービスのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
Egress サービスをデプロイして、LoadBalancer サービスの背後にある Pod の Egress トラフィックを管理できます。
次の例では、LoadBalancer サービスの Ingress IP アドレスと同じ送信元 IP アドレスを持つように Egress トラフィックを設定します。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 -
cluster-admin権限を持つユーザーとしてログインしている。 -
MetalLB
BGPPeerリソースを設定している。
手順
サービスに必要な IP を使用して
IPAddressPoolCR を作成します。次の例のような内容を含むファイル (
ip-addr-pool.yamlなど) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、IP アドレスプールの設定を適用します。
oc apply -f ip-addr-pool.yaml
$ oc apply -f ip-addr-pool.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
ServiceCR およびEgressServiceCR を作成します。次の例のような内容を含むファイル
(service-egress-service.yamlなど) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
LoadBalancerサービスは、example-poolIP アドレスプールから MetalLB によって割り当てられた IP アドレスを使用します。- 2
- この例では、
LoadBalancerIP値を使用して、LoadBalancerサービスの Ingress IP アドレスを Egress トラフィックの送信元 IP アドレスとして割り当てます。 - 3
LoadBalancerIP値を指定すると、単一ノードがLoadBalancerサービスのトラフィックを処理します。この例では、トラフィックを処理する場合にworkerラベルが割り当てられたノードのみを選択できます。ノードが選択されると、OVN-Kubernetes はそのノードにegress-service.k8s.ovn.org/<svc-namespace>-<svc-name>: ""という形式でラベルを付けます。
注記sourceIPBy: "LoadBalancerIP"設定を使用する場合は、BGPAdvertisementカスタムリソース (CR) でロードバランサーノードを指定する必要があります。次のコマンドを実行して、サービスと Egress サービスの設定を適用します。
oc apply -f service-egress-service.yaml
$ oc apply -f service-egress-service.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
BGPAdvertisementCR を作成してサービスをアドバタイズします。次の例のような内容を含むファイル
(service-bgp-advertisement.yamlなど) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- この例では、
EgressServiceCR は、ロードバランサーサービス IP アドレスを使用するように、Egress トラフィックの送信元 IP アドレスを設定します。したがって、Pod から発信されるトラフィックに同じリターンパスを使用するには、リターントラフィックのロードバランサーノードを指定する必要があります。
検証
次のコマンドを実行して、MetalLB サービスの背後で実行されている Pod のアプリケーションエンドポイントにアクセスできることを確認します。
curl <external_ip_address>:<port_number>
$ curl <external_ip_address>:<port_number>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- アプリケーションのエンドポイントに合わせて外部 IP アドレスとポート番号を更新します。
-
LoadBalancerサービスの Ingress IP アドレスを Egress トラフィックの送信元 IP アドレスとして割り当てた場合は、tcpdumpなどのツールを使用して外部クライアントで受信したパケットを分析し、この設定を確認します。