この記事は セゾンテクノロジー Advent Calendar 2024の22日の記事です。
シリーズ2は HULFT10 のエンジニアによる投稿をお届けします。
はじめに
Openshift上にあるリソースに、Openshift外のネットワークからのTCP通信をルーティングしたい!
ということが最近あったのですが、ネット上に情報が少なくて困りました。。
そんなわけで続く誰かのために書きます!
概要
Nginx Ingress Operator(Nginx Ingress Controller)を使用して、OpenShift上にあるリソースにOpenShift外のネットワークからのTCP通信をルーティングしてみます!
今回は以下の構成でやってみます:
必要に応じてMySQLを別のシステムに置き換えてください。
さっそく作っていきます!
Nginx Ingress Operatorを導入する
OperatorHubから「Nginx Ingress Operator」と検索してデフォルト設定でインストールします。
SecurityContextConstraints (SCC) の作成
これを作成しておかないと、後述のNginx Ingress Controllerの作成が失敗します。
以下のコマンドを実行すると必要なSCCが作成されます。
kubectl apply -f https://raw.githubusercontent.com/nginxinc/nginx-ingress-helm-operator/main/resources/scc.yaml
Nginx Ingress Controllerを作成する
Nginx Ingress Controllerは実際にTCP通信をルーティングしてくれるものです。NginxIngressの作成から進みます。
GlobalConfiguration設定
YAML内でglobalConfiguration
と検索すると、GlobalConfigurationの設定箇所があるので以下のように設定してください。
これによりリスナーを作成することができます。
GlobalConfigurationの詳しい設定値は以下を参照してください。
https://docs.nginx.com/nginx-ingress-controller/configuration/global-configuration/globalconfiguration-resource/
Service CustomPort設定
YAML内でcustomPorts
と検索すると、CustomPortsの設定箇所があるので以下のように設定してください。
これによりNginx Ingress ControllerにMySQL用のServiceが追加されます。
GlobalConfigurationとService CustomPortの設定をした上で作成ボタンを押すとNginx Ingress Controllerが作成されます。
metadataがデフォルト設定だとnginx-ingressというPJ上に作成されます。
TransportServerを作成する
CustomResourceDefinitionsでTransportServer
と検索して進みます。
インスタンスからTransportServerの作成へと進みます。
YAMLを以下のように設定してください。
namespaceはMySQLがあるところを指定してください。別のnamespaceを設定するとルーティングが失敗します。
これにより先ほど作成したリスナーに来た通信をMySQLにルーティングすることができます。
TransportServerの詳しい設定値は以下を参照してください。
https://docs.nginx.com/nginx-ingress-controller/configuration/transportserver-resource/
接続先Serviceの取得
以下のコマンドを実行すると、先ほど作成したNginx Ingress ControllerのExternal IPを取得できます。
oc get -n nginx-ingress svc
External IP例:aaaaaaaaaaaa000000a0a00000000aaa-00000000000.ap-northeast-1.elb.amazonaws.com
MySQLへの接続
EC2上から先のコマンドで取得したExternal IPに対してMySQLコマンドを実行します。
mysql -u root -p -h aaaaaaaaaaaa000000a0a00000000aaa-00000000000.ap-northeast-1.elb.amazonaws.com
-P 3306
ログインできました!
これでOpenShift上にあるリソースに対して、OpenShift外のネットワークからのTCP通信をルーティングできたことになります。
おわりに
誰かが役立ててくれれば幸いです!