半農半エンジニアの記録

関西在住エンジニア。個人で勉強・開発したこと、その他趣味のことを書いてます。農業してます。

【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するのが良いのではないか。