Nginx Ingress Controller (nginxinc) の VirtualServerでhttpsするメモ
まえがき
- 今回の話は nginxinc/nginx-ingress の方
- Nginx Ingress Controllerには nginxinc/nginx-ingress 版 と k8s版があり、どちらも同じベースだが結構違う(のではっきりさせておかないと混乱する)
- helmを使ってインストールしている
- nginxinc/nginx-ingressのバージョンは 3.0.1。2.4でも同じだと思うが新し目の機能なようなので新しいバージョンを使った方がよい
- SSL証明書はcert-managerと連携してcert-managerに取得してもらう(なのでcert-managerは先に設定されている必要がある)
完成形
とやかく言う前に完成形はこちら。
1 | apiVersion: k8s.nginx.org/v1 |
ハマったポイント
enableCertmanager=falseのときのエラーメッセージ
1 | VirtualServer default/virtualservername was rejected with error: spec.tls.cert-manager: Forbidden: field requires cert-manager enablement |
nginx-ingressのdeploymentの起動オプションに --enable-certmanager=false が指定されている(デフォルト値)
解決方法
helmを使っている場合は以下のコマンドで変更可能。
手動でdeploymentを投入しているのであればそれを修正すればOK
1 | helm upgrade prod nginx-stable/nginx-ingress --set controller.enableCertManager=true |
蛇足
設定できる設定値
https://github.com/nginxinc/kubernetes-ingress/blob/main/deployments/helm-chart/values.yaml
ドキュメント
helmによるアップグレードの方法
知らなくてぐぐったのでメモ
1 | (以前にこれをやっていない場合に限る。ローカルのPCに対する設定なので何度やっても問題はない) |
VirtualServerにするとなにか良いことがあるの?
Ingressでも同じことは可能なはず。しかし、文法的に厳しい部分がある(annotationに無理やり指定するのでエラーがよくわからない感じになるなど)
が、VirtualServerならわざわざCRDを作っただけあって割と自然である。