Opensourcetechブログ

OpensourcetechによるNGINX/Zabbix/Neo4j/Linuxなどオープンソース技術に関するブログです。

kubernetesのNodePortでサービスへアクセスする

 

こんにちは、LinuCエバンジェリストこと、鯨井貴博@opensourcetechです。

f:id:opensourcetech:20190915165341p:plain

 

 

 今回は、kubernetesのPod(nginx*4台)へ外部からアクセスする方法です。

なお、アクセス方法としてはNodePortを使用しています。

 

 

 

Pod(nginx)の用意

 バックエンドのWebサーバとなるnginxですが、以下のYAMLファイルをApplyしました。

https://github.com/kujiraitakahiro/kubernetes/blob/master/test1.yaml

Natadecoco:~ tapioka$ vi test1.yaml
Natadecoco:~ tapioka$ kubectl apply -f test1.yaml
deployment.apps/nginx-deployment configured
Natadecoco:~ tapioka$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-68789fb7cc-4ld6w 1/1 Running 0 21m
nginx-deployment-68789fb7cc-5nkwc 1/1 Running 0 5h20m
nginx-deployment-68789fb7cc-m4dxc 1/1 Running 0 5h20m
nginx-deployment-68789fb7cc-snsp7 1/1 Running 0 8s

 

なお、各nginxにはアクセスした際に区別がつくように、背景色を変更したコンテンツを置いています。

※以下のindex.html 10行目の「background-color: green;」をred/blueに変更。

https://github.com/kujiraitakahiro/kubernetes/blob/master/index.html

Natadecoco:~ tapioka$ kubectl cp ./index.html nginx-deployment-68789fb7cc-4ld6w:/usr/share/nginx/html/index.html
Natadecoco:~ tapioka$ kubectl cp ./index.html nginx-deployment-68789fb7cc-5nkwc:/usr/share/nginx/html/index.html
Natadecoco:~ tapioka$ kubectl cp ./index.html nginx-deployment-68789fb7cc-m4dxc:/usr/share/nginx/html/index.html

 

 

サービス(NodePort)のアプライ

続いて、サービス(NodePort)をアプライします。

アプライするのは、以下のYAMLファイルです。

https://github.com/kujiraitakahiro/kubernetes/blob/master/test1-nodeport.yaml

Natadecoco:~ tapioka$ kubectl apply -f test1-nodeport.yaml
service/test-nodeport created
Natadecoco:~ tapioka$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 10d
test-nodeport NodePort 10.106.177.216 <none> 8080:30080/TCP 6s
Natadecoco:~ tapioka$ kubectl describe svc test-nodeport
Name: test-nodeport
Namespace: default
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"test-nodeport","namespace":"default"},"spec":{"ports":[{"name":"h...
Selector: app=nginx
Type: NodePort
IP: 10.106.177.216
LoadBalancer Ingress: localhost
Port: http-port 8080/TCP・・・・サービスのポート
TargetPort: 80/TCP・・・・Podの待ち受けポート
NodePort: http-port 30080/TCP・・・・kubernetes稼働ホストの対応ポート
Endpoints: 10.1.0.104:80,10.1.0.105:80,10.1.0.106:80 + 1 more...
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>

 

上記により、以下のように通信が行われPodのnginxへアクセスできます。

-------

kubernetes稼働ホストの30080/TCP

 ↓

サービスのポート 8080/TCP

 ↓

Pod(nginx)のポート 80/TCP

 

 

Pod(nginx)へのアクセス

Webブラウザより「http://localhost:30080」へアクセスすると、コンテンツが表示されるかと思います。

 

また、F5などをクリックして新規セッションとしてアクセスさせることで、

以下の動画のように4台のnginxに負荷分散されていることが確認出来ます。

www.youtube.com

 

 

 

 

kubernetes Podのダウン時の挙動

 今回デプロイしたPod(nginx)では、常に4台が稼働するようにYAMLを書いていますので、以下のように1つのPodを削除した場合、自動的に1台が再作成されます。

Natadecoco:~ tapioka$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-68789fb7cc-4ld6w 1/1 Running 3 2d2h
nginx-deployment-68789fb7cc-5nkwc 1/1 Running 3 2d7h
nginx-deployment-68789fb7cc-m4dxc 1/1 Running 3 2d7h
nginx-deployment-68789fb7cc-snsp7 1/1 Running 3 2d2h <--削除対象

Natadecoco:~ tapioka$ kubectl delete pods nginx-deployment-68789fb7cc-snsp7
pod "nginx-deployment-68789fb7cc-snsp7" deleted

Natadecoco:~ tapioka$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-68789fb7cc-4ld6w 1/1 Running 3 2d2h
nginx-deployment-68789fb7cc-5nkwc 1/1 Running 3 2d7h
nginx-deployment-68789fb7cc-bgr6w 1/1 Running 0 14s <--再作成された!
nginx-deployment-68789fb7cc-m4dxc 1/1 Running 3 2d7h

 

 

おわりに

 今回はNodePortを使ってサービス(Pod)へアクセスしましたが、

他にもCluster-IPやExternal-IPを使ったアクセスも可能とのことですので、

またの機会に挑戦してみようと思います。

 

 

 

アフィリエイトのアクセストレード

 

 

 

 

 

 

www.slideshare.net

github.com

www.facebook.com

twitter.com

www.instagram.com

 

 

にほんブログ村 IT技術ブログ Linuxへ
Linux

にほんブログ村 IT技術ブログ オープンソースへ
オープンソース

 

 

 

 

Opensourcetech by Takahiro Kujirai