0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ingress-nginx4.12.1にhelmチャート更新して出たエラー備忘録

Posted at

3月末頃の脆弱性の対応ということでチャートのバージョンアップを行ったが思いのほか難航したのでその備忘録です。
https://www.wiz.io/blog/ingress-nginx-kubernetes-vulnerabilities
チャート直下のvalues.yamlの設定で脆弱性の入り口になるらしいadmissionWebhooksをenabled:falseにしてた(過去のhelmチャートアップデート時に設定が増えたときに使わない余計なリソースを食う可能性がある設定として無効化した)のでネットワーク越しに狙われる危険性は低い状態ではあったが、4.11.5もパッチ済バージョンでエラーでないのでそちらで対応してた。
しかしAKS1.31に対応するingress-nginxチャートバージョンが4.12.1以降でAKS1.30が7月でEOLなので対応を迫られたという経緯。

・チャートの管理方法について(前提)

helm pullで指定バージョンをダウンロードしてアプリのチャートのchartsディレクトリに入れてgitで管理、helm upgradeてアプリのチャートと一緒に入れてる(AzureDevOpsでパイプライン組んでプルリクでhelm diffプラグインで差分でてマージでupgradeでAKSにデプロイされる方式)
この記事で言う設定更新上書きはアプリ側のチャート直下のvalues.yamlでchartsのしたの依存チャートのvalues.yamlを上書きを指します。

・アノテーションのエラー

ingress-nginx4.12.1helmチャートアップデートしたら、
ingressControllerのログにエラーがでてサイトが見えなくなった。

E0328 08:19:59.091704       7 store.go:938] annotation group ServerSnippet contains risky annotation based on ingress configuration

原因は、以下issueにかかれているとおりアノテーションのスニペット設定のセキュリティレベルが引き下げられたためとあり、
https://github.com/kubernetes/ingress-nginx/issues/12648
https://github.com/kubernetes/ingress-nginx/issues/12656
以下の設定を行うことでエラーが回避できるところまでは動作確認できました。

ingress-nginx:
   controller:
     electionID: ingress-controller-leader
     ingressClassByName: true
     ingressClassResource:
@@ -44,6 +47,7 @@ ingress-nginx:
       #ingressClass: "nginx"
     config:
       server-tokens: "false"
+      annotations-risk-level: "Critical" 

・正規表現のエラー

unknown directiveというような以下のエラーが出ました。影響としては新規のPodがCrashloopBackoffになりデプロイに失敗してました。サイトは見えるので障害おきないがPodが更新されないという状態でした。
チャートのvalues.yamlではなく、ingressリソース側の設定の問題だとわかるまで設定差分を調べました。

-------------------------------------------------------------------------------
  Warning  RELOAD  2m35s  nginx-ingress-controller  Error reloading NGINX: 
-------------------------------------------------------------------------------
Error: exit status 1
2025/04/08 08:59:25 [emerg] 29#29: unknown directive "8})/" in /tmp/nginx/nginx-cfg773932017:7186
nginx: [emerg] unknown directive "8})/" in /tmp/nginx/nginx-cfg773932017:7186
nginx: configuration file /tmp/nginx/nginx-cfg773932017 test failed

pathまわりでエラーに合致する箇所が見つかり、正規表現の問題と思われました。
copilotに「ingress-nginxチャート4.12.1 正規表現 エラー」的な内容と現状の設定を食わせてissueが見つかり、正規表現の一部が4.12.1のチャートから使えなくなっているということがわかりました。
https://github.com/kubernetes/ingress-nginx/issues/13101

原因の正規表現の箇所(kind:ingressのとこ)↓

- path: /test.([0-9]{8})

対処↓ チャートを4.12.1にする際に以下のannotationを追加すると解決

nginx.ingress.kubernetes.io/use-regex: "true"

・rewriteのエラー

正規表現きいてるか確認しようとingressコントローラのPodにkubectl execでわたってnginx.confの位置を特定してkubectl cpでコピーしてきてgrepでチャートアプデ前後の差分比較したところなんかrewrite設定がだめそう+ingressコントローラPodのログをよく見たらrewriteの警告でていた。

$ kubectl logs test-ingress-nginx-internal-controller-8c4488c87-xxxxx|grep -i rewrite
W0605 04:07:59.624584       6 validators.go:243] validation error on ingress default/ingress-internal: annotation rewrite-target contains invalid value /xxxx/daily/xxx?baseDay=$1
W0605 04:07:59.624901       6 main.go:148] rewrite-targetis invalid, defaulting to empty

issueとデフォルト値比較で以下を入れればいいようだという話に。
https://github.com/kubernetes/ingress-nginx/issues/11003
https://github.com/kubernetes/ingress-nginx/issues/13092

controller:
  enableAnnotationValidations: false

↑この値は ingress-nginx4.11.3,4.11.5までは初期値がfalseだけど4.12.1からtrueになってたので戻したところ、kind:ingressのほうの以下のアノテーションの設定の?かなにかがバリデーションに引っかかって無効化されてたnginx.confの影響がなくなってrewriteの設定が有効になっていた。後方互換性を崩される対処方法についてドキュメントにも注意書きはあった。
https://kubernetes.github.io/ingress-nginx/examples/rewrite/

  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /xxxx/daily/xxx?baseDay=$1

ingressリダイレクト参考
https://qiita.com/piggydev/items/2a24b382f9e082074921

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?