26.2. サービスの ExternalIP の設定
クラスター管理者は、トラフィックをクラスター内のサービスに送信できるクラスター外の IP アドレスブロックを指定できます。
この機能は通常、ベアメタルハードウェアにインストールされているクラスターに最も役立ちます。
26.2.1. 前提条件
- ネットワークインフラストラクチャーは、外部 IP アドレスのトラフィックをクラスターにルーティングする必要があります。
26.2.2. ExternalIP について
クラウド以外の環境では、OpenShift Container Platform は ExternalIP 機能を使用して外部 IP アドレスの Service
オブジェクトの spec.externalIPs[]
フィールドへの割り当てをサポートします。このフィールドを設定すると、OpenShift Container Platform は追加の仮想 IP アドレスをサービスに割り当てます。IP アドレスは、クラスターに定義されたサービスネットワーク外に指定できます。type=NodePort
が設定されたサービスと同様に ExternalIP 機能で設定されたサービスにより、トラフィックを負荷分散のためにローカルノードに転送することができます。
ネットワークインフラストラクチャーを設定し、定義する外部 IP アドレスブロックがクラスターにルーティングされるようにする必要があります。
OpenShift Container Platform は以下の機能を追加して Kubernetes の ExternalIP 機能を拡張します。
- 設定可能なポリシーでの、ユーザーによる外部 IP アドレスの使用の制限
- 要求時の外部 IP アドレスのサービスへの自動割り当て
ExternalIP 機能の使用はデフォルトで無効にされます。これは、外部 IP アドレスへのクラスター内のトラフィックがそのサービスにダイレクトされるため、セキュリティー上のリスクを生じさせる可能性があります。これにより、クラスターユーザーは外部リソースに関する機密性の高いトラフィックをインターセプトできるようになります。
この機能は、クラウド以外のデプロイメントでのみサポートされます。クラウドデプロイメントの場合、クラウドの自動デプロイメントのためにロードバランサーサービスを使用し、サービスのエンドポイントをターゲットに設定します。
MetalLB 実装または IP フェイルオーバーデプロイメントのいずれかを使用して、次の方法で ExternalIP リソースをサービスに接続できます。
- 外部 IP の自動割り当て
-
OpenShift Container Platform は、
spec.type=LoadBalancer
を設定してService
オブジェクトを作成する際に、IP アドレスをautoAssignCIDRs
CIDR ブロックからspec.externalIPs[]
配列に自動的に割り当てます。この場合、OpenShift Container Platform はロードバランサーサービスタイプのクラウド以外のバージョンを実装し、IP アドレスをサービスに割り当てます。自動割り当てはデフォルトで無効にされており、以下のセクションで説明されているように、これはクラスター管理者が設定する必要があります。 - 外部 IP の手動割り当て
-
OpenShift Container Platform は
Service
オブジェクトの作成時にspec.externalIPs[]
配列に割り当てられた IP アドレスを使用します。別のサービスによってすでに使用されている IP アドレスを指定することはできません。
26.2.2.1. 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 ポートを介してサービスのエンドポイントに到達できます。
クラスター管理者は、OpenShiftSDN ネットワークタイプと OVN-Kubernetes ネットワークタイプの両方で externalIP へのルーティングを設定する必要があります。割り当てる IP アドレスブロックがクラスター内の 1 つ以上のノードで終了することを確認する必要もあります。詳細は、Kubernetes External IPs を参照してください。
OpenShift Container Platform は IP アドレスの自動および手動割り当ての両方をサポートしており、それぞれのアドレスは 1 つのサービスの最大数に割り当てられることが保証されます。これにより、各サービスは、ポートが他のサービスで公開されているかによらず、自らの選択したポートを公開できます。
OpenShift Container Platform の autoAssignCIDRs
で定義された IP アドレスブロックを使用するには、ホストのネットワークに必要な IP アドレスの割り当ておよびルーティングを設定する必要があります。
以下の YAML は、外部 IP アドレスが設定されたサービスを説明しています。
spec.externalIPs[]
が設定された Service
オブジェクトの例
apiVersion: v1 kind: Service metadata: name: http-service spec: clusterIP: 172.30.163.110 externalIPs: - 192.168.132.253 externalTrafficPolicy: Cluster ports: - name: highport nodePort: 31903 port: 30102 protocol: TCP targetPort: 30102 selector: app: web sessionAffinity: None type: LoadBalancer status: loadBalancer: ingress: - ip: 192.168.132.253
26.2.2.2. 外部 IP アドレスの割り当ての制限
クラスター管理者は、IP アドレスブロックを指定して許可および拒否できます。
制限は、cluster-admin
権限を持たないユーザーにのみ適用されます。クラスター管理者は、サービスの spec.externalIPs[]
フィールドを任意の IP アドレスに常に設定できます。
spec.ExternalIP.policy
フィールドを指定して、policy
オブジェクトが定義された IP アドレスポリシーを設定します。ポリシーオブジェクトには以下の形があります。
{ "policy": { "allowedCIDRs": [], "rejectedCIDRs": [] } }
ポリシーの制限を設定する際に、以下のルールが適用されます。
-
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 アドレスが拒否されていない場合にのみ正常に実行されます。
-
26.2.2.3. ポリシーオブジェクトの例
以下に続く例では、複数のポリシー設定の例を示します。
以下の例では、ポリシーは OpenShift Container Platform が外部 IP アドレスが指定されたサービスを作成するのを防ぎます。
Service
オブジェクトのspec.externalIPs[]
に指定された値を拒否するポリシーの例apiVersion: config.openshift.io/v1 kind: Network metadata: name: cluster spec: externalIP: policy: {} ...
以下の例では、
allowedCIDRs
およびrejectedCIDRs
フィールドの両方が設定されます。許可される、および拒否される CIDR ブロックの両方を含むポリシーの例
apiVersion: config.openshift.io/v1 kind: Network metadata: name: cluster spec: externalIP: policy: allowedCIDRs: - 172.16.66.10/23 rejectedCIDRs: - 172.16.66.10/24 ...
以下の例では、
policy
はnull
に設定されます。null
に設定されている場合、oc get networks.config.openshift.io -o yaml
を入力して設定オブジェクトを検査する際に、policy
フィールドは出力に表示されません。Service
オブジェクトのspec.externalIPs[]
に指定された値を許可するポリシーの例apiVersion: config.openshift.io/v1 kind: Network metadata: name: cluster spec: externalIP: policy: null ...
26.2.3. 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
apiVersion: config.openshift.io/v1 kind: Network metadata: name: cluster spec: externalIP: autoAssignCIDRs: [] 1 policy: 2 ...
以下の YAML は、policy
スタンザのフィールドについて説明しています。
Network.config.openshift.io policy
スタンザ
policy: allowedCIDRs: [] 1 rejectedCIDRs: [] 2
外部 IP 設定の例
外部 IP アドレスプールの予想される複数の設定が以下の例で表示されています。
以下の YAML は、自動的に割り当てられた外部 IP アドレスを有効にする設定を説明しています。
spec.externalIP.autoAssignCIDRs
が設定された設定例apiVersion: config.openshift.io/v1 kind: Network metadata: name: cluster spec: ... externalIP: autoAssignCIDRs: - 192.168.132.254/29
以下の YAML は、許可された、および拒否された CIDR 範囲のポリシールールを設定します。
spec.externalIP.policy
が設定された設定例apiVersion: config.openshift.io/v1 kind: Network metadata: name: cluster spec: ... externalIP: policy: allowedCIDRs: - 192.168.132.0/29 - 192.168.132.8/29 rejectedCIDRs: - 192.168.132.7/32
26.2.4. クラスターの外部 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 edit networks.config cluster
以下の例のように ExternalIP 設定を変更します。
apiVersion: config.openshift.io/v1 kind: Network metadata: name: cluster spec: ... externalIP: 1 ...
- 1
externalIP
スタンザの設定を指定します。
更新された ExternalIP 設定を確認するには、以下のコマンドを入力します。
$ oc get networks.config cluster -o go-template='{{.spec.externalIP}}{{"\n"}}'