記事の内容
- Kubernetesでサービスを公開するための超初歩的で代表的なServiceについて整理。
ClusterIP/ExternalIP/NodePort/LoadBalancer Serviceに関する超概念図
ClusterIP Service
- K8sクラスタ内からのみ疎通性がありInternal Networkに作り出され、仮想IPが割り当てられる。
- ClusterIP宛の通信は、各Node上で実行しているkube-proxyがPod向けに転送を行う。
ExternalIP Service
- 特定のK8sNodeのIPアドレス:Portで受信したトラフィックをコンテナに転送する形で外部疎通性を確立
- 特別な事情がない限り、NodePortを使う。(NodePortは基本的に機能は同じで全K8sNode宛通信をコンテナに転送)
NodePort Service
- 全てのK8sNodeのIPアドレス:Portで受信したトラフィックをコンテナ(ClusterIP Service)に転送する形で、外部疎通性を確立。
- 指定可能なPortの範囲は、30000〜32767。全てのK8sNodeで利用可能なPortを指定する必要がある。
※NodePort ServiceもExternalIP Serviceも、いずれかのK8sNodeに割り当てられたIP宛に通信を行う。
つまりリクエストを飛ばしたNodeがダウンしていた場合、エラーが返る。(そのため障害耐性を高めるため、LoadBalancer Serviceを使う)
LoadBalancer Service
- K8sクラスタ外のロードバランサに外部疎通性のある仮想IPを払い出す。
- 実体は、各クラウドベンダのLBサービス等。(AWS ELB/GCP GCLB etc... )
理解が誤っていれば、正しい情報が記載されたリンクと共にご指摘いただけますと幸いです。