14.5. NodePort を使用した ingress クラスタートラフィックの設定
OpenShift Container Platform は、クラスター内で実行されるサービスを使ってクラスター外からの通信を可能にする方法を提供します。この方法は NodePort
を使用します。
14.5.1. NodePort を使用したトラフィックのクラスターへの送信
NodePort
-type Service
リソースを使用して、クラスター内のすべてのノードの特定のポートでサービスを公開します。ポートは Service
リソースの .spec.ports[*].nodePort
フィールドで指定されます。
NodePort
を使用するには、追加のポートリソースが必要です。
NodePort
は、ノードの IP アドレスの静的ポートでサービスを公開します。NodePort
はデフォルトで 30000
から 32767
の範囲に置かれます。つまり、 NodePort
はサービスの意図されるポートに一致しないことが予想されます。たとえば、ポート 8080
はノードのポート 31020
として公開できます。
管理者は、外部 IP アドレスがノードにルーティングされることを確認する必要があります。
NodePort
および外部 IP は独立しており、両方を同時に使用できます。
このセクションの手順では、クラスターの管理者が事前に行っておく必要のある前提条件があります。
14.5.2. 前提条件
以下の手順を開始する前に、管理者は以下の条件を満たしていることを確認する必要があります。
- 要求がクラスターに到達できるように、クラスターネットワーク環境に対して外部ポートをセットアップします。
クラスター管理者ロールを持つユーザーが 1 名以上いることを確認します。このロールをユーザーに追加するには、以下のコマンドを実行します。
$ oc adm policy add-cluster-role-to-user cluster-admin <user_name>
- OpenShift Container Platform クラスターを、1 つ以上のマスターと 1 つ以上のノード、およびクラスターへのネットワークアクセスのあるクラスター外のシステムと共に用意します。この手順では、外部システムがクラスターと同じサブセットにあることを前提とします。別のサブセットの外部システムに必要な追加のネットワーク設定については、このトピックでは扱いません。
14.5.3. プロジェクトおよびサービスの作成
公開するプロジェクトおよびサービスが存在しない場合、最初にプロジェクトを作成し、次にサービスを作成します。
プロジェクトおよびサービスがすでに存在する場合は、サービスを公開してルートを作成する手順に進みます。
前提条件
-
クラスター管理者として
oc
CLI をインストールし、ログインします。
手順
サービスの新規プロジェクトを作成します。
$ oc new-project <project_name>
以下は例になります。
$ oc new-project myproject
oc new-app
コマンドを使用してサービスを作成します。以下は例になります。$ oc new-app \ -e MYSQL_USER=admin \ -e MYSQL_PASSWORD=redhat \ -e MYSQL_DATABASE=mysqldb \ registry.redhat.io/rhscl/mysql-80-rhel7
以下のコマンドを実行して新規サービスが作成されていることを確認します。
$ oc get svc -n myproject
出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE mysql-80-rhel7 ClusterIP 172.30.63.31 <none> 3306/TCP 4m55s
デフォルトで、新規サービスには外部 IP アドレスがありません。
14.5.4. ルートの作成によるサービスの公開
oc expose
コマンドを使用して、サービスをルートとして公開することができます。
手順
サービスを公開するには、以下を実行します。
- OpenShift Container Platform にログインします。
公開するサービスが置かれているプロジェクトにログインします。
$ oc project project1
アプリケーションのノードポートを公開するには、以下のコマンドを入力します。OpenShift Container Platform は
30000-32767
範囲の利用可能なポートを自動的に選択します。$ oc expose dc mysql-80-rhel7 --type=NodePort --name=mysql-ingress
オプション: サービスが公開されるノードポートで利用可能なことを確認するには、以下のコマンドを入力します。
$ oc get svc -n myproject
出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE mysql-80-rhel7 ClusterIP 172.30.217.127 <none> 3306/TCP 9m44s mysql-ingress NodePort 172.30.107.72 <none> 3306:31345/TCP 39s
オプション:
oc new-app
コマンドによって自動的に作成されたサービスを削除するには、以下のコマンドを入力します。$ oc delete svc mysql-80-rhel7