KubernetesでNodePortを作成してTomcatに接続する方法【minikube検証+port-forward図解】
Kubernetesで外部からアプリに接続する場合、まず理解しておきたいのが Service(NodePort) と port-forward です。
この記事では、以下を実際に検証しながら解説します。
- NodePort Serviceの作成方法
- Tomcat Deploymentの作成方法
- NodePortでの疎通確認方法
- port-forwardでブラウザ表示する方法(図解あり)
記事の目次
今回の作成する構成図

NodePort Serviceを作成する
まずはTomcatに接続するための NodePort Service を作成します。
vi apache-nodeip.yamlapiVersion: v1
kind: Service
metadata:
name: apache-service
namespace: default
spec:
type: NodePort
selector:
app: tomcat
ports:
- port: 8080
targetPort: 8080
nodePort: 30080 # 30000〜32767 の範囲で指定可能作成します。
kubectl apply -f apache-nodeip.yaml作成確認
kubectl get svc
ここで NodePort 30080 が表示されていればOKです。
Tomcat Deploymentを作成する
次にTomcatを下記内容で作成しデプロイします。ファイル名は「tomcat.yaml」で作成します!
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat-deployment
spec:
replicas: 1
selector:
matchLabels:
app: tomcat
template:
metadata:
labels:
app: tomcat
spec:
containers:
- name: tomcat
image: tomcat:9.0
ports:
- containerPort: 8080作成
kubectl apply -f tomcat.yamlPodが8080で待ち受けしているか確認する
debug用のPodを作成してポート確認を行います。
kubectl debug node/minikube -it --image=alpine:latest -- sh
必要なパッケージをインストール
apk update && apk add iproute2
確認
netstat -nat | grep 8080
8080が表示されれば、Tomcatは正常に起動しています。
NodePortで疎通確認
minikubeにログインして確認します。
minikube ssh
curl http://localhost:30080
または
minikube service apache-service
Tomcatには接続できていますが、初期状態では表示されるページがありません。
テストページを配置する
Podにログインしてテストページを作成します。
kubectl get pod
kubectl exec -it tomcat-deployment-xxxx -- bashテストページ作成
mkdir -p /usr/local/tomcat/webapps/ROOT
echo "Hello Tomcat!" > /usr/local/tomcat/webapps/ROOT/index.htmlブラウザで再度アクセスすると表示されます。
port-forwardでブラウザ表示する方法
NodePortがうまく接続できない場合は、port-forward を使えば確実に表示できます。
実行
kubectl port-forward svc/apache-service 8080:8080※コマンド実行後、プロンプトは戻りませんが正常です。
webブラウザで「http://localhost:8080」と入力
NodePortで接続できない原因(minikubeの場合)
本来は以下で接続できるはずです。
http://<NodeIP>:30080ただしminikube環境では、NodeIPが外部から直接アクセスできない場合があります。
そのため
minikube service apache-serviceまたは
kubectl port-forwardを使う方法が最も確実です。
まとめ
この記事では以下を解説しました。
- NodePort Serviceの作成方法
- Tomcat Deploymentの作成方法
- NodePortでの疎通確認方法
- port-forwardでブラウザ表示する方法
- minikubeでNodePortが接続できない理由
- タグ:
- Kubenetes