KubernetesのServiceについて
こんにちわ
がじぇったー (@hackmylife7) | Twitter
です。
KubernetesのServiceについて学んでいきます。
TL;DR(要約)
Serviceとは何か?
ServiceはKubernetesクラスタ上で外部からリクエストを受け付けるために定義するルールであり、Podにアクセするためのポリシーそのものである。公式ドキュメントでは以下のように記載されている
Kubernetesでは、サービスとは、Podの論理セットとそれらにアクセスするためのポリシーを定義する抽象概念です(このパターンはマイクロサービスと呼ばれることもあります)
実態は各Node上で動いているkube-proxyがPodに向けて定められたルールにしたがってトラフィックを転送している。
そしてそのルールは下記4点である。
- ClusterIP
- NodePort
- LoadBalancer
- ExternalName
何故Serviceを使うのか?
Podは必ずしも永続性が高いものではない。
Podが死んだらクラスタ内で割り当てられるIPが変わってしまうため、もしPodのIPアドレスを直接叩いているような構成(そんなものはないと思いますが)だったらトラフィックが受けられなくなる。
そのため、Serviceによって、適切にロードバランシングを行う必要性がある。
Serviceの種類
ClusterIP
※公式ドキュメントより引用
apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: MyApp ports: - protocol: TCP port: 80 targetPort: 9376
マニフェストファイルの例
NodePort
- 外部からアクセスできるよう、Portをオープンしてくれる
- ClousterIPで解放しているIPアドレスとPortはあくまでもクラスタ内部で公開されるPort。NodePortで指定するPortは外部に公開されるPort
- defaultのPortは30000-32767の範囲から割り当てられるが、固定することもできる
※ Think IT様の記事より引用
KubernetesのDiscovery&LBリソース(その1) | Think IT(シンクイット)
マニフェストファイルの例
apiVersion: v1 kind: Service metadata: name: my-nginx labels: run: my-nginx spec: type: NodePort ports: - port: 8080 targetPort: 80 protocol: TCP name: http - port: 443 protocol: TCP name: https selector: run: my-nginx
LoadBalancer
クラスタ外からトラフィックを受ける場合に用いる。クラウド環境でK8sを運用する場合、AWSでいうALB,GCPでいうGLBCにその機能を頼ることになる。
一般的なロードバランサをイメージするとわかりやすい。
プロダクション環境で用いる場合は、クラスタ外にLBをたて、クラスタ内にはService:NordPortをつくりトラフィックを分散し、耐障害性を高める。
マニフェストファイルの例
apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: MyApp ports: - protocol: TCP port: 80 targetPort: 9376 clusterIP: 10.0.171.239 loadBalancerIP: 78.11.24.19 type: LoadBalancer status: loadBalancer: ingress: - ip: 146.148.47.155
汚くて申し訳ないが図にするとこんなイメージ。
LBで分散してクラスタ内でも分散するので耐障害性が高まっていることがわかる
どのServiceを使うか、という選択基準
サービスを外部に公開するかが選択基準になる。
外部に公開する場合はNode Portを用いる。
※ LoadBalancer(AWSやGCPのLBと一緒に使う)
公開しない場合は基本的にClusterIPを用いる
参考(Kubernetesの最強参考書)
Kubernetes完全ガイド (impress top gear)
- 作者: 青山真也
- 出版社/メーカー: インプレス
- 発売日: 2018/09/21
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
Kubernetesの他の記事へは下記の一覧から飛べるようにしているので参照ください。