第9章 Egress IP アドレスの設定
クラスター管理者は、1 つ以上の Egress IP アドレスを、namespace または namespace 内の特定の Pod に割り当てるように、OVN-Kubernetes Container Network Interface (CNI) ネットワークプラグインを設定できます。
9.1. Egress IP アドレスアーキテクチャーの設計および実装 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform の egress IP アドレス機能を使用することで、1 つ以上の namespace の 1 つ以上の Pod からのトラフィックに、クラスターネットワーク外のサービスの一貫したソース IP アドレスがあることを確認できます。
たとえば、クラスター外のサーバーでホストされるデータベースを定期的にクエリーする Pod がある場合があります。サーバーにアクセス要件を適用するために、パケットフィルタリングデバイスは、特定の IP アドレスからのトラフィックのみを許可するよう設定されます。この特定の Pod のみからサーバーに確実にアクセスできるようにするには、サーバーに要求を行う Pod に特定の Egress IP アドレスを設定できます。
namespace に割り当てられた Egress IP アドレスは、特定の宛先にトラフィックを送信するために使用されるスロールーターとは異なります。
一部のクラスター設定では、アプリケーション Pod と Ingress ルーター Pod が同じノードで実行されます。このシナリオでアプリケーションプロジェクトの Egress IP アドレスを設定する場合、アプリケーションプロジェクトからルートに要求を送信するときに IP アドレスは使用されません。
Egress IP アドレスは、ifcfg-eth0
などのように Linux ネットワーク設定ファイルで設定することはできません。
9.1.1. プラットフォームサポート リンクのコピーリンクがクリップボードにコピーされました!
各種のプラットフォームでの Egress IP アドレス機能のサポートは、以下の表で説明されています。
プラットフォーム | サポート対象 |
---|---|
ベアメタル | はい |
VMware vSphere | はい |
Red Hat OpenStack Platform (RHOSP) | はい |
Amazon Web Services (AWS) | はい |
Google Cloud Platform (GCP) | はい |
Microsoft Azure | はい |
IBM Z® および IBM® LinuxONE | はい |
IBM Z® および IBM® LinuxONE for Red Hat Enterprise Linux (RHEL) KVM | はい |
IBM Power® | はい |
Nutanix | はい |
EgressIP 機能を持つコントロールプレーンノードへの Egress IP アドレスの割り当ては、Amazon Web Services (AWS) でプロビジョニングされるクラスターではサポートされません。(BZ#2039656)。
9.1.2. パブリッククラウドプラットフォームに関する考慮事項 リンクのコピーリンクがクリップボードにコピーされました!
通常、パブリッククラウドプロバイダーは egress IP アドレスに制限を設定します。つまり、パブリッククラウドインフラストラクチャー上にプロビジョニングされたクラスターでは、ノードごとに割り当て可能な IP アドレスの絶対数に制約があります。ノードごとに割り当て可能な IP アドレスの最大数、つまり IP 容量 は、次の式で表すことができます。
IP capacity = public cloud default capacity - sum(current IP assignments)
IP capacity = public cloud default capacity - sum(current IP assignments)
Egress IP アドレス機能はノードごとの IP アドレス容量を管理しますが、デプロイメントでこの制約を計画することが重要です。たとえば、パブリッククラウドプロバイダーが IP アドレス容量をノードあたり 10 個に制限していて、ノードが 8 個ある場合、割り当て可能な IP アドレスの合計数は 80 個だけになります。IP アドレス容量を引き上げるには、追加のノードを割り当てる必要があります。たとえば、割り当て可能な IP アドレスが 150 個必要な場合は、7 つの追加のノードを割り当てる必要があります。
パブリッククラウド環境内の任意のノードの IP 容量とサブネットを確認するには、oc get node <node_name> -o yaml
コマンドを入力します。cloud.network.openshift.io/egress-ipconfig
アノテーションには、ノードの容量とサブネット情報が含まれています。
アノテーション値は、プライマリーネットワークインターフェイスに次の情報を提供するフィールドを持つ単一のオブジェクトを持つ配列です。
-
interface
: AWS と Azure のインターフェイス ID と GCP のインターフェイス名を指定します。 -
ifaddr
: 一方または両方の IP アドレスファミリーのサブネットマスクを指定します。 -
capacity
: ノードの IP アドレス容量を指定します。AWS では、IP アドレス容量は IP アドレスファミリーごとに提供されます。Azure と GCP では、IP アドレスの容量には IPv4 アドレスと IPv6 アドレスの両方が含まれます。
ノード間のトラフィックの送信 IP アドレスの自動アタッチおよびデタッチが可能です。これにより、namespace 内の多くの Pod からのトラフィックが、クラスター外の場所への一貫した送信元 IP アドレスを持つことができます。これは、OpenShift Container Platform 4.18 の Red Hat OpenShift Networking におけるデフォルトのネットワーキングプラグインである OpenShift SDN および OVN-Kubernetes もサポートします。
RHOSP Egress IP アドレス機能は、egressip-<IP address>
と呼ばれる Neutron 予約ポートを作成します。OpenShift Container Platform クラスターのインストールに使用したものと同じ RHOSP ユーザーを使用して、Floating IP アドレスをこの予約ポートに割り当て、Egress トラフィック用の予測可能な SNAT アドレスを指定できます。RHOSP ネットワーク上の Egress IP アドレスが、ノードのフェイルオーバーなどのためにあるノードから別のノードに移動されると、Neutron 予約ポートが削除され、再作成されます。これは、フローティング IP の関連付けが失われ、フローティング IP アドレスを新しい予約ポートに手動で再割り当てする必要があることを意味します。
RHOSP クラスター管理者が Floating IP を予約ポートに割り当てると、OpenShift Container Platform は予約ポートを削除できません。RHOSP クラスター管理者が予約ポートから Floating IP の割り当てを解除するまで、CloudPrivateIPConfig
オブジェクトは削除および移動操作を実行できません。
次の例は、いくつかのパブリッククラウドプロバイダーのノードからのアノテーションを示しています。アノテーションは、読みやすくするためにインデントされています。
AWS での cloud.network.openshift.io/egress-ipconfig
アノテーションの例
GCP での cloud.network.openshift.io/egress-ipconfig
アノテーションの例
次のセクションでは、容量計算で使用するためにサポートされているパブリッククラウド環境の IP アドレス容量を説明します。
9.1.2.1. Amazon Web Services (AWS) の IP アドレス容量の制限 リンクのコピーリンクがクリップボードにコピーされました!
AWS では、IP アドレスの割り当てに関する制約は、設定されているインスタンスタイプによって異なります。詳細は、IP addresses per network interface per instance type を参照してください。
9.1.2.2. Google Cloud Platform (GCP) の IP アドレス容量の制限 リンクのコピーリンクがクリップボードにコピーされました!
GCP では、ネットワークモデルは、IP アドレスの割り当てではなく、IP アドレスのエイリアス作成を介して追加のノード IP アドレスを実装します。ただし、IP アドレス容量は IP エイリアス容量に直接マッピングされます。
IP エイリアスの割り当てには、次の容量制限があります。
- ノードごとに、IPv4 と IPv6 の両方の IP エイリアスの最大数は 100 です。
- VPC ごとに、IP エイリアスの最大数は指定されていませんが、OpenShift Container Platform のスケーラビリティーテストでは、最大数が約 15,000 であることが明らかになっています。
詳細は、インスタンスごと のクォータと エイリアス IP 範囲の概要 を参照してください。
9.1.2.3. Microsoft Azure IP アドレスの容量制限 リンクのコピーリンクがクリップボードにコピーされました!
Azure では、IP アドレスの割り当てに次の容量制限があります。
- NIC ごとに、IPv4 と IPv6 の両方で割り当て可能な IP アドレスの最大数は 256 です。
- 仮想ネットワークごとに、割り当てられる IP アドレスの最大数は 65,536 を超えることはできません。
詳細は、ネットワークの制限 を参照してください。
9.1.3. Egress IP アドレス設定のアーキテクチャー図 リンクのコピーリンクがクリップボードにコピーされました!
以下の図は、Egress IP アドレス設定を示しています。この図では、クラスターの 3 つのノードで実行される 2 つの異なる namespace の 4 つの Pod を説明します。ノードには、ホストネットワークの 192.168.126.0/18
CIDR ブロックから IP アドレスが割り当てられます。
ノード 1 とノード 3 の両方に k8s.ovn.org/egress-assignable: ""
というラベルが付けられるため、Egress IP アドレスの割り当てに利用できます。
図の破線は、pod1、pod2、および pod3 からのトラフィックフローが Pod ネットワークを通過し、クラスターがノード 1 およびノード 3 から出る様子を示しています。外部サービスが、EgressIP
オブジェクトの例で選択した Pod からトラフィックを受信する場合、送信元 IP アドレスは 192.168.126.10
または 192.168.126.102
のいずれかになります。トラフィックはこれらの 2 つのノード間でほぼ均等に分散されます。
図に基づいて、以下のマニフェストファイルで namespace を定義します。
namespace オブジェクト
以下の EgressIP オブジェクトは、以下の EgressIP
オブジェクトは、env
ラベルが prod
に設定された namespace のすべての Pod を選択する設定について説明しています。選択された Pod の Egress IP アドレスは 192.168.126.10
および 192.168.126.102
です。
EgressIP
オブジェクト
直前の例の設定の場合、OpenShift Container Platform は両方の Egress IP アドレスを利用可能なノードに割り当てます。status
フィールドは、Egress IP アドレスの割り当ての有無および割り当てられる場所を反映します。
9.1.4. 追加のネットワークインターフェイスで egress IP アドレスを使用する際の考慮事項 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform では、egress IP アドレスは、ネットワークトラフィックを制御する方法を管理者に提供します。egress IP アドレスは、br-ex
Open vSwitch (OVS)ブリッジインターフェイスおよび IP 接続が有効になっている物理インターフェイスと共に使用できます。
次のコマンドを実行して、ネットワークインターフェイスのタイプを検査できます。
ip -details link show
$ ip -details link show
プライマリーネットワークインターフェイスには、サブネットマスクも含まれるノード IP アドレスが割り当てられます。このノードの IP アドレスの情報は、k8s.ovn.org/node-primary-ifaddr
アノテーションを検査して、クラスター内の各ノードの Kubernetes ノードオブジェクトから取得できます。IPv4 クラスターでは、このアノテーションは "k8s.ovn.org/node-primary-ifaddr: {"ipv4":"192.168.111.23/24"}"
の例に似ています。
egress IP アドレスがプライマリーネットワークインターフェイスサブネットのサブネット内にない場合、プライマリーネットワークインターフェイスタイプではない別の Linux ネットワークインターフェイスで egress IP アドレスを使用できます。これにより、OpenShift Container Platform 管理者は、ルーティング、アドレス指定、セグメンテーション、セキュリティーポリシーなどのネットワーク側面をより高度に制御できるようになります。この機能は、トラフィックのセグメント化や特殊な要件への対応などの目的で、ワークロードトラフィックを特定のネットワークインターフェイス経由でルーティングするオプションもユーザーに提供します。
egress IP アドレスがプライマリーネットワークインターフェイスのサブネット内にない場合、egress トラフィック用に別のネットワークインターフェイスがノードにある場合、選択される可能性があります。
k8s.ovn.org/host-cidrs
Kubernetes ノードアノテーションを検査して、その他のどのネットワークインターフェイスが egress IP アドレスアドレスをサポートするかを判断できます。このアノテーションには、プライマリーネットワークインターフェイスで見つかったアドレスとサブネットマスクが含まれています。また、追加のネットワークインターフェイスアドレスとサブネットマスク情報も含まれます。これらのアドレスおよびサブネットマスクは、long- prefix 一致ルーティング メカニズムを使用するネットワークインターフェイスに割り当てられ、egress IP アドレスをサポートするネットワークインターフェイスを判別します。
OVN-Kubernetes は、特定の namespace および Pod からのアウトバウンドネットワークトラフィックを制御および送信するメカニズムを提供します。これにより、特定のネットワークインターフェイス経由で、特定の Egress IP アドレスを使用してクラスターからトラフィックが出ていきます。
egress IP アドレスとトラフィックをプライマリーネットワークインターフェイスではない特定のインターフェイスでルーティングする必要のあるユーザーの場合は、以下の条件を満たしている必要があります。
- OpenShift Container Platform がベアメタルクラスターにインストールされている。この機能は、クラウドまたはハイパーバイザー環境では無効になります。
- OpenShift Container Platform Pod が、ホストネットワークを使用する Pod として設定されていない。
- ネットワークインターフェイスが削除されるか、または egress IP アドレスをインターフェイスでホストされることを許可する IP アドレスおよびサブネットマスクが削除される場合、egress IP アドレスを再設定されます。そのため、egress IP アドレスを別のノードおよびインターフェイスに割り当てることができました。
- セカンダリーネットワークインターフェイスカード (NIC) で Egress IP アドレスを使用する場合は、Node Tuning Operator を使用してセカンダリー NIC で IP 転送を有効にする必要があります。