OpenShiftでHTTPアプリを公開する方法
0.はじめに
OpenShift Container Platform(以下、OCP)入門者向けに、OpenShiftでHTTPアプリを公開する方法を解説します。
OpenShiftでのアプリケーション公開方法を理解し、適切な手法を選択できるようになります。
では、次の章から具体的な解説を進めます!
1. アプリケーションの外部公開とは?
OpenShiftでは、アプリケーションを外部に公開する方法として以下の2つがあります。
-
HTTPアプリケーションの公開
- Route を使用し、クラスター外部からHTTP/HTTPS経由でアクセス可能にする。
-
非HTTPアプリケーションの公開
- NodePort を使用し、特定のノードのポートを開放する。
- ロードバランサーサービス を使用し、外部ロードバランサーを介してアクセスを提供する。
2. HTTPアプリケーションの公開(Routeを利用)
Route は、OpenShift独自のリソースで、アプリケーションを外部のユーザーがHTTP/HTTPSでアクセスできるようにする仕組みです。
2.1 デモの手順
① デモ用のプロジェクト作成
oc new-project httpdemo
②アプリケーションのデプロイ
oc new-app --name=my-http-app --image=bitnami/nginx
このコマンドは以下のリソースを自動作成します。
- Deployment
- Service
- Pod
③ Podの起動確認
oc get pods -w
実行結果の例
NAME READY STATUS RESTARTS AGE
my-http-app-5d8c7c9d9c-nb6zq 1/1 Running 0 30s
④ Routeの作成
oc expose service my-http-app --hostname=my-app.httpdemo.apps-crc.testing
このコマンドにより、以下のリソースが作成されます。
- Route(外部向けのエンドポイント)
⑤ 作成したRouteの情報を確認
oc get route
実行結果の例
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
my-http-app my-app.httpdemo.apps-crc.testing my-http-app 8080
⑥Routeの詳細情報を確認
oc describe route my-http-app
実行結果の例
Name: my-http-app
Namespace: httpdemo
Created: 2m ago
Labels: app=my-http-app
Requested Host: my-app.httpdemo.apps-crc.testing
Service: my-http-app
Target Port: 8080
TLS Termination: edge
この情報をもとに、ブラウザやcurlでアクセス可能
curl http://my-app.httpdemo.apps-crc.testing
3. 非HTTPアプリケーションの公開
非HTTPアプリケーション(TCP/UDPベース)は、RoutesではなくServiceのNodePortまたはLoadBalancerを使用して外部に公開します。
3.1 NodePortを利用する
- OpenShiftのServiceでNodePortを使用すると、クラスターの特定ノードのポートを開放してアクセス可能になります。
①Serviceの作成(NodePortタイプ)
oc expose deployment my-http-app --port=8080 --type=NodePort
②Serviceの情報確認
oc get svc
実行結果の例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-http-app NodePort 172.30.250.100 <none> 8080:30080/TCP 3m
クラスター外部からアクセス可能なポートは 30080
curl http://<NODE_IP>:30080
(※ <NODE_IP>
にはクラスターのノードIPを指定)
3.2 ロードバランサーサービスを利用する
- ロードバランサーサービスは、クラウド環境(AWS, GCP, Azure)で外部のロードバランサーを作成し、アプリケーションに接続します。
①Serviceの作成(LoadBalancerタイプ)
oc expose deployment my-http-app --port=8080 --type=LoadBalancer
②Serviceの情報確認
oc get svc
実行結果の例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-http-app LoadBalancer 172.30.250.100 192.168.1.100 8080:32000/TCP 3m
EXTERNAL-IP
に表示されたIPアドレスでアクセス可能
curl http://192.168.1.100:8080
(※ クラウドプロバイダーがロードバランサーを自動作成する)
4. HTTP vs 非HTTPの外部公開方法の比較
公開方法 | 用途 | 適用サービスタイプ | アクセスURLの例 |
---|---|---|---|
Route | HTTP/HTTPSの外部公開 | Route | http://my-app.example.com |
NodePort | ローカル環境でのTCP/UDP公開 | NodePort | http://<NodeIP>:30080 |
LoadBalancer | クラウド環境でのTCP/UDP公開 | LoadBalancer | http://192.168.1.100:8080 |
一般的な選択
- HTTPアプリケーション → Route
- 非HTTPアプリケーション(ローカル開発環境) → NodePort
- 非HTTPアプリケーション(クラウド環境) → LoadBalancer
5. おわりに
今回はOpenShiftでHTTPアプリを公開する方法について理解を深めるために、以下を学びました。
- Route は HTTP/HTTPSアプリケーションを公開するための最適な方法。
- NodePort は ローカル開発や簡易的な外部アクセス向け。
- LoadBalancer は クラウド環境で外部からのアクセスを最適化。
OpenShiftのアプリケーション公開方法を理解し、適切な手法を選択しましょう!
1回で覚えるのは難しいと思うので、何度かトライして覚えるで全然大丈夫です。
今後もOpenShiftについて解説していきます。
おわりっ!
Discussion