【Kubernetes】podに外部からアクセスするにはService を使う no.3


こんにちは。まゆみです。

Kubernetesについての記事をシリーズで書いています

前回の記事で、Kubernetesを使ってdeploymentオブジェクトを作る方法を書きました。

それによって、podが作られpodのなかにあるContainerも実行されるのですが、 今の段階では外部からPodにアクセスする事ができません。

なぜならば、podにディフォルトで付与されるIPアドレスはinternal IP アドレスになるからです。

では、Clusterの外部から、どのようにしてPodのなかのアプリケーションにアクセスしたら良いのでしょうか?

今回の記事ではその解決方法を書いていこうと思います

(ClusterにPodを作っているという前提でこの記事を書いています。前回の記事でPodを作ってダッシュボードでClusterの状態を確かめるところまでしたので、今回はその続きになります)

ではさっそくはじめていきますね。

kubectl exposeを使う


引用元:Kubernetesドキュメント

ディフォルトのままでは、deploymentオブジェクトは外部からアクセスできないので

kubectl expose deployment <deployment名> --port=<ポート番号> --type=<タイプ>

とコマンドを打ち Serviceオブジェクトを作ります。

『expose(公開する/露出する)』という言葉の意味通り、exposeを使えば、オブジェクトを外部からアクセスできるようにします

--portオプションには、コンテナ化したアプリに開けられたポート番号を書きます。

--type=に書く<タイプ>には、次のものがあります

--type=ClusterIP (ディフォルトのタイプであり、クラスターの内部からしかアクセスできない)
--type=NodePort
--type=LoadBalancer

今回は、上記の3つのタイプのうちClusterIPでは外部からアクセスできません。

トラフィックが増えPodが増えた時のことを考えて今回はLoadBalancerをタイプとして書こうと思います。

これでService オブジェクトができました。

Service オブジェクトを見てみましょう

kubectl get services

kubectl get services のコマンドで2つのオブジェクトが表示されていますが、下のkubernetesと書かれているものが、ディフォルトで自動的に作られるものになります。そしてTYPEも『ClusterIP』になっています

あなたが先ほどのプロセスで作ったserviceオブジェクト(ここでは、『first-app』という名前で表示されている)に、EXTERNAL-IPの欄がありますが、常にという状態になっていて、external-IP アドレスが使えません。

ですが、次のコマンドで、今作ったservice オブジェクトの詳細を見ることができ、その中に 外部からアクセスできるIPアドレスの情報が載っています

minikube service <serviceオブジェクト名>

無事にアクセスできました

まとめ

今回の記事はここで締めくくらせていただきますね。

次回の記事では、Clusterがクラッシュした時にKubernetesがどのように対応してくれるのか書いていこうと思います

よろしくお願いします \(^o^)/