26.2. サービスの ExternalIP の設定
クラスター管理者は、トラフィックをクラスター内のサービスに送信できるクラスター外の IP アドレスブロックを指定できます。
この機能は通常、ベアメタルハードウェアにインストールされているクラスターに最も役立ちます。
26.2.1. 前提条件
- ネットワークインフラストラクチャーは、外部 IP アドレスのトラフィックをクラスターにルーティングする必要があります。
26.2.2. ExternalIP について
クラウド以外の環境では、OpenShift Container Platform は ExternalIP 機能の使用をサポートし、Service
オブジェクトの spec.externalIPs[]
パラメーターで外部 IP アドレスを指定します。type=NodePort
が設定されたサービスと同様に ExternalIP 機能で設定されたサービス。これにより、トラフィックは負荷分散のためにローカルノードに転送されます。
クラウド環境の場合は、クラウドロードバランサーの自動デプロイメントにロードバランサーサービスを使用し、サービスのエンドポイントをターゲットにします。
パラメーターの値を指定した後に、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 アドレスがノードからネットワークインターフェイスで設定されていません。トラフィックを処理するには、静的アドレス解決プロトコル(ARP)エントリーなどの方法を使用して、外部 IP にルーティングおよびアクセスを設定する必要があります。
OpenShift Container Platform は以下の機能を追加して Kubernetes の ExternalIP 機能を拡張します。
- 設定可能なポリシーでの、ユーザーによる外部 IP アドレスの使用の制限
- 要求時の外部 IP アドレスのサービスへの自動割り当て
26.2.3. 関連情報
26.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 # ...
26.2.5. 外部 IP アドレスの割り当ての制限
クラスター管理者は、IP アドレスブロックを指定して、サービスの IP アドレスを許可し、拒否できます。制限は、cluster-admin
権限を持たないユーザーにのみ適用されます。クラスター管理者は、サービスの spec.externalIPs[]
フィールドを任意の IP アドレスに常に設定できます。
policy
オブジェクトの spec.ExternalIP.policy
パラメーターの Classless Inter-Domain Routing (CIDR)アドレスブロックを指定して IP アドレスポリシーを設定します。
ポリシー
オブジェクトの JSON 形式とその CIDR パラメーターの例
{ "policy": { "allowedCIDRs": [], "rejectedCIDRs": [] } }
ポリシーの制限を設定する際に、以下のルールが適用されます。
-
ポリシー
が{}
に設定されている場合、spec.ExternalIPs[]
でService
オブジェクトを作成すると、サービスが失敗します。この設定は OpenShift Container Platform のデフォルトです。ポリシーに同じ動作が存在します:null
。 policy
が設定され、policy.allowedCIDRs[]
またはpolicy.rejectedCIDRs[]
のいずれかが設定される場合、以下のルールが適用されます。-
allowedCIDRs[]
およびrejectedCIDRs[]
の両方が設定されている場合、rejectedCIDRs[]
はallowedCIDRs[]
よりも優先されます。 -
allowedCIDRs[]
が設定される場合、spec.ExternalIPs[]
を使ったService
オブジェクトの作成は、指定された IP アドレスが許可される場合にのみ成功します。 -
rejectedCIDRs[]
が設定される場合、spec.ExternalIPs[]
が設定されているService
オブジェクトの作成は、指定された IP アドレスが拒否されていない場合にのみ成功します。
-
26.2.6. ポリシーオブジェクトの例
このセクションの例では、さまざまな spec.externalIP.policy
設定を示しています。
以下の例では、ポリシーは 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
は{}
に設定されます。この設定では、oc get networks.config.openshift.io -o yaml
コマンドを使用して設定を表示すると、ポリシー
パラメーターがコマンド出力に表示されないことを意味します。ポリシーに同じ動作が存在します: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: {} # ...
26.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
26.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"}}'