第16章 クラスターへのトラフィックの送信
16.1. クラスターへのトラフィックの送信
OpenShift Container Platform は、クラスター内で実行されるサービスを使ってクラスター外からの通信を実行するための複数の方法を提供します。
このセクションの手順では、クラスターの管理者が事前に行っておく必要のある前提条件があります。
管理者は、一定範囲の外部 IP アドレスから固有の外部 IP アドレスをサービスに割り当てることにより外部トラフィックが到達できるサービスのエンドポイントを公開することができます。管理者は CIDR 表記を使用してアドレスの範囲を指定でき、これによりユーザーはクラスターに対して外部 IP アドレスの要求を行うことができます。
各 IP アドレスは、各サービスがそれぞれ固有のエンドポイントを持つように 1 つのサービスにのみ割り当てる必要があります。起こり得るポートのクラッシュについては 「first-come, first-served (先着順)」で処理されます。
推奨事項は、推薦される順に以下に示しています。
方法 | 目的 |
---|---|
HTTP/HTTPS トラフィックおよび HTTPS 以外の TLS で暗号化されたプロトコル (TLS と SNI ヘッダーの使用など) へのアクセスを許可します。 | |
プールから割り当てられた IP アドレスを使った非標準ポートへのトラフィックを許可します。 | |
特定の IP アドレスを使った非標準ポートへのトラフィックを許可します。 | |
クラスターのすべてのノードでサービスを公開します。 |
16.2. ルーターを使用したトラフィックのクラスターへの送信
16.2.1. 概要
ルーターの使用は、OpenShift Container Platform クラスターへの外部アクセスを許可する最も一般的な方法です。
「ルーター」は、設定した「ルート」に基づいて、外部の要求を受け入れ、プロキシー化するように設定されます。これは Web アプリケーションに対応する HTTP/HTTPS(SNI)/TLS(SNI) に制限されます。
16.2.2. 管理者の前提条件
この手順を開始する前に、管理者は以下の条件を満たしていることを確認する必要があります。
- 要求がクラスターに到達するように外部ポートをクラスターネットワーク環境にセットアップします。たとえば名前については、クラスター内の特定ノードまたは他の IP アドレスを参照するように DNS で設定できます。「DNS ワイルドカード」機能はクラスター内の IP アドレスに対して名前のサブセットを設定するために使用できます。これを使用するユーザーは、管理者に問い合わせることなくクラスター内でルートをセットアップできます。
- 各ノードのローカルのファイアウォールが、IP アドレスの到達要求を許可していることを確認します。
- OpenShift Container Platform クラスターが、「アイデンティティープロバイダーを使用」して適切なユーザーアクセスを許可できるように設定します。
クラスター管理者ロールを持つユーザーが 1 名以上いることを確認します。このロールをユーザーに追加するには、以下のコマンドを実行します。
oc adm policy add-cluster-role-to-user cluster-admin username
- OpenShift Container Platform クラスターを、1 つ以上のマスターと 1 つ以上のノード、およびクラスターへのネットワークアクセスのあるクラスター外のシステムと共に用意します。この手順では、外部システムがクラスターと同じサブセットにあることを前提とします。別のサブセットの外部システムに必要な追加のネットワーク設定については、このトピックでは扱いません。
16.2.2.1. パブリック IP 範囲の定義
サービスへのアクセスを許可するための最初の手順として、マスター設定ファイルで外部 IP アドレス範囲を定義します。
クラスター管理者ロールを持つユーザーとして OpenShift Container Platform にログインします。
$ oc login Authentication required (openshift) Username: admin Password: Login successful. You have access to the following projects and can switch between them with 'oc project <projectname>': * default Using project "default".
以下のように /etc/origin/master/master-config.yaml ファイルで
externalIPNetworkCIDRs
パラメーターを設定します。networkConfig: externalIPNetworkCIDRs: - <ip_address>/<cidr>
以下に例を示します。
networkConfig: externalIPNetworkCIDRs: - 192.168.120.0/24
変更を有効にするために OpenShift Container Platform マスターサービスを再起動します。
# master-restart api # master-restart controllers
IP アドレスプールはクラスター内の 1 つ以上のノードで終了している必要があります。
16.2.3. プロジェクトおよびサービスの作成
公開するプロジェクトおよびサービスが存在しない場合、最初にプロジェクトを作成し、次にサービスを作成します。
プロジェクトおよびサービスがすでに存在する場合は、サービスを公開し、ルートを作成する という次の手順に進みます。
- OpenShift Container Platform にログインします。
サービスの新規プロジェクトを作成します。
$ oc new-project <project_name>
以下に例を示します。
$ oc new-project external-ip
oc new-app
コマンドを使用してサービスを作成します。以下に例を示します。
$ oc new-app \ -e MYSQL_USER=admin \ -e MYSQL_PASSWORD=redhat \ -e MYSQL_DATABASE=mysqldb \ registry.access.redhat.com/openshift3/mysql-55-rhel7
以下のコマンドを実行して新規サービスが作成されていることを確認します。
oc get svc NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE mysql-55-rhel7 172.30.131.89 <none> 3306/TCP 13m
デフォルトで、新規サービスには外部 IP アドレスがありません。
16.2.4. サービスを公開し、ルートを作成する
oc expose
コマンドを使用して、「サービスをルートとして公開する」必要があります。
サービスを公開するには、以下を実行します。
- OpenShift Container Platform にログインします。
公開するサービスが置かれているプロジェクトにログインします。
$ oc project project1
以下のコマンドを実行してルートを公開します。
oc expose service <service-name>
以下に例を示します。
oc expose service mysql-55-rhel7 route "mysql-55-rhel7" exposed
マスターで cURL などのツールを使用し、サービスのクラスター IP アドレスを使用してサービスに到達できることを確認します。
curl <pod-ip>:<port>
以下に例を示します。
curl 172.30.131.89:3306
このセクションの例では、クライアントアプリケーションを必要とする MySQL サービスを使用しています。
Got packets out of order
のメッセージと共に文字ストリングを取得する場合は、このサービスに接続されていることになります。MySQL クライアントがある場合は、標準 CLI コマンドでログインします。
$ mysql -h 172.30.131.89 -u admin -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. MySQL [(none)]>
16.2.5. ルーターの設定
管理者と連携してルーターを設定します。外部要求を許可し、設定されたルートに基づいてそれらをプロキシー送信するようにルーターを設定します。
管理者は「ワイルドカード DNS」エントリーを作成してからルーターをセットアップできます。その後は管理者に問い合わせることなく edge ルーターをセルフサービスで提供できます。
ルーターには、ユーザーがホスト名をセルフプロビジョニングできるかどうか、またはホスト名に特定のパターンを使用する必要があるかどうかを管理者が指定できるようにするコントロールがあります。
一連のルートが各種プロジェクトで作成される場合、ルートのセット全体が一連のルーターで利用可能になります。各ルートはルートのセットからルートを許可 (または選択) します。デフォルトで、すべてのルーターはすべてのルートを許可します。
全プロジェクトに含まれるすべての「ラベル」を表示するパーミッションを持つルーターは、ラベルに基づいて、許可するルートを選択できます。これは「ルーターのシャード化」と呼ばれています。これは一連のルーター間で受信トラフィックの負荷を分散する場合や、特定のルーターへのトラフィックを分離する場合に役立ちます。たとえば、Company A のトラフィックをあるルーターに設定し、Company B のトラフィックを別のルーターに指定する場合などに役立ちます。
ルーターは特定のノードで実行されるため、ルーターまたはノードが失敗すると、Ingress トラフィックが停止します。これによる影響を軽減するには、各種の異なるノードで冗長ルーターを作成し、「高可用性」を使用してノードの失敗時にルーター IP アドレスを切り換えます。
16.2.6. VIP を使用した IP フェイルオーバーの設定
オプションとして、管理者は IP フェイルオーバーを設定できます。
IP フェイルオーバーは、ノードセットの仮想 IP (VIP) アドレスのプールを管理します。セットのすべての VIP はセットから選択されるノードによって提供されます。VIP は単一ノードが利用可能である限り提供されます。ノード上で VIP を明示的に配布する方法がないため、VIP のないノードがある可能性も、多数の VIP を持つノードがある可能性もあります。ノードが 1 つのみ存在する場合は、すべての VIP がそのノードに配置されます。
VIP はクラスター外からルーティングできる必要があります。
IP フェイルオーバーを設定するには、以下を実行します。
マスターで
ipfailover
サービスアカウントに十分なセキュリティー権限があることを確認します。oc adm policy add-scc-to-user privileged -z ipfailover
以下のコマンドを実行して IP フェイルオーバーを作成します。
oc adm ipfailover --virtual-ips=<exposed-ip-address> --watch-port=<exposed-port> --replicas=<number-of-pods> --create
以下に例を示します。
oc adm ipfailover --virtual-ips="172.30.233.169" --watch-port=32315 --replicas=4 --create --> Creating IP failover ipfailover ... serviceaccount "ipfailover" created deploymentconfig "ipfailover" created --> Success
16.3. ロードバランサーを使用したトラフィックのクラスターへの送信
16.3.1. 概要
特定の外部 IP アドレスを必要としない場合、ロードバランサーサービスを OpenShift Container Platform クラスターへの外部アクセスを許可するよう設定することができます。
ロードバランサーサービスは設定済みのプールから固有の IP を割り当てます。ロードバランサーには単一の edge ルーター IP があります (これは「仮想 IP (VIP)」の場合もありますが、初期の負荷分散では単一マシンになります)。
このプロセスには以下を実行することが関係します。
16.3.2. 管理者の前提条件
この手順を開始する前に、管理者は以下の条件を満たしていることを確認する必要があります。
- 要求がクラスターに到達するように外部ポートをクラスターネットワーク環境にセットアップします。たとえば名前については、クラスター内の特定ノードまたは他の IP アドレスを参照するように DNS で設定できます。「DNS ワイルドカード」機能はクラスター内の IP アドレスに対して名前のサブセットを設定するために使用できます。これを使用するユーザーは、管理者に問い合わせることなくクラスター内でルートをセットアップできます。
- 各ノードのローカルのファイアウォールが、IP アドレスの到達要求を許可していることを確認します。
- OpenShift Container Platform クラスターが、「アイデンティティープロバイダーを使用」して適切なユーザーアクセスを許可できるように設定します。
クラスター管理者ロールを持つユーザーが 1 名以上いることを確認します。このロールをユーザーに追加するには、以下のコマンドを実行します。
oc adm policy add-cluster-role-to-user cluster-admin username
- OpenShift Container Platform クラスターを、1 つ以上のマスターと 1 つ以上のノード、およびクラスターへのネットワークアクセスのあるクラスター外のシステムと共に用意します。この手順では、外部システムがクラスターと同じサブセットにあることを前提とします。別のサブセットの外部システムに必要な追加のネットワーク設定については、このトピックでは扱いません。
16.3.2.1. パブリック IP 範囲の定義
サービスへのアクセスを許可するための最初の手順として、マスター設定ファイルで外部 IP アドレス範囲を定義します。
クラスター管理者ロールを持つユーザーとして OpenShift Container Platform にログインします。
$ oc login Authentication required (openshift) Username: admin Password: Login successful. You have access to the following projects and can switch between them with 'oc project <projectname>': * default Using project "default".
以下のように /etc/origin/master/master-config.yaml ファイルで
externalIPNetworkCIDRs
パラメーターを設定します。networkConfig: externalIPNetworkCIDRs: - <ip_address>/<cidr>
以下に例を示します。
networkConfig: externalIPNetworkCIDRs: - 192.168.120.0/24
変更を有効にするために OpenShift Container Platform マスターサービスを再起動します。
# master-restart api # master-restart controllers
IP アドレスプールはクラスター内の 1 つ以上のノードで終了している必要があります。
16.3.3. プロジェクトおよびサービスの作成
公開するプロジェクトおよびサービスが存在しない場合、最初にプロジェクトを作成し、次にサービスを作成します。
プロジェクトおよびサービスがすでに存在する場合は、サービスを公開し、ルートを作成する という次の手順に進みます。
- OpenShift Container Platform にログインします。
サービスの新規プロジェクトを作成します。
$ oc new-project <project_name>
以下に例を示します。
$ oc new-project external-ip
oc new-app
コマンドを使用してサービスを作成します。以下に例を示します。
$ oc new-app \ -e MYSQL_USER=admin \ -e MYSQL_PASSWORD=redhat \ -e MYSQL_DATABASE=mysqldb \ registry.access.redhat.com/openshift3/mysql-55-rhel7
以下のコマンドを実行して新規サービスが作成されていることを確認します。
oc get svc NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE mysql-55-rhel7 172.30.131.89 <none> 3306/TCP 13m
デフォルトで、新規サービスには外部 IP アドレスがありません。
16.3.4. サービスを公開し、ルートを作成する
oc expose
コマンドを使用して、「サービスをルートとして公開する」必要があります。
サービスを公開するには、以下を実行します。
- OpenShift Container Platform にログインします。
公開するサービスが置かれているプロジェクトにログインします。
$ oc project project1
以下のコマンドを実行してルートを公開します。
oc expose service <service-name>
以下に例を示します。
oc expose service mysql-55-rhel7 route "mysql-55-rhel7" exposed
マスターで cURL などのツールを使用し、サービスのクラスター IP アドレスを使用してサービスに到達できることを確認します。
curl <pod-ip>:<port>
以下に例を示します。
curl 172.30.131.89:3306
このセクションの例では、クライアントアプリケーションを必要とする MySQL サービスを使用しています。
Got packets out of order
のメッセージと共に文字ストリングを取得する場合は、このサービスに接続されていることになります。MySQL クライアントがある場合は、標準 CLI コマンドでログインします。
$ mysql -h 172.30.131.89 -u admin -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. MySQL [(none)]>
次に以下のタスクを実行します。
16.3.5. ロードバランサーサービスの作成
ロードバランサーサービスを作成するには、以下を実行します。
- OpenShift Container Platform にログインします。
公開するサービスが置かれているプロジェクトを読み込みます。プロジェクトまたはサービスが存在しない場合は、「プロジェクトおよびサービスの作成」を参照してください。
$ oc project project1
マスターノードでテキストファイルを開き、以下のテキストを貼り付け、必要に応じてファイルを編集します。
- ファイルを保存し、終了します。
以下のコマンドを実行してサービスを作成します。
oc create -f <file-name>
以下に例を示します。
oc create -f mysql-lb.yaml
以下のコマンドを実行して新規サービスを表示します。
oc get svc NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE egress-2 172.30.236.167 172.29.121.74,172.29.121.74 3306/TCP 6s
サービスには自動的に割り当てられた外部 IP アドレスがあることに注意してください。
マスターで cURL などのツールを使用し、パブリック IP アドレスを使用してサービスに到達できることを確認します。
$ curl <public-ip>:<port>
++ 例:
$ curl 172.29.121.74:3306
このセクションの例では、クライアントアプリケーションを必要とする MySQL サービスを使用しています。
Got packets out of order
のメッセージと共に文字ストリングを取得する場合は、このサービスに接続していることになります。MySQL クライアントがある場合は、標準 CLI コマンドでログインします。
$ mysql -h 172.30.131.89 -u admin -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. MySQL [(none)]>
16.3.6. ネットワークの設定
以下の手順は、他のノードから公開されたサービスにアクセスするために必要なネットワークを設定するための一般的なガイドラインです。ネットワーク環境は異なるため、お使いに環境に必要な特定の設定についてはネットワーク管理者にお問い合わせください。
以下の手順は、すべてのシステムが同じサブネットにあることを前提としています。
ノード上:
ネットワークを稼働させるためにネットワークを再起動します。
$ service network restart Restarting network (via systemctl): [ OK ]
ネットワークが稼働していない場合、以下のコマンドを実行すると Network is unreachable などのエラーメッセージが表示されます。
マスター上の公開されたサービスの IP アドレスとマスターホストの IP アドレス間のルートを追加します。ネットワークルートのネットマスクを使用する場合には、使用するネットマスクおよび
netmask
オプションを使用します。$ route add -net 172.29.121.74 netmask 255.255.0.0 gw 10.16.41.22 dev eth0
cURL などのツールを使用して、パブリック IP アドレスを使用してサービスに到達できることを確認します。
$ curl <public-ip>:<port>
以下に例を示します。
curl 172.29.121.74:3306
Got packets out of order
のメッセージと共に文字ストリングを取得する場合は、サービスがノードからアクセス可能であることになります。
クラスター内にないシステム上:
ネットワークを稼働させるためにネットワークを再起動します。
$ service network restart Restarting network (via systemctl): [ OK ]
ネットワークが稼働していない場合、以下のコマンドを実行すると Network is unreachable などのエラーメッセージが表示されます。
マスター上の公開されたサービスの IP アドレスとマスターホストの IP アドレス間のルートを追加します。ネットワークルートのネットマスクを使用する場合には、使用するネットマスクおよび
netmask
オプションを使用します。$ route add -net 172.29.121.74 netmask 255.255.0.0 gw 10.16.41.22 dev eth0
パブリック IP アドレスを使用してサービスに到達できることを確認します。
$ curl <public-ip>:<port>
以下に例を示します。
curl 172.29.121.74:3306
Got packets out of order
のメッセージと共に文字ストリングを取得する場合、サービスがクラスター外からアクセス可能であることになります。
16.3.7. VIP を使用した IP フェイルオーバーの設定
オプションとして、管理者は IP フェイルオーバーを設定できます。
IP フェイルオーバーは、ノードセットの仮想 IP (VIP) アドレスのプールを管理します。セットのすべての VIP はセットから選択されるノードによって提供されます。VIP は単一ノードが利用可能である限り提供されます。ノード上で VIP を明示的に配布する方法がないため、VIP のないノードがある可能性も、多数の VIP を持つノードがある可能性もあります。ノードが 1 つのみ存在する場合は、すべての VIP がそのノードに配置されます。
VIP はクラスター外からルーティングできる必要があります。
IP フェイルオーバーを設定するには、以下を実行します。
マスターで
ipfailover
サービスアカウントに十分なセキュリティー権限があることを確認します。oc adm policy add-scc-to-user privileged -z ipfailover
以下のコマンドを実行して IP フェイルオーバーを作成します。
oc adm ipfailover --virtual-ips=<exposed-ip-address> --watch-port=<exposed-port> --replicas=<number-of-pods> --create
以下に例を示します。
oc adm ipfailover --virtual-ips="172.30.233.169" --watch-port=32315 --replicas=4 --create --> Creating IP failover ipfailover ... serviceaccount "ipfailover" created deploymentconfig "ipfailover" created --> Success
16.4. サービスの外部 IP を使用したトラフィックのクラスターへの送信
16.4.1. 概要
サービスを公開する 1 つの方法として、外部 IP アドレスをクラスター外からアクセス可能にするサービスに直接割り当てることができます。
「パブリック IP アドレス範囲の定義」で説明されているように、使用する IP アドレスの範囲を作成していることを確認します。
サービスに外部 IP を設定することにより、OpenShift Container Platform は、その IP アドレスをターゲットとするクラスターノードに到達するトラフィックが内部 Pod のいずれかに送信されることを許可する IP テーブルルールをセットアップします。これは内部サービス IP アドレスと似ていますが、外部 IP は OpenShift Container Platform に対し、このサービスが所定の IP で外部に公開される必要があることを示します。管理者は、この IP アドレスをクラスター内のノードのいずれかのホスト (ノード) インターフェースに割り当てる必要があります。または、このアドレスは 仮想 IP (VIP) として使用することができます。
OpenShift Container Platform ではこれらの IP を管理しないため、管理者はトラフィックがこの IP を持つノードに到達することを確認する必要があります。
以下は非 HA ソリューションであり、IP フェイルオーバーを設定しません。IP フェイルオーバーはサービスの高可用性を確保するために必要です。
このプロセスには以下を実行することが関係します。
16.4.2. 管理者の前提条件
この手順を開始する前に、管理者は以下の条件を満たしていることを確認する必要があります。
- 要求がクラスターに到達するように外部ポートをクラスターネットワーク環境にセットアップします。たとえば名前については、クラスター内の特定ノードまたは他の IP アドレスを参照するように DNS で設定できます。「DNS ワイルドカード」機能はクラスター内の IP アドレスに対して名前のサブセットを設定するために使用できます。これを使用するユーザーは、管理者に問い合わせることなくクラスター内でルートをセットアップできます。
- 各ノードのローカルのファイアウォールが、IP アドレスの到達要求を許可していることを確認します。
- OpenShift Container Platform クラスターが、「アイデンティティープロバイダーを使用」して適切なユーザーアクセスを許可できるように設定します。
クラスター管理者ロールを持つユーザーが 1 名以上いることを確認します。このロールをユーザーに追加するには、以下のコマンドを実行します。
oc adm policy add-cluster-role-to-user cluster-admin username
- OpenShift Container Platform クラスターを、1 つ以上のマスターと 1 つ以上のノード、およびクラスターへのネットワークアクセスのあるクラスター外のシステムと共に用意します。この手順では、外部システムがクラスターと同じサブセットにあることを前提とします。別のサブセットの外部システムに必要な追加のネットワーク設定については、このトピックでは扱いません。
16.4.2.1. パブリック IP 範囲の定義
サービスへのアクセスを許可するための最初の手順として、マスター設定ファイルで外部 IP アドレス範囲を定義します。
クラスター管理者ロールを持つユーザーとして OpenShift Container Platform にログインします。
$ oc login Authentication required (openshift) Username: admin Password: Login successful. You have access to the following projects and can switch between them with 'oc project <projectname>': * default Using project "default".
以下のように /etc/origin/master/master-config.yaml ファイルで
externalIPNetworkCIDRs
パラメーターを設定します。networkConfig: externalIPNetworkCIDRs: - <ip_address>/<cidr>
以下に例を示します。
networkConfig: externalIPNetworkCIDRs: - 192.168.120.0/24
変更を有効にするために OpenShift Container Platform マスターサービスを再起動します。
# master-restart api # master-restart controllers
IP アドレスプールはクラスター内の 1 つ以上のノードで終了している必要があります。
16.4.3. プロジェクトおよびサービスの作成
公開するプロジェクトおよびサービスが存在しない場合、最初にプロジェクトを作成し、次にサービスを作成します。
プロジェクトおよびサービスがすでに存在する場合は、サービスを公開し、ルートを作成する という次の手順に進みます。
- OpenShift Container Platform にログインします。
サービスの新規プロジェクトを作成します。
$ oc new-project <project_name>
以下に例を示します。
$ oc new-project external-ip
oc new-app
コマンドを使用してサービスを作成します。以下に例を示します。
$ oc new-app \ -e MYSQL_USER=admin \ -e MYSQL_PASSWORD=redhat \ -e MYSQL_DATABASE=mysqldb \ registry.access.redhat.com/openshift3/mysql-55-rhel7
以下のコマンドを実行して新規サービスが作成されていることを確認します。
oc get svc NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE mysql-55-rhel7 172.30.131.89 <none> 3306/TCP 13m
デフォルトで、新規サービスには外部 IP アドレスがありません。
16.4.4. サービスを公開し、ルートを作成する
oc expose
コマンドを使用して、「サービスをルートとして公開する」必要があります。
サービスを公開するには、以下を実行します。
- OpenShift Container Platform にログインします。
公開するサービスが置かれているプロジェクトにログインします。
$ oc project project1
以下のコマンドを実行してルートを公開します。
oc expose service <service-name>
以下に例を示します。
oc expose service mysql-55-rhel7 route "mysql-55-rhel7" exposed
マスターで cURL などのツールを使用し、サービスのクラスター IP アドレスを使用してサービスに到達できることを確認します。
curl <pod-ip>:<port>
以下に例を示します。
curl 172.30.131.89:3306
このセクションの例では、クライアントアプリケーションを必要とする MySQL サービスを使用しています。
Got packets out of order
のメッセージと共に文字ストリングを取得する場合は、このサービスに接続されていることになります。MySQL クライアントがある場合は、標準 CLI コマンドでログインします。
$ mysql -h 172.30.131.89 -u admin -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. MySQL [(none)]>
次に以下のタスクを実行します。
16.4.5. IP アドレスのサービスへの割り当て
外部 IP アドレスをサービスに割り当てるには、以下を実行します。
- OpenShift Container Platform にログインします。
- 公開するサービスが置かれているプロジェクトを読み込みます。プロジェクトまたはサービスが存在しない場合は、前提条件にある「プロジェクトおよびサービスの作成」を参照してください。
以下のコマンドを実行して、アクセスするサービスに外部 IP アドレスを割り当てます。外部 IP アドレス範囲の IP アドレスを使用します。
oc patch svc <name> -p '{"spec":{"externalIPs":["<ip_address>"]}}'
<name>
はサービスの名前であり、-p
はサービス JSON ファイルに適用されるパッチを示しています。括弧内の式は特定の IP アドレスを指定されたサービスに割り当てます。以下に例を示します。
oc patch svc mysql-55-rhel7 -p '{"spec":{"externalIPs":["192.174.120.10"]}}' "mysql-55-rhel7" patched
以下のコマンドを実行してサービスにパブリック IP があることを確認します。
oc get svc NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE mysql-55-rhel7 172.30.131.89 192.174.120.10 3306/TCP 13m
マスターで cURL などのツールを使用し、パブリック IP アドレスを使用してサービスに到達できることを確認します。
$ curl <public-ip>:<port>
以下に例を示します。
curl 192.168.120.10:3306
Got packets out of order
のメッセージと共に文字ストリングを取得する場合、サービスに接続していることになります。MySQL クライアントがある場合は、標準 CLI コマンドでログインします。
$ mysql -h 192.168.120.10 -u admin -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. MySQL [(none)]>
16.4.6. ネットワークの設定
外部 IP アドレスが割り当てられた後は、その IP へのルートを作成する必要があります。
以下の手順は、他のノードから公開されたサービスにアクセスするために必要なネットワークを設定するための一般的なガイドラインです。ネットワーク環境は異なるため、お使いに環境に必要な特定の設定についてはネットワーク管理者にお問い合わせください。
以下の手順は、すべてのシステムが同じサブネットにあることを前提としています。
マスター上:
ネットワークを稼働させるためにネットワークを再起動します。
$ service network restart Restarting network (via systemctl): [ OK ]
ネットワークが稼働していない場合、以下のコマンドを実行すると Network is unreachable などのエラーメッセージが表示されます。
公開するサービスの外部 IP アドレスおよび
ifconfig
コマンド出力からのホスト IP に関連付けられたデバイス名を使って以下のコマンドを実行します。$ ip address add <external-ip> dev <device>
以下に例を示します。
$ ip address add 192.168.120.10 dev eth0
必要な場合は、以下のコマンドを実行してマスターが置かれているホストサーバーの IP アドレスを取得します。
$ ifconfig
UP,BROADCAST,RUNNING,MULTICAST
のように一覧表示されているデバイスを検索します。eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.16.41.22 netmask 255.255.248.0 broadcast 10.16.47.255 ...
マスターが存在するホストの IP アドレスと、マスターホストのゲートウェイ IP アドレスの間のルートを追加します。ネットワークルートのネットマスクを使用する場合には、使用するネットマスクおよび
netmask
オプションを使用します。$ route add -host <host_ip_address> netmask <netmask> gw <gateway_ip_address> dev <device>
以下に例を示します。
$ route add -host 10.16.41.22 netmask 255.255.248.0 gw 10.16.41.254 dev eth0
netstat -nr
コマンドはゲートウェイ IP アドレスを提供します。$ netstat -nr Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 10.16.41.254 0.0.0.0 UG 0 0 0 eth0
公開されるサービスの IP アドレスとマスターホストの IP アドレス間のルートを追加します。
$ route add -net 192.174.120.0/24 gw 10.16.41.22 eth0
ノード上:
ネットワークを稼働させるためにネットワークを再起動します。
$ service network restart Restarting network (via systemctl): [ OK ]
ネットワークが稼働していない場合、以下のコマンドを実行すると Network is unreachable などのエラーメッセージが表示されます。
ノードが配置されているホストの IP アドレスと、ノードホストのゲートウェイ IP との間のルートを追加します。ネットワークルートのネットマスクを使用する場合には、使用するネットマスクおよび
netmask
オプションを使用します。$ route add -net 10.16.40.0 netmask 255.255.248.0 gw 10.16.47.254 eth0
ifconfig
コマンドはホスト IP を表示します。ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.16.41.71 netmask 255.255.248.0 broadcast 10.19.41.255
netstat -nr
コマンドはゲートウェイ IP を表示します。netstat -nr Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 10.16.41.254 0.0.0.0 UG 0 0 0 eth0
公開されるサービスの IP アドレスとマスターノードが置かれているホストサーバーの IP アドレス間のルートを追加します。
$ route add -net 192.174.120.0 netmask 255.255.255.0 gw 10.16.41.22 dev eth0
cURL などのツールを使用して、パブリック IP アドレスを使用してサービスに到達できることを確認します。
$ curl <public-ip>:<port>
以下に例を示します。
curl 192.168.120.10:3306
Got packets out of order
のメッセージと共に文字ストリングを取得する場合は、サービスがノードからアクセス可能であることになります。
クラスター内にないシステム上:
ネットワークを稼働させるためにネットワークを再起動します。
$ service network restart Restarting network (via systemctl): [ OK ]
ネットワークが稼働していない場合、以下のコマンドを実行すると Network is unreachable などのエラーメッセージが表示されます。
リモートホストの IP アドレスと、リモートホストのゲートウェイ IP の間のルートを追加します。ネットワークルートのネットマスクを使用する場合には、使用するネットマスクおよび
netmask
オプションを使用します。$ route add -net 10.16.64.0 netmask 255.255.248.0 gw 10.16.71.254 eno1
マスター上の公開されたサービスの IP アドレスとマスターホストの IP アドレス間のルートを追加します。
$ route add -net 192.174.120.0 netmask 255.255.248.0 gw 10.16.41.22
cURL などのツールを使用して、パブリック IP アドレスを使用してサービスに到達できることを確認します。
$ curl <public-ip>:<port>
以下に例を示します。
curl 192.168.120.10:3306
Got packets out of order
のメッセージと共に文字ストリングを取得する場合、サービスがクラスター外からアクセス可能であることになります。
16.4.7. VIP を使用した IP フェイルオーバーの設定
オプションとして、管理者は IP フェイルオーバーを設定できます。
IP フェイルオーバーは、ノードセットの仮想 IP (VIP) アドレスのプールを管理します。セットのすべての VIP はセットから選択されるノードによって提供されます。VIP は単一ノードが利用可能である限り提供されます。ノード上で VIP を明示的に配布する方法がないため、VIP のないノードがある可能性も、多数の VIP を持つノードがある可能性もあります。ノードが 1 つのみ存在する場合は、すべての VIP がそのノードに配置されます。
VIP はクラスター外からルーティングできる必要があります。
IP フェイルオーバーを設定するには、以下を実行します。
マスターで
ipfailover
サービスアカウントに十分なセキュリティー権限があることを確認します。oc adm policy add-scc-to-user privileged -z ipfailover
以下のコマンドを実行して IP フェイルオーバーを作成します。
oc adm ipfailover --virtual-ips=<exposed-ip-address> --watch-port=<exposed-port> --replicas=<number-of-pods> --create
以下に例を示します。
oc adm ipfailover --virtual-ips="172.30.233.169" --watch-port=32315 --replicas=4 --create --> Creating IP failover ipfailover ... serviceaccount "ipfailover" created deploymentconfig "ipfailover" created --> Success
16.5. NodePort を使用したトラフィックのクラスターへの送信
16.5.1. 概要
NodePort を使用してクラスター内のすべてのノードでサービス nodePort を公開します。
NodePort を使用するには追加のポートリソースが必要です。
ノードポートはノード IP アドレスの静的ポートでサービスを公開します。
NodePort はデフォルトで 30000-32767 の範囲に置かれます。つまり、NodePort はサービスの意図されるポートに一致しないことが予想されます (たとえば 8080 は 31020 として公開される可能性があります)。
管理者は外部 IP がノードにルーティングされており、すべてのノードのローカルのファイアウォールルールによって開いたポートへのアクセスが許可されることを確認する必要があります。
NodePort および外部 IP は独立しており、両方を同時に使用できます。
16.5.2. 管理者の前提条件
この手順を開始する前に、管理者は以下の条件を満たしていることを確認する必要があります。
- 要求がクラスターに到達するように外部ポートをクラスターネットワーク環境にセットアップします。たとえば名前については、クラスター内の特定ノードまたは他の IP アドレスを参照するように DNS で設定できます。「DNS ワイルドカード」機能はクラスター内の IP アドレスに対して名前のサブセットを設定するために使用できます。これを使用するユーザーは、管理者に問い合わせることなくクラスター内でルートをセットアップできます。
- 各ノードのローカルのファイアウォールが、IP アドレスの到達要求を許可していることを確認します。
- OpenShift Container Platform クラスターが、「アイデンティティープロバイダーを使用」して適切なユーザーアクセスを許可できるように設定します。
クラスター管理者ロールを持つユーザーが 1 名以上いることを確認します。このロールをユーザーに追加するには、以下のコマンドを実行します。
oc adm policy add-cluster-role-to-user cluster-admin username
- OpenShift Container Platform クラスターを、1 つ以上のマスターと 1 つ以上のノード、およびクラスターへのネットワークアクセスのあるクラスター外のシステムと共に用意します。この手順では、外部システムがクラスターと同じサブセットにあることを前提とします。別のサブセットの外部システムに必要な追加のネットワーク設定については、このトピックでは扱いません。
16.5.3. サービスの設定
サービスの作成または変更時に nodePort のポート番号を指定します。ポートを手動で指定しない場合は、システムが代わりにこれを割り当てます。
- マスターノードにログインします。
使用予定のプロジェクトが存在しない場合には、サービス用に新規プロジェクトを作成します。
$ oc new-project <project_name>
以下に例を示します。
$ oc new-project external-ip
サービス定義を編集して
spec.type:NodePort
を指定し、オプションで 30000-32767 範囲のポートを指定します。apiVersion: v1 kind: Service metadata: name: mysql labels: name: mysql spec: type: NodePort ports: - port: 3036 nodePort: 30036 name: http selector: name: mysql
以下のコマンドを実行してサービスを作成します。
$ oc new-app <file-name>
以下に例を示します。
oc new-app mysql.yaml
以下のコマンドを実行して新規サービスが作成されていることを確認します。
oc get svc NAME CLUSTER_IP EXTERNAL_IP PORT(S) AGE mysql 172.30.89.219 <nodes> 3036:30036/TCP 2m
外部 IP が
<nodes>
として一覧表示され、ノードのポートが一覧表示されることに注意してください。
<NodeIP>:<NodePort>
アドレスを使用してサービスにアクセスできるはずです。