【kubernetes】nginx-ingress-controllerをロードバランサに採用する時に気を付けたいこと
kubernetesでL4ロードバランサを作成するときの選択肢として、nginx-ingress-controllerがある。 使う機会があったので簡単に設定方法を残しておく。
インストール
Installation Guide - NGINX Ingress Controller
基本的には公式サイトの手順に従って、kubectlコマンドを数回叩くだけ。
GKEの場合
今回はGKE上に構築したので、まずは
kubectl create clusterrolebinding cluster-admin-binding --clusterrole cluster-admin --user $(gcloud config get-value account)
そのあと
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml
で最後に
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/cloud-generic.yaml
で完了。超簡単!
GKE以外の場合
パッと見、Azureとはコマンド共通(clusterrole除く)ぽいけど、いつ変わるかわからんし、公式サイト見ながらするのが安全ではある。
Helm
Helmを使う方法も紹介されている。
が、今回試していないので割愛。
Helmで入れるとカスタマイズできるんかな?
設定の変更
中身としては、名前の通りnginxをロードバランサとして使ってる。
なのでwebサーバの設定をいじっている場合、ここのnginxの設定値も変更しないといけなかったりすることもある。
設定項目の名前が違う罠
例えばファイルアップロードサイズの制限。 nginxでは、こう。
client-max-body-size 5m;
でもnginx-ingress-controllerに設定するときは、こう。
metadata: annotations: nginx.ingress.kubernetes.io/proxy-body-size: 5m
client-max-body-sizeではなくproxy-body-size。
名前が違うので、少し面倒。
他にもいろいろ設定できる。
Annotations - NGINX Ingress Controller
カスタマイズ
上記のコマンドを見ると、githubにあるファイルをそのままapplyしてるだけのようなので、cloneするなりしてyamlを編集することで簡単にカスタマイズできる。
設定値の変更が必要な場合は、管理することも考えれば、yamlを直接編集してapplyするのが良いのではないか。