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. 関連情報
29.2.4. 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 ポートを介してサービスのエンドポイントに到達できます。
クラスター管理者は、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 # ...
29.2.5. 外部 IP アドレスの割り当ての制限
クラスター管理者は、IP アドレスブロックを指定してサービスの IP アドレスを許可または拒否できます。制限は、cluster-admin
権限を持たないユーザーにのみ適用されます。クラスター管理者は、サービスの spec.externalIPs[]
フィールドを任意の IP アドレスに常に設定できます。
policy
オブジェクトの spec.ExternalIP.policy
パラメーターに Classless Inter-Domain Routing (CIDR) アドレスブロックを指定して、IP アドレスポリシーを設定します。
policy
オブジェクトとその CIDR パラメーターの JSON 形式の例
{ "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 アドレスが拒否されていない場合にのみ正常に実行されます。
-
29.2.6. ポリシーオブジェクトの例
このセクションの例では、さまざまな spec.externalIP.policy
設定を示します。
以下の例のポリシーは、外部 IP アドレスが指定されたサービスを OpenShift Container Platform が作成できないようにします。
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
は{}
に設定されます。これが設定されている場合、oc get networks.config.openshift.io -o yaml
コマンドを使用して設定を表示してもpolicy
パラメーターはコマンド出力に表示されません。policy: null
の場合も同じ動作になります。Service
オブジェクトのspec.externalIPs[]
に指定された値を許可するポリシーの例apiVersion: config.openshift.io/v1 kind: Network metadata: name: cluster spec: clusterNetwork: - cidr: 10.128.0.0/14 hostPrefix: 23 externalIP: policy: {} # ...
29.2.7. 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
29.2.8. クラスターの外部 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"}}'