🙃

kubernetesのイングレスの仮想ホスト機能を使ってロードバランシングする!①

2021/03/22に公開

はじめに

くーばねてすを倒すために今回はkubernetesのイングレス機能を調べた(^^)/

概要

■イングレスとは
■イングレスを使用するには
■イングレスコントローラーをセットアップする

をまとめた(^^)/

■イングレスとは

https://kubernetes.io/ja/docs/concepts/services-networking/ingress/
kubernetesのイングレスとはクラスタ外のリクエストをクラスタ内部をつなぐためのAPIオブジェクトだ。
リバースプロキシとしての役割を持ち、サービスと連携してアプリを公開する。
イングレスはpodのアプリケーションを外部公開用のURLとマッピングしてインターネットへ公開したり、ユーザーから送信されたすべての HTTP やHTTPSリクエストを関連付けるプラットフォーム機能(セッションアフィニティ)やSSL/ TLS暗号化、名前ベースの仮想ホスティングなどの機能もある。

■公開用URLをアプリケーションと関連付ける
■複数のドメイン名を持たせることができる
■リクエストを複数のpodに負荷分散させる
■SSL/ TLS暗号化通信ができる
イングレスは、ロードバランサーやプロキシーサーバーを設定するために必要な全ての機能を持っているのでそれらの代替として利用することができる。
HTTP(S)トラフィックに対してのルールのみサポートしている。

■イングレスを使用するには

https://kubernetes.io/ja/docs/concepts/services-networking/ingress-controllers/
イングレスコントローラーは普通のコントローラーと異なり、マスター上で実行されるものではなく、セットアップする必要がある。コントローラーの実装は複数あり、配布されているコントローラーによって仕様が異なる。
(配布されているコントローラーによって外部公開用のIPアドレスを取得する機能がないなど)

イングレスを使用するには、kubernetesクラスタにイングレスコントローラーがセットアップされていないと使用できない。
パブリッククラウドではkubernetesクラスタを作成した時点でデフォルトのイングレスコントローラーも自動でセットアップされるので、イングレスマニフェストの作成だけでイングレスを使用することができるが、ローカル環境で使用したい場合は自分でコントローラーをセットアップする必要がある。

イングレスコントローラーは、好きな数だけクラスターにデプロイすることができる。イングレスマニフェストを作成する際には、クラスター内に複数のイングレスコントローラーが存在するので、どのコントローラーを使用するかを示すためマニフェストに使用するコントローラーを指定する必要がある。

■イングレスコントローラーをセットアップする

今回はこれまで勉強で使っていたMinikubeを利用してイングレスをセットアップする。
Minikube上でNGINX Ingressコントローラーをセットアップする。
↓ここを参考にした。
https://kubernetes.io/ja/docs/tasks/access-application-cluster/ingress-minikube/

Minikubeをローカル環境にインストール後、Minikubeをスタートする。

$ minikube start
略
* Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

NGINX Ingressコントローラーを有効にする。

$ minikube addons enable ingress
略
* The 'ingress' addon is enabled

NGINX Ingressコントローラーが起動したことを確認

$ kubectl get pods -n kube-system
NAME                                        READY   STATUS      RESTARTS   AGE
coredns-74ff55c5b-t28m2                     1/1     Running     3          4d23h
etcd-minikube                               1/1     Running     3          4d23h
ingress-nginx-admission-create-5wkh4        0/1     Completed   0          6m34s
ingress-nginx-admission-patch-jr7bn         0/1     Completed   0          6m34s
ingress-nginx-controller-65cf89dc4f-wh9tv   1/1     Running     0          6m34s
kube-apiserver-minikube                     1/1     Running     3          4d23h
kube-controller-manager-minikube            1/1     Running     3          4d23h
kube-proxy-9psfk                            1/1     Running     3          4d23h
kube-scheduler-minikube                     1/1     Running     3          4d23h
storage-provisioner                         1/1     Running     6          4d23h

Minikube アドオン(機能拡張用のソフトウェア)リストで一覧表示でアドオンされたか確認する

$ minikube.exe addons list
|-----------------------------|----------|--------------|
|         ADDON NAME          | PROFILE  |    STATUS    |
|-----------------------------|----------|--------------|
| ambassador                  | minikube | disabled     |
| auto-pause                  | minikube | disabled     |
| csi-hostpath-driver         | minikube | disabled     |
| dashboard                   | minikube | disabled     |
| default-storageclass        | minikube | enabled ✅   |
| efk                         | minikube | disabled     |
| freshpod                    | minikube | disabled     |
| gcp-auth                    | minikube | disabled     |
| gvisor                      | minikube | disabled     |
| helm-tiller                 | minikube | disabled     |
| ingress                     | minikube | enabled ✅   |
| ingress-dns                 | minikube | disabled     |
| istio                       | minikube | disabled     |
| istio-provisioner           | minikube | disabled     |
| kubevirt                    | minikube | disabled     |
| logviewer                   | minikube | disabled     |
| metallb                     | minikube | disabled     |
| metrics-server              | minikube | disabled     |
| nvidia-driver-installer     | minikube | disabled     |
| nvidia-gpu-device-plugin    | minikube | disabled     |
| olm                         | minikube | disabled     |
| pod-security-policy         | minikube | disabled     |
| registry                    | minikube | disabled     |
| registry-aliases            | minikube | disabled     |
| registry-creds              | minikube | disabled     |
| storage-provisioner         | minikube | enabled ✅   |
| storage-provisioner-gluster | minikube | disabled     |
| volumesnapshots             | minikube | disabled     |
|-----------------------------|----------|--------------|

まとめ

次はイングレスマニフェスト作る!(>_<)

Discussion