8.6.4 Serviceの作成
コンテナ内のOpenTP1と通信する場合は,Pod間のRPC通信であってもServiceを作成する必要があります。RPC送信元は,Serviceが受付可能なIPアドレス,ポート番号を設定してコネクションを確立します。
ほかのOpenTP1からのコネクション接続を受け付けるポート番号に応じて,Serviceを作成してください。
Serviceの作成方法の詳細は,取扱説明書を参照してください。
- 〈この項の構成〉
(1) 必要なポート数の計算
TP1/Server Baseが使用するポートには,サービス応答で使用するエフェメラルポート(短命ポート)と,スケジューラサービスなどのシステムプロセスが使用するユーザ指定ポートがあります。
サービス応答で使用するエフェメラルポートについては,次に示す計算式で求める必要があります。
(a) ネームサービスおよびスケジューラダイレクトを使用したRPC
コンテナ内のTP1/Server Baseがサービス応答を受信するためのポート番号には,エフェメラルポートを使用します。
次の計算式で,コンテナ内のTP1/Server Baseに必要なポート数を算出してください。
なお,非応答型のRPCを発行する場合は,エフェメラルポート数の算出とServiceの作成は不要です。
必要なポート数(サービス応答受信用のポート数) =(プロセスサービス定義のprc_process_countオペランドに設定した値 + 128)×1.5※
- 注※
-
安全係数。1.5〜2.0を推奨します。システムに応じて調整してください。
SUPや,非常駐プロセスなど,サービス応答受信用ポート数は,高負荷などの条件によって必要なポート数が計算式よりも多くなる場合があります。Service作成後,十分なテストを実施してください。
TP1/Server Baseが使用するサービス応答受信用ポート数が,Serviceから公開するポート数を上回った場合,該当するサービス応答でクライアント,サーバ双方にエラーとなることがあります。
(2) RPCで使用するポートのマッピング
Serviceを作成し,OpenTP1が使用するエフェメラルポートやユーザ指定ポートとServiceから公開するポートをマッピングしてください。
(a) ネームサービスおよびスケジューラダイレクトを使用したRPC(コンテナ内のTP1/Server BaseからTP1/Server BaseへのRPC)
「8.6.4(1) 必要なポート数の計算」で求めた必要なポート数分のポート名をServiceマニフェストに作成し,Serviceの受信ポート番号とコンテナから公開するTP1/Server Baseのポート番号をマッピングしてください。ポート番号を設定するServiceマニフェストのフィールドについては,「8.5 システム構成と環境設定」中のServiceの説明を参照してください。
システム共通定義にrpc_port_baseオペランドを設定している場合,Serviceの受信ポート番号の設定値は,rpc_port_baseオペランド設定値を基準に,必要な数のポート番号をマッピングしてください。
(b) スケジューラダイレクトを使用したRPC(コンテナ内のTP1/Server BaseへのRPC)
スケジュールサービス定義のscd_portオペランド,scdmulti定義コマンドの-pオプションに設定したポート数分のServiceを作成してください。
(c) リモートAPI機能を使用したRPC(コンテナ内のTP1/Server BaseへのRPC)
rapリスナーサービス定義のrap_listen_portオペランドに設定するポート数分のServiceを作成してください。
(d) TP1/Client/JのRPC応答
コンテナ内のTP1/Client/Jがサービス応答を受信する場合,TP1/Client/J環境定義のdccltcuprcvportオペランドに設定したポート数分のServiceを作成してください。
- (例)rpc_port_baseオペランドの設定値が30000,必要なポート数が200個の場合
-
- <service-sample1.yaml>
apiVersion: v1 kind: Service metadata: name: service-sample1 :<略> spec: ports: - name: "tp1-port001"・・ポート名 protocol: TCP" port: 30000 nodePort: 30000 targetPort: 30000 - name: "tp1-port002"・・ポート名 protocol: TCP" port: 30001 nodePort: 30001 targetPort: 30001 : :<中略> - name: "tp1-port099"・・ポート名 protocol: TCP" port: 30098 nodePort: 30098 targetPort: 30098 - name: "tp1-port100"・・ポート名 protocol: TCP" port: 30099 nodePort: 30099 targetPort: 30099 - name: "tp1-port101"・・ポート名 protocol: TCP" port: 30100 nodePort: 30100 targetPort: 30100 - name: "tp1-port102"・・ポート名 protocol: TCP" port: 30101 nodePort: 30101 targetPort: 30101 - name: "tp1-port103"・・ポート名 protocol: TCP" port: 30102 nodePort: 30102 targetPort: 30102 : :<中略> - name: "tp1-port199"・・ポート名 protocol: TCP" port: 30198 nodePort: 30198 targetPort: 30198 - name: "tp1-port200"・・ポート名 protocol: TCP" port: 30199 nodePort: 30199 targetPort: 30199
注
-
spec.ports.nodePort,spec.ports.port:Serviceの受信ポート番号
-
spec.ports.targetPort:OpenTP1が使用するエフェメラルポートやユーザ指定ポート
-
- 注意事項
-
Kubernetesクラスタ内でTP1/Server Baseが起動するPodを複数起動する場合は,PodごとにServiceの作成が必要になります。Serviceマニフェストに設定するポート番号が,ほかのPodで作成するServiceマニフェストのポート番号と重複する場合は,Serviceの作成に失敗するため,重複しないように調整してください。
- (例)dccltcuprcvportオペランドの設定値が30000の場合
-
- <service-sample3.yaml>
apiVersion: v1 kind: Service metadata: name: service-sample3 :<略> spec: ports: - name: "tp1clt-port"・・ポート名 protocol: TCP" port: 30000 nodePort: 30000 targetPort: 30000
注
-
spec.ports.nodePort,spec.ports.port:Serviceの受信ポート番号
-
spec.ports.targetPort:TP1/Client/J環境定義のdccltcuprcvportオペランドに設定したポート番号
-