Johnman.md

プログラミングのことや個人的なことを書きます。たぶん。

Learn Kubernetes Basics 終えた【Expose Your App Publicly】

Kubernetesチュートリアル Learn Kubernetes Basics を一通りやったので、軽くメモした内容を書いておきます。

前回の記事はこれ。

johnmanjiro13.hatenablog.com

Expose Your App Publicly

ここでは次のことを学ぶ。

  • Kubernetes の Service について
  • Label と LabelSelecter オブジェクトがどのように関連しているか
  • Service を使ってアプリケーションを Kubernetes Cluster の外に公開する方法

Overview of Kubernetes Services

同じ Kubernetes Cluster の中でも Pods はそれぞれ一意の IP アドレスをもっていて、それらの IP アドレスは公開されていない。なので外部からアクセスすることができないが、Service が外から見えるように公開してくれる。

Kubernetesの Service は、Pod の論理セットとそれらにアクセスするためのポリシーを定義するもの。Service によって依存ポッド間の疎結合が可能になる。サービスは、すべての Kubernetes オブジェクトと同様に、YAML または JSON を使用して定義される。Service がターゲットとする Pod のセットは通常 LabelSelector によって決定される。

ServiceSpec で type を指定することによって、いろいろな方法で公開できる。

  • ClusterIP(default) : クラスタ内の IP アドレスで公開する(外部からは見えない)。サービスは Cluster 内からのみ到達可能。
  • NodePort : NAT を使用して、Cluster 内の選択された Node の同じポートにサービスを公開する。<NodeIP> : <NodePort> を使用して Cluster の外部からサービスにアクセスできるようにする。
  • LoadBalancer : (サポートされている場合)現在のクラウドに外部ロードバランサを作成し、固定の外部 IP をサービスに割り当てる。
  • ExternalName : 名前を持つ CNAME レコードを返すことで、任意の名前(Spec の externalName で指定する)を使用してサービスを公開する。プロキシは使用されない。この Type には v1.7 以上の kube-dn が必要。

Services and Labels

Service は、Label と LabelSelectorを使用して、Pod を特定できる。 Label はオブジェクトに付けられたキーと値のペアであり、さまざまな方法で使用できる。

  • 開発、テスト、および制作用のオブジェクトを指定する
  • バージョンタグを埋め込む
  • タグを使用してオブジェクトを分類する