29.2. サービスの ExternalIP の設定
クラスター管理者は、トラフィックをクラスター内のサービスに送信できるクラスター外の IP アドレスブロックを選択できます。
この機能は通常、ベアメタルハードウェアにインストールされているクラスターに最も役立ちます。
29.2.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
- ネットワークインフラストラクチャーは、外部 IP アドレスのトラフィックをクラスターにルーティングする必要があります。
29.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 アドレスのサービスへの自動割り当て
29.2.3. ExternalIP の設定 リンクのコピーリンクがクリップボードにコピーされました!
Network.config.openshift.io
カスタムリソース (CR) の以下のパラメーターは、OpenShift Container Platform での外部 IP アドレスの使用を制御します。
-
spec.externalIP.autoAssignCIDRs
は、サービスの外部 IP アドレスを選択する際にロードバランサーによって使用される IP アドレスブロックを定義します。OpenShift Container Platform は、自動割り当て用の単一 IP アドレスブロックのみをサポートします。手動で ExternalIP をサービスに割り当てる場合は、数に限りのある共有 IP アドレスのポートスペースを管理する必要があるため、この設定はそ手動で設定するよりも少ない手順で行えます。自動割り当てを有効にすると、Cloud Controller Manager Operator は、設定で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 が設定された Service
オブジェクトを示しています。
クラウドプロバイダープラットフォームでプライベートクラスターを実行する場合は、次の patch
コマンドを実行して、Ingress Controller のロードバランサーの公開スコープを internal
に変更できます。
oc -n openshift-ingress-operator patch ingresscontrollers/ingress-controller-with-nlb --type=merge --patch='{"spec":{"endpointPublishingStrategy":{"loadBalancer":{"scope":"Internal"}}}}'
$ oc -n openshift-ingress-operator patch ingresscontrollers/ingress-controller-with-nlb --type=merge --patch='{"spec":{"endpointPublishingStrategy":{"loadBalancer":{"scope":"Internal"}}}}'
このコマンドを実行すると、Ingress Controller は OpenShift Container Platform アプリケーションのルートへのアクセスを内部ネットワークのみに制限します。
29.2.4. 外部 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 アドレスが拒否されていない場合にのみ正常に実行されます。
-
29.2.5. ポリシーオブジェクトの例 リンクのコピーリンクがクリップボードにコピーされました!
このセクションの例では、さまざまな 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
29.2.6. 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
29.2.7. クラスターの外部 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