15.2. プロジェクトの egress IP の設定
クラスター管理者は、OpenShift SDN デフォルト Container Network Interface (CNI) ネットワークプロバイダーが 1 つ以上の egress IP アドレスをプロジェクトに割り当てるように設定できます。
15.2.1. プロジェクトの egress トラフィックについての egress IP アドレスの割り当て
プロジェクトの egress IP アドレスを設定することにより、指定されたプロジェクトからのすべての外部送信接続が同じ固定ソース IP アドレスを共有します。外部リソースは、egress IP アドレスに基づいて特定のプロジェクトからのトラフィックを認識できます。プロジェクトに割り当てられる egress IP アドレスは、トラフィックを特定の宛先に送信するために使用される egress ルーターとは異なります。
egress IP アドレスは、ノードのプライマリーネットワークインターフェイスの追加 IP アドレスとして実装され、ノードのプライマリー IP アドレスと同じサブネットにある必要があります。
egress IP アドレスは、ifcfg-eth0
などのように Linux ネットワーク設定ファイルで設定することはできません。
Amazon Web Services (AWS)、Google Cloud Platform (GCP)、および Azure の Egress IP は、OpenShift Container Platform バージョン 4.10 以降でのみサポートされます。
一部のクラウドまたは仮想マシンソリューションを使用する場合に、プライマリーネットワークインターフェイスで追加の IP アドレスを許可するには追加の設定が必要になる場合があります。
egress IP アドレスは、NetNamespace
オブジェクトの egressIPs
パラメーターを設定して namespace に割り当てることができます。egress IP がプロジェクトに関連付けられた後に、 OpenShift SDN は 2 つの方法で Egress IP をホストに割り当てることを可能にします。
- 自動的に割り当てる 方法では、egress IP アドレス範囲はノードに割り当てられます。
- 手動で割り当てる 方法では、1 つ以上の egress IP アドレスの一覧がノードに割り当てられます。
egress IP アドレスを要求する namespace は、それらの egress IP アドレスをホストできるノードに一致し、egress IP アドレスはそれらのノードに割り当てられます。egressIPs
パラメーターが NetNamespace
オブジェクトに設定されるものの、ノードがその egress IP アドレスをホストしない場合、namespace からの egress トラフィックはドロップされます。
ノードの高可用性は自動的に実行されます。egress IP アドレスをホストするノードが到達不可能であり、egress IP アドレスをホストできるノードがある場合、egress IP アドレスは新規ノードに移行します。到達不可能なノードが再びオンラインに戻ると、ノード間で egress IP アドレスのバランスを図るために egress IP アドレスは自動的に移行します。
OpenShift SDN クラスターネットワークプロバイダーで egress IP アドレスを使用する場合、以下の制限が適用されます。
- 手動で割り当てられた egress IP アドレスと、自動的に割り当てられた egress IP アドレスは同じノードで使用することができません。
- IP アドレス範囲から egress IP アドレスを手動で割り当てる場合、その範囲を自動の IP 割り当てで利用可能にすることはできません。
- OpenShift SDN egress IP アドレス実装を使用して、複数の namespace で egress IP アドレスを共有することはできません。複数の namespace 間で IP アドレスを共有する必要がある場合は、OVN-Kubernetes クラスターネットワークプロバイダーの egress IP アドレスの実装により、複数の namespace で IP アドレスを共有できます。
OpenShift SDN をマルチテナントモードで使用する場合、それらに関連付けられたプロジェクトによって別の namespace に参加している namespace と共に egress IP アドレスを使用することはできません。たとえば、project1
および project2
に oc adm pod-network join-projects --to=project1 project2
コマンドを実行して参加している場合、どちらもプロジェクトも egress IP アドレスを使用できません。詳細は、BZ#1645577 を参照してください。
15.2.1.1. 自動的に割り当てられた egress IP アドレスを使用する場合の考慮事項
egress IP アドレスの自動割り当て方法を使用する場合、以下の考慮事項が適用されます。
-
各ノードの
HostSubnet
リソースのegressCIDRs
パラメーターを設定して、ノードでホストできる egress IP アドレスの範囲を指定します。OpenShift Container Platform は、指定する IP アドレス範囲に基づいてHostSubnet
リソースのegressIPs
パラメーターを設定します。
namespace の egress IP アドレスをホストするノードに到達できない場合、OpenShift Container Platform は互換性のある egress IP アドレス範囲を持つ別のノードに egress IP アドレスを再割り当てします。自動割り当て方法は、追加の IP アドレスをノードに関連付ける柔軟性のある環境にインストールされたクラスターに最も適しています。
15.2.1.2. 手動で割り当てられた egress IP アドレスを使用する場合の考慮事項
このアプローチは、パブリッククラウド環境など、追加の IP アドレスをノードに関連付ける際に制限がある可能性があるクラスターに使用されます。
egress IP アドレスに手動割り当て方法を使用する場合、以下の考慮事項が適用されます。
-
各ノードの
HostSubnet
リソースのegressIPs
パラメーターを設定して、ノードでホストできる IP アドレスを指定します。 - namespace ごとに複数の egress IP アドレスがサポートされます。
namespace に複数の egress IP アドレスがあり、それらのアドレスが複数のノードでホストされる場合、以下の追加の考慮事項が適用されます。
- Pod が egress IP アドレスをホストするノード上にある場合、その Pod はノード上の egress IP アドレスを常に使用します。
- Pod が egress IP アドレスをホストするノードにない場合、その Pod はランダムで egress IP アドレスを使用します。
15.2.2. namespace の自動的に割り当てられた egress IP アドレスの有効化
OpenShift Container Platform では、1 つ以上のノードで特定の namespace の egress IP アドレスの自動的な割り当てを有効にできます。
前提条件
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 -
OpenShift CLI (
oc
) がインストールされている。
手順
以下の JSON を使用して、
NetNamespace
オブジェクトを egress IP アドレスで更新します。$ oc patch netnamespace <project_name> --type=merge -p \ '{ "egressIPs": [ "<ip_address>" ] }'
ここでは、以下のようになります。
<project_name>
- プロジェクトの名前を指定します。
<ip_address>
-
egressIPs
配列の 1 つ以上の egress IP アドレスを指定します。
たとえば、
project1
を IP アドレスの 192.168.1.100 に、project2
を IP アドレスの 192.168.1.101 に割り当てるには、以下を実行します。$ oc patch netnamespace project1 --type=merge -p \ '{"egressIPs": ["192.168.1.100"]}' $ oc patch netnamespace project2 --type=merge -p \ '{"egressIPs": ["192.168.1.101"]}'
注記OpenShift SDN は
NetNamespace
オブジェクトを管理するため、既存のNetNamespace
オブジェクトを変更することによってのみ変更を加えることができます。新規NetNamespace
オブジェクトは作成しません。以下の JSON を使用して、各ホストの
egressCIDRs
パラメーターを設定して egress IP アドレスをホストできるノードを示します。$ oc patch hostsubnet <node_name> --type=merge -p \ '{ "egressCIDRs": [ "<ip_address_range>", "<ip_address_range>" ] }'
ここでは、以下のようになります。
<node_name>
- ノード名を指定します。
<ip_address_range>
-
CIDR 形式の IP アドレス範囲を指定します。
egressCIDRs
配列に複数のアドレス範囲を指定できます。
たとえば、
node1
およびnode2
を、192.168.1.0 から 192.168.1.255 の範囲で egress IP アドレスをホストするように設定するには、以下を実行します。$ oc patch hostsubnet node1 --type=merge -p \ '{"egressCIDRs": ["192.168.1.0/24"]}' $ oc patch hostsubnet node2 --type=merge -p \ '{"egressCIDRs": ["192.168.1.0/24"]}'
OpenShift Container Platform はバランスを取りながら特定の egress IP アドレスを利用可能なノードに自動的に割り当てます。この場合、egress IP アドレス 192.168.1.100 を
node1
に、egress IP アドレス 192.168.1.101 をnode2
に割り当て、その逆も行います。
15.2.3. namespace の手動で割り当てられた egress IP アドレスの設定
OpenShift Container Platform で、1 つ以上の egress IP アドレスを namespace に関連付けることができます。
前提条件
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 -
OpenShift CLI (
oc
) がインストールされている。
手順
以下の JSON オブジェクトを必要な IP アドレスで指定して、
NetNamespace
オブジェクトを更新します。$ oc patch netnamespace <project_name> --type=merge -p \ '{ "egressIPs": [ "<ip_address>" ] }'
ここでは、以下のようになります。
<project_name>
- プロジェクトの名前を指定します。
<ip_address>
-
egressIPs
配列の 1 つ以上の egress IP アドレスを指定します。
たとえば、
project1
プロジェクトを IP アドレス192.168.1.100
および192.168.1.101
に割り当てるには、以下を実行します。$ oc patch netnamespace project1 --type=merge \ -p '{"egressIPs": ["192.168.1.100","192.168.1.101"]}'
高可用性を提供するには、
egressIPs
の値を異なるノードの 2 つ以上の IP アドレスに設定します。複数の egress IP アドレスが設定されている場合、Pod はすべての egress IP アドレスをほぼ均等に使用します。注記OpenShift SDN は
NetNamespace
オブジェクトを管理するため、既存のNetNamespace
オブジェクトを変更することによってのみ変更を加えることができます。新規NetNamespace
オブジェクトは作成しません。egress IP をノードホストに手動で割り当てます。
egressIPs
パラメーターを、ノードホストのHostSubnet
オブジェクトに設定します。以下の JSON を使用して、そのノードホストに割り当てる必要のある任意の数の IP アドレスを含めることができます。$ oc patch hostsubnet <node_name> --type=merge -p \ '{ "egressIPs": [ "<ip_address>", "<ip_address>" ] }'
ここでは、以下のようになります。
<node_name>
- ノード名を指定します。
<ip_address>
-
IP アドレスを指定します。
egressIPs
配列に複数の IP アドレスを指定できます。
たとえば、
node1
に Egress IP192.168.1.100
、192.168.1.101
、および192.168.1.102
が設定されるように指定するには、以下を実行します。$ oc patch hostsubnet node1 --type=merge -p \ '{"egressIPs": ["192.168.1.100", "192.168.1.101", "192.168.1.102"]}'
直前の例では、
project1
のすべての egress トラフィックは、指定された egress IP をホストするノードにルーティングされてから、その IP アドレスに Network Address Translation (NAT) を使用して接続されます。