- service.externalTrafficPolicy: Local を追加し、kube-proxyのSNATによる 実IPアドレス消失を解消(ベアメタル/MetalLB構成向け) - wp-config.php内の危険な二重REMOTE_ADDR上書き処理を削除 (Nginx real_ipモジュールの信頼境界を迂回できるIP詐称の余地があった) - smtp.* 設定を追加し、msmtp経由の外部SMTPリレー送信に対応 (helmchart/phpfpm と同一の実装パターンを踏襲) - README.md / CLAUDE.md を更新
This commit is contained in:
@@ -69,15 +69,10 @@ spec:
|
||||
$_SERVER['HTTPS'] = 'on';
|
||||
}
|
||||
|
||||
{{- if .Values.nginx.forwardRealIP.enabled }}
|
||||
// Add Trusted Proxy - Extract Real Client IP from X-Forwarded-For header
|
||||
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
|
||||
$forwarded_ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
|
||||
$_SERVER['REMOTE_ADDR'] = trim($forwarded_ips[0]);
|
||||
} elseif (isset($_SERVER['HTTP_X_REAL_IP'])) {
|
||||
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_REAL_IP'];
|
||||
}
|
||||
{{- end }}
|
||||
// 実クライアントIPの解決はNginx側(real_ipモジュール)で完結しており、
|
||||
// fastcgi_param REMOTE_ADDR として渡されるためPHP側での再判定は行わない。
|
||||
// ここでX-Forwarded-Forを無条件に信頼して上書きすると、Nginxの信頼済み
|
||||
// プロキシ判定を迂回してクライアントがIPを詐称できてしまうため実施しない。
|
||||
|
||||
$protocol = 'http';
|
||||
if ( isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' ) {
|
||||
@@ -291,10 +286,38 @@ spec:
|
||||
- name: wordpress
|
||||
image: "{{ .Values.image.wordpress.registry }}/{{ .Values.image.wordpress.repository }}:{{ .Values.image.wordpress.tag }}"
|
||||
imagePullPolicy: {{ .Values.image.wordpress.pullPolicy }}
|
||||
{{- if .Values.smtp.enabled }}
|
||||
# SMTP有効時はapk addでmsmtpを導入する必要があるためrootで起動し、
|
||||
# セットアップ後にphp-fpmへexecする(ワーカープロセス自体はイメージ標準の
|
||||
# www.confによりwww-data(uid82)で動作するため実処理は非rootのまま)
|
||||
command: ["/bin/sh", "-c"]
|
||||
args:
|
||||
- |
|
||||
set -e
|
||||
echo "Configuring SMTP for mail sending..."
|
||||
apk add --no-cache msmtp ca-certificates
|
||||
|
||||
# msmtpはPHP-FPMワーカー(www-data等の非root)から実行されるため、
|
||||
# rootが作成するこのファイルも読み取り可にする必要がある
|
||||
# (実パスワードはpasswordeval経由で別ファイルから取得するため、
|
||||
# msmtprc自体に平文パスワードは含まれない)
|
||||
cp /etc/smtp-config/msmtprc /etc/msmtprc
|
||||
chmod 644 /etc/msmtprc
|
||||
|
||||
cat > /usr/local/etc/php/conf.d/99-smtp.ini << 'PHP_SMTP_EOF'
|
||||
; SMTP設定 - msmtp経由でメール送信
|
||||
sendmail_path = "/usr/bin/msmtp -t"
|
||||
sendmail_from = "{{ .Values.smtp.from }}"
|
||||
PHP_SMTP_EOF
|
||||
|
||||
echo "SMTP configured: {{ .Values.smtp.host }}:{{ .Values.smtp.port }}"
|
||||
exec php-fpm
|
||||
{{- else }}
|
||||
command: ["php-fpm"]
|
||||
securityContext:
|
||||
runAsUser: 82
|
||||
runAsGroup: 82
|
||||
{{- end }}
|
||||
env:
|
||||
- name: WORDPRESS_DB_HOST
|
||||
value: {{ .Values.wordpress.dbHost | quote }}
|
||||
@@ -314,6 +337,16 @@ spec:
|
||||
mountPath: /var/www/html
|
||||
- name: wordpress-persistent
|
||||
mountPath: /var/www/html/wp-content
|
||||
{{- if .Values.smtp.enabled }}
|
||||
- name: smtp-config
|
||||
mountPath: /etc/smtp-config
|
||||
readOnly: true
|
||||
{{- if .Values.smtp.auth.enabled }}
|
||||
- name: smtp-secrets
|
||||
mountPath: /etc/smtp-secrets
|
||||
readOnly: true
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
resources:
|
||||
{{- toYaml .Values.resources.wordpress | nindent 12 }}
|
||||
volumes:
|
||||
@@ -334,6 +367,26 @@ spec:
|
||||
configMap:
|
||||
name: {{ include "wordpress-nginx.fullname" . }}-adstxt
|
||||
{{- end }}
|
||||
{{- if .Values.smtp.enabled }}
|
||||
- name: smtp-config
|
||||
configMap:
|
||||
name: {{ include "wordpress-nginx.fullname" . }}-smtp-config
|
||||
items:
|
||||
- key: msmtprc
|
||||
path: msmtprc
|
||||
{{- if .Values.smtp.auth.enabled }}
|
||||
- name: smtp-secrets
|
||||
secret:
|
||||
secretName: {{ include "wordpress-nginx.fullname" . }}-smtp
|
||||
items:
|
||||
- key: password
|
||||
path: password
|
||||
# 0600だとSecretボリュームの所有者はroot、
|
||||
# msmtpはPHP-FPMワーカー(www-data等の非root)から実行されるため読めない
|
||||
# → 全ユーザー読み取り可にする(ボリュームはPod内にしか存在しないため許容範囲)
|
||||
mode: 0644
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- with .Values.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
|
||||
Reference in New Issue
Block a user