プログラミング初心者がアーキテクトっぽく語る

見苦しい記事も多数あるとは思いますが訂正しつつブログと共に成長していければと思います

KubernetesのServiceの種類

KubernetesのServiceの種類については以前、名前だけ紹介した。

architecting.hateblo.jp

ここではそれぞれの概要について触れる。


ClusterIP

  • クラスタ内でPod同士が通信するためのService
  • 名前解決を利用できる
  • デフォルト

NodePort

  • 簡易的な外部との接続を提供
  • NodeのIPアドレスとNodeのポート番号(30000〜32768)をPodにマッピングする
  • マッピング対象となるPodが複数ある場合はそれらPodの間でRandomに負荷分散される
  • 複数のPodがNodeをまたがっていても同じNodePortが共有される
  • 商用サービスで利用されることはない
    • 1ポートに複数サービスをマッピングすることができない
    • ポート番号が特殊(30000〜32768)
    • Nodeのアドレスが変わるとDNSなどを変更する手間が発生する

LoadBalancer

  • 商用サービスに適した外部との接続を提供
  • NodePortの先にクラウドが提供するLoadBalanderを配置する
    • LoadBalancerはk8sから制御できる
    • LoadBalancerにはお金がかかる点に注意
  • NodePortのポート番号(30000〜32768)をLoadBalancerが一般的なポート番号(80番等)で外部に公開する
    • ブラウザで特殊なポート番号(30000〜32768)を入力する必要がなくなる
  • クラウドのLoadBalancerが提供する利便性の高い機能を利用できる
    • 複数のNodePortへの負荷分散
    • HTTPS終端
    • URL route

ExternalName

  • あまり使われない
  • DNSを利用して外部のサービスにエイリアスを作成できる
  • コード内ではエイリアスを使用する
  • 外部サービスのホスト名が変わった場合はコードを変更せず、ExternalNameを変更すればよい
    • それならconfigMapでいいのでは?