nginxは、近年人気のあるオープンソースのWebサーバで、nginxを搭載したDockerイメージも用意されている。
今回は、nginxを搭載したDockerイメージを利用して、PodやServiceを作成し、ローカル端末からnginxを搭載したPodにアクセスしてみたので、その手順を共有する。
なお、nginxについては、以下のサイトを参照のこと。
https://cn.teldevice.co.jp/column/38275/
前提条件
以下の手順に従って、「Docker Desktop」インストール済のWindows端末でKubernetesを有効化済であること。
また、nginxを搭載したDockerイメージは、以下の場所に格納されている「1.27.0」タグを利用すること。
https://hub.docker.com/_/nginx

やってみたこと
nginxを搭載したPodの作成
nginxを搭載したPodを作成し、Podの動作確認を行う。その手順は、以下の通り。
1) マニフェストファイル(nginx-test-pod.yml)を以下の内容で作成する。
apiVersion: v1
kind: Pod
metadata:
# Pod名
name: nginx-pod
spec:
# Podに含まれるコンテナ
containers:
# Dockerコンテナ名
- name: nginx-test
# 利用するDockerイメージ名
image: nginx:1.27.0
# PodのIPからExposeするポート番号
ports:
- containerPort: 802) 1)のファイルを配置し、「kubectl apply -f (マニフェストファイル名)」コマンドを実行し、Podを作成する。


3)「kubectl get pod」コマンドを実行すると、作成したPodの状態を確認できる。なお、「kubectl get pod -o wide」コマンドを実行すると、以下のように、PodのIPアドレスが確認できる。

4)「kubectl exec -it (Pod名) — /bin/bash」コマンドを実行すると、指定したPod内に入ることができる。

5)「curl http://localhost(またはPodのIPアドレス):80」コマンドを実行すると、以下のように、nginxのWelcome画面が表示される。


6) exitコマンドを実行すると、以下のように、2)で起動したPodから出ることができる。

7)「kubectl delete -f (マニフェストファイル名)」コマンドを実行すると、以下のように、指定したマニフェストファイルで起動したPodを削除することができる。

なお、「kubectl get all」コマンドを実行すると、Type=ClusterIPであるServiceが残ったままであることが確認できる。

Serviceを利用したPodへのアクセス
ローカル端末からnginxを搭載したPodにアクセスするには、KubernetesのServiceを利用する。その手順は、以下の通り。
1) マニフェストファイル(nginx-test.yml)を以下の内容で作成する。
apiVersion: v1
kind: Pod
metadata:
# Pod名
name: nginx-pod
# ラベル(Serviceのspec.selectorと紐付けるために利用)
labels:
app: web-nginx
env: test
spec:
# Podに含まれるコンテナ
containers:
# Dockerコンテナ名
- name: nginx-test
# 利用するDockerイメージ名
image: nginx:1.27.0
# PodのIPからExposeするポート番号
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
# Service名
name: nginx-service
spec:
# Service種類
type: NodePort
# 転送先となるPod
selector:
app: web-nginx
env: test
# ポート転送設定
ports:
- port: 80
targetPort: 80
protocol: TCP
# ノード受付ポート(30000番以上を指定)
nodePort: 30080なお、NodePort等のServiceの種類については、以下のサイトを参照のこと。
https://www.ios-net.co.jp/blog/20230621-1179/
2) 1)のファイルを配置し、「kubectl apply -f (マニフェストファイル名)」コマンドを実行し、PodとServiceを作成する。


3)「kubectl get all」コマンドを実行すると、作成したPod,Serviceの状態を確認できる。

4)「kubectl get pod -o wide」「kubectl get service -o wide」コマンドを実行すると、作成したPod,ServiceのIPアドレス等を確認できる。

5)「kubectl describe services (サービス名)」コマンドを実行すると、作成したServiceの詳細情報が確認できる。

6) ローカルで「curl http://localhost:(ノード受付ポート)」を実行すると、以下のように、ローカル端末からnginxを搭載したPodにアクセスできることが確認できる。

同様に、ブラウザで「http://localhost:(ノード受付ポート)」にアクセスすると、nginxのWelcome画面が表示されることが確認できる。

7)「kubectl delete -f (マニフェストファイル名)」コマンドを実行すると、以下のように、指定したマニフェストファイルで起動したPod,Serviceを削除することができる。

要点まとめ
- nginxは、近年人気のあるオープンソースのWebサーバで、nginxを搭載したDockerイメージも用意されている。
- ローカル端末からnginxを搭載したPodにアクセスするには、KubernetesのServiceを利用する。



