Ingressについて

kubernetes

Ingressの図解

Podをクラスター内外に公開するL7ロードバランサー。

クラスター外部からURLのサブドメイン(ホスト)やパスによるServiceへの振り分けが出来ます。
つまり、LBService:NodePort = 1:1なのに対してIngress:NodePort=1:manyになります。

図で示した通り、一つのIngressに一つのロードバランサーが作成され、それがServiceを束ねて、レイヤー7のPathやホスト(サブドメイン)などで通信の向き先を指定することで、柔軟なロードバランシングが可能になります。

minikube上でIngressを試す場合以下のセッティング

$ minikube addons list // minikubeのaddonリストを確認
$ minikube addons enable ingress // ingressをenableする
$ kubectl get pods -n kube-system // ingress controllerをチェック

Ingressの構成Yamlファイル

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
 name: video-chat-app
 annotations:
   nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
 rules:
 - http:
     paths:
     - path: /hello
       backend:
         serviceName: helloworld-nodeport
         servicePort: 8080
     - path: /hello2
       backend:
         serviceName: helloworld-nodeport2
         servicePort: 8080

Ingressは上記yamlのようにpathsのpathでhttpPathを指定し、その向き先のserviceNameとservicePortを指定することで、上記の例ではPathで、またはホストによるルーティングの分岐が可能です。

例えばのユースケースとしては、ECサイトがあったとして、ドメインは管理画面もショップ画面も同じにしたい場合など、pathやサブドメインによって通信の飛ぶService及びその先のコンテナを振り分けたりといった用途に使えたりします。

まとめ

このようにIngressを使うことで、一つのロードバランサーで複数のserviceリソースを束ねる事ができます。

AWSなどのロードバランサーは起動数が多いとなかなかなのお値段になるので、不必要に複数起動したくありません。

そのような理想を叶えてくれる夢のリソースがIngressです。

規模が大きいサービスになると「istio service mesh」とかの有償版のものなども存在して、これを使うとPod同士の通信までHTTPS化できるなどかなりセキュアな運用をハンドシェイクなどの負荷も少なく実現させることができます。

中規模程度のサービスであれば、Ingressを使いこなせれば良いと思います。

タイトルとURLをコピーしました