28.8. NodePort を使用した Ingress クラスタートラフィックの設定
OpenShift Container Platform は、クラスター内で実行されるサービスを使用してクラスター外からの通信を可能にする方法を提供します。この方法は NodePort
を使用します。
28.8.1. NodePort を使用したトラフィックのクラスターへの送信 リンクのコピーリンクがクリップボードにコピーされました!
NodePort
-type Service
リソースを使用して、クラスター内のすべてのノードの特定のポートでサービスを公開します。ポートは Service
リソースの .spec.ports[*].nodePort
フィールドで指定されます。
ノードポートを使用するには、追加のポートリソースが必要です。
NodePort
は、ノードの IP アドレスの静的ポートでサービスを公開します。NodePort
はデフォルトで 30000
から 32767
の範囲に置かれます。つまり、NodePort
はサービスの意図されるポートに一致しないことが予想されます。たとえば、ポート 8080
はノードのポート 31020
として公開できます。
管理者は、外部 IP アドレスがノードにルーティングされることを確認する必要があります。
NodePort
および外部 IP は独立しており、両方を同時に使用できます。
このセクションの手順では、クラスターの管理者が事前に行っておく必要のある前提条件があります。
28.8.2. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
以下の手順を開始する前に、管理者は以下の条件を満たしていることを確認する必要があります。
- 要求がクラスターに到達できるように、クラスターネットワーク環境に対して外部ポートをセットアップします。
クラスター管理者ロールを持つユーザーが 1 名以上いることを確認します。このロールをユーザーに追加するには、以下のコマンドを実行します。
oc adm policy add-cluster-role-to-user cluster-admin <user_name>
$ oc adm policy add-cluster-role-to-user cluster-admin <user_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - OpenShift Container Platform クラスターを、1 つ以上のマスターと 1 つ以上のノード、およびクラスターへのネットワークアクセスのあるクラスター外のシステムと共に用意します。この手順では、外部システムがクラスターと同じサブセットにあることを前提とします。別のサブセットの外部システムに必要な追加のネットワーク設定は、このトピックでは扱いません。
28.8.3. プロジェクトおよびサービスの作成 リンクのコピーリンクがクリップボードにコピーされました!
公開するプロジェクトとサービスが存在しない場合は、プロジェクトを作成してからサービスを作成します。
プロジェクトとサービスがすでに存在する場合は、サービスを公開してルートを作成する手順に進みます。
前提条件
-
OpenShift CLI (
oc
) をインストールし、クラスター管理者としてログインしている。
手順
oc new-project
コマンドを実行して、サービス用の新しいプロジェクトを作成します。oc new-project <project_name>
$ oc new-project <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc new-app
コマンドを使用してサービスを作成します。oc new-app nodejs:12~https://github.com/sclorg/nodejs-ex.git
$ oc new-app nodejs:12~https://github.com/sclorg/nodejs-ex.git
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サービスが作成されたことを確認するには、以下のコマンドを実行します。
oc get svc -n <project_name>
$ oc get svc -n <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nodejs-ex ClusterIP 172.30.197.157 <none> 8080/TCP 70s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nodejs-ex ClusterIP 172.30.197.157 <none> 8080/TCP 70s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記デフォルトで、新規サービスには外部 IP アドレスがありません。
28.8.4. ルートの作成によるサービスの公開 リンクのコピーリンクがクリップボードにコピーされました!
oc expose
コマンドを使用して、サービスをルートとして公開することができます。
前提条件
- OpenShift Container Platform にログインしている。
手順
公開するサービスが置かれているプロジェクトにログインします。
oc project <project_name>
$ oc project <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションのノードポートを公開するには、次のコマンドを入力して、サービスのカスタムリソース定義 (CRD) を変更します。
oc edit svc <service_name>
$ oc edit svc <service_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: サービスが公開されるノードポートで利用可能なことを確認するには、以下のコマンドを入力します。
oc get svc -n myproject
$ oc get svc -n myproject
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nodejs-ex ClusterIP 172.30.217.127 <none> 3306/TCP 9m44s nodejs-ex-ingress NodePort 172.30.107.72 <none> 3306:31345/TCP 39s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nodejs-ex ClusterIP 172.30.217.127 <none> 3306/TCP 9m44s nodejs-ex-ingress NodePort 172.30.107.72 <none> 3306:31345/TCP 39s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
oc new-app
コマンドによって自動的に作成されたサービスを削除するには、以下のコマンドを入力します。oc delete svc nodejs-ex
$ oc delete svc nodejs-ex
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
サービスノードポートが
30000 ~ 32767
の範囲のポートで更新されていることを確認するには、次のコマンドを入力します。oc get svc
$ oc get svc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の出力例では、更新されたポートは
30327
です。出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE httpd NodePort 172.xx.xx.xx <none> 8443:30327/TCP 109s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE httpd NodePort 172.xx.xx.xx <none> 8443:30327/TCP 109s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow