Kubernetes Ingressとその他もろもろ

Ingress

MLOpsを仕事で扱っていきたいので、その周辺の技術を学んでいくシリーズです。
今回は、KubernetesのIngressを取り上げたいと思います。

また下記の書籍を参考にしています。
Kubernetes完全ガイド (impress top gear)
もちろんチュートリアルも見ております。
Learn Kubernetes Basics

 

Discovery & LBリソース

まずは概要からおさえていきたいと思います。
Discovery & LBリソースは、コンテナを外部公開するようなエンドポイントを提供するリソースのことです。
ServiceリソースとIngressリソースの2種類があります。

【Serviceリソース】
 ・ClusterIP
 ・ExternalIP
 ・NodePort
 ・LoadBalancer
 ・Headless
 ・ExternalName
 ・None-Selector

【Ingressリソース】

 

ClusterIP

内部向けエンドポイントを作成したいときに使用されます。
実装の際は、type: ClusterIPと指定することで使用することができます。
ClusterIPを作成することで、Kubernetes内だけで使用できる仮想IPが割り当てられます。

 

Ingress

L7ロードバランシングを提供するリソースです。

用語の整理

【Ingress リソース】
 APIリソース

【Ingress Controller】
 IngressリソースがKubrenetesに登録された際に、何らかの処理を行うもの

Ingressの種類

①クラスタ外のロードバランサを利用したIngress
 ・GKE Ingress

  クライアント → L7ロードバランサ(NodePort経由) → 転送先のPod

②クラスタ内にIngress用のPodをデプロイするIngress
 ・Nginx Ingress
 ・Nghttpx Ingress

  クライアント → L4ロードバランサ → Nginx Pod → 転送先のPod

サンプル実装

 

Nginx Ingress

いくつか種類はありますが、ここではNginxを取り上げます。
実装は下記Githubに上がっています。
kubernetes/ingress-nginx

Ingress Nginxを利用するためには、下記2つが必要です。
①Nginx Ingress Controllerを作成する
 これがL7相当の処理を行うPodにもなっています。
②Nginx Ingress Controller宛のLoadBalancer Serviceを作成する
 これでクラス外からの疎通を確保します。

また起動させるのに必要なものは下記4つになっています。
・nginx-ingress-controller
 ・Deployment
 ・Service
・default-http-backend
 ・Deployment
 ・Service