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)を以下の内容で作成する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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: 80 |
2) 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)を以下の内容で作成する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | 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を利用する。