feat: ingress.tls[].secretNameをhostから自動導出できるように変更
Helm Chart Release / release-chart (push) Successful in 6s

ingress.hosts[].hostは既にYAMLアンカー(&appDomain)でingress.tls[].hosts
と値を共有できていたが、secretNameは独立した文字列指定が必須で、
ドメイン変更時に別途書き換えが必要だった。

secretNameを省略可能にし、未指定時はそのエントリの最初のhostから
自動生成する(.を-に置換して-tlsを付与。例: example.tld → example-tld-tls)。
明示的に指定した場合はそちらが優先されるため既存挙動は変わらない。

手動リリース 8.5.10-d。
This commit is contained in:
2026-09-27 15:28:15 +09:00
parent 9d8fb83bac
commit c7397b3c9d
5 changed files with 20 additions and 5 deletions
+6
View File
@@ -27,6 +27,12 @@ Websites 組織の各サイト(e-learn.jp / fcdomain.com / hotels / tskholding
## チャート改修履歴 ## チャート改修履歴
### ingress.tls[].secretNameをhostから自動導出可能に(2026-09-27, v8.5.10-d)
- **背景**: `ingress.hosts[].host` は既にYAMLアンカー(`&appDomain`)で `ingress.tls[].hosts` と値を共有できるようになっていたが、`ingress.tls[].secretName` は独立した文字列指定が必須で、ドメイン変更時に別途書き換えが必要だった。
- **修正内容**: `templates/ingress.yaml` で `secretName` を省略可能にし、未指定時はそのエントリの最初のhostから自動生成する(`.`を`-`に置換して`-tls`を付与。例: `example.tld` → `example-tld-tls`)。明示的に指定した場合はそちらが優先される(後方互換)。デフォルトの`values.yaml`も自動導出を使う例に更新。
- **対象ファイル**: `templates/ingress.yaml`, `values.yaml`, `README.md`, `Chart.yaml`
### v8.5.10-bのDeployment.spec.selector変更が既存リリースのアップグレードを壊す不具合を修正(2026-09-26, v8.5.10-c) ### v8.5.10-bのDeployment.spec.selector変更が既存リリースのアップグレードを壊す不具合を修正(2026-09-26, v8.5.10-c)
v8.5.10-bでnginx/php-fpm Deploymentのspec.selector.matchLabelsに`app.kubernetes.io/component: web`を追加したが、Deployment.spec.selectorは作成後immutableのため既存リリースの`helm upgrade`が「field is immutable」で失敗する不具合を確認・修正した。既存Deploymentのselectorは元の内容(name+instanceのみ)に戻し、Selenium側はcomponentラベルではなく`app.kubernetes.io/name`自体を`<chart名>-selenium`という別名にする方式(新ヘルパー`phpfpm.selenium.name`/`phpfpm.selenium.selectorLabels`)に変更した。componentラベルだけを足す設計だと、SeleniumのPodもnginx/php-fpm側Deploymentのselector(name+instance)に一致してしまい2つのDeployment(ReplicaSet)が同じPod集合を取り合う選択重複を起こすため、name自体をvariantにして構造的に防止する。v8.5.10-bは未適用ならスキップしてv8.5.10-c以降を直接使うこと。 v8.5.10-bでnginx/php-fpm Deploymentのspec.selector.matchLabelsに`app.kubernetes.io/component: web`を追加したが、Deployment.spec.selectorは作成後immutableのため既存リリースの`helm upgrade`が「field is immutable」で失敗する不具合を確認・修正した。既存Deploymentのselectorは元の内容(name+instanceのみ)に戻し、Selenium側はcomponentラベルではなく`app.kubernetes.io/name`自体を`<chart名>-selenium`という別名にする方式(新ヘルパー`phpfpm.selenium.name`/`phpfpm.selenium.selectorLabels`)に変更した。componentラベルだけを足す設計だと、SeleniumのPodもnginx/php-fpm側Deploymentのselector(name+instance)に一致してしまい2つのDeployment(ReplicaSet)が同じPod集合を取り合う選択重複を起こすため、name自体をvariantにして構造的に防止する。v8.5.10-bは未適用ならスキップしてv8.5.10-c以降を直接使うこと。
+1 -1
View File
@@ -2,6 +2,6 @@ apiVersion: v2
name: phpfpm name: phpfpm
description: Nginx + PHP-FPM Helm Chart with external DB and optional Selenium support description: Nginx + PHP-FPM Helm Chart with external DB and optional Selenium support
type: application type: application
version: 8.5.10-c version: 8.5.10-d
appVersion: "8.5.10" appVersion: "8.5.10"
icon: https://upload.wikimedia.org/wikipedia/commons/thumb/2/27/PHP-logo.svg/330px-PHP-logo.svg.png icon: https://upload.wikimedia.org/wikipedia/commons/thumb/2/27/PHP-logo.svg/330px-PHP-logo.svg.png
+5 -1
View File
@@ -278,11 +278,15 @@ smtp:
| `ingress.className` | IngressClass名 | `""` | | `ingress.className` | IngressClass名 | `""` |
| `ingress.annotations` | アノテーション | `{}` | | `ingress.annotations` | アノテーション | `{}` |
| `ingress.hosts` | ホスト設定 | `[{host: "example.tld"}]` | | `ingress.hosts` | ホスト設定 | `[{host: "example.tld"}]` |
| `ingress.tls` | TLS設定 | `[]` | | `ingress.tls` | TLS設定(`secretName`省略可) | `[]` |
> **📌 Ingressのアップロードサイズ上限** > **📌 Ingressのアップロードサイズ上限**
> `ingress.enabled: true` の場合、`nginx.ingress.kubernetes.io/proxy-body-size` アノテーションが `uploadMaxSize` の値で**自動的に**付与されます(明示的に `ingress.annotations` へ指定した場合はそちらが優先されます)。Ingressコントローラーがnginx以外の場合は、`ingress.annotations` にそのコントローラー向けの上限設定を明示的に指定してください。 > `ingress.enabled: true` の場合、`nginx.ingress.kubernetes.io/proxy-body-size` アノテーションが `uploadMaxSize` の値で**自動的に**付与されます(明示的に `ingress.annotations` へ指定した場合はそちらが優先されます)。Ingressコントローラーがnginx以外の場合は、`ingress.annotations` にそのコントローラー向けの上限設定を明示的に指定してください。
> **📌 hostとTLS secretNameの共有**
> `ingress.hosts[].host` にYAMLアンカー(例: `&appDomain`)を付けておくと、`ingress.tls[].hosts` で `*appDomain` として再利用でき、ドメイン名を1箇所の変更で揃えられます(デフォルトのvalues.yamlも参照)。
> さらに `ingress.tls[].secretName` は**省略可能**で、省略した場合はそのエントリの最初のhostから自動生成されます(`.`を`-`に置換して`-tls`を付与。例: `example.tld` → `example-tld-tls`)。別の証明書Secret名を使いたい場合のみ `secretName` を明示的に指定してください(指定時はそちらが優先されます)。
### Nginx設定 ### Nginx設定
| パラメータ | 説明 | デフォルト | | パラメータ | 説明 | デフォルト |
+3 -1
View File
@@ -31,7 +31,9 @@ spec:
{{- if .Values.ingress.tls }} {{- if .Values.ingress.tls }}
tls: tls:
{{- range .Values.ingress.tls }} {{- range .Values.ingress.tls }}
- secretName: {{ .secretName }} {{- /* secretName省略時は、このエントリの最初のhostから自動生成する(例: example.tld → example-tld-tls)。
明示的に指定した場合はそちらを優先する。 */}}
- secretName: {{ .secretName | default (printf "%s-tls" ((first .hosts) | replace "." "-")) }}
hosts: hosts:
{{- range .hosts }} {{- range .hosts }}
- {{ . }} - {{ . }}
+5 -2
View File
@@ -47,11 +47,14 @@ ingress:
paths: paths:
- path: / - path: /
pathType: Prefix pathType: Prefix
# secretNameは省略可能。省略した場合、そのエントリの最初のhostの"."を"-"に
# 置換し"-tls"を付与した値が自動生成される(例: example.tld → example-tld-tls)。
# appDomainの変更だけでhostとsecretNameが揃うため、通常は明示指定しなくてよい。
# 別の証明書Secret名にしたい場合のみ secretName: "your-secret-name" を追加する。
tls: tls:
[ [
{ {
hosts: [*appDomain], hosts: [*appDomain]
secretName: "example-tls"
} }
] ]