techtsubame’s blog

備忘録であり、何が起きても責任は取りません

kubernetesのService概要

実施すること

  • Serviceの説明

実施しないこと

  • Serviceの以下は説明しない
    • external

参考

名前 概要 クラスター内アクセス クラスター外アクセス
ClusterIP クラスター内で通信用 O X
NodPort ノードのIPとポートを指定しアクセスするが、ノードのダウン等ではアクセス不可となる X O
LoadBalancer クラスター内外からアクセス O O

Service

Service

  • ClusterIP(クラスタ内からアクセス)
  • PodIPを抽象化しStaticIPを持ったProxyを配置
  • Podアクセスするときにロードバランスする
  • DNS(CoreDNS)にAレコードを登録する

 詳細

ClusterIP

NodePort

  • クラスターの外からアクセス可能
  • NodeのIPからクラスターIPを経由してpodにアクセス
  • NodeのIPとポートを知っている必要があり、ポートは30000以上
  • NodeのIPを知る必要がある

LoadBalancer

  • クラスター内外からアクセス
  • 一つのサービスごとにLBが生成される
  • L4のロードバランサーのためL7のHTTPパスでの振り分けが不可
    • 解決するにはIngressを使用する(別途記事にする)

Headless

  • DNSラウンドロビンの機能を提供した場合に使用
  • ClusterIPにNoneを指定したサービスをヘッドレスサービスと呼ぶ
    • kubectl expose deploy nginx --cluster-ip None
  • ロードバランサを作らない
  • DNSにはPodのアドレスが設定される

Headlessの使い道

  • Statefulsetを使うときに必要
    • Statefulset
      • podを複数生成
      • podそれぞれにパーシステントボリュームが作られる
      • どのpodにアクセスするかによってレスポンスが変わる

Podに設定されるresolv.conf

[tsubame@control-plane01 ~]$ kubectl -n default exec deployments/nginx -- cat /etc/resolv.conf
search default.svc.cluster.local svc.cluster.local cluster.local
nameserver 10.96.0.10
options ndots:5
[tsubame@control-plane01 ~]$

名前解決

  • 全てのサーチリストを試行して名前解決に成功
  • forward proxyとかだとすごくパフォーマスが低下する
  • そのため、podごとにresolv.confをカスタマイズすることがほぼ必須

resolv.confのカスタマイズ

  • pod.spec.dnsPolicyで設定可能