2025-11-20 07:16:15 +00:00
2025-11-20 07:16:15 +00:00
2025-11-20 06:28:50 +00:00
2025-11-20 06:37:16 +00:00

phpMyAdmin with nginx Helm Chart

このHelmチャートは、nginx をリバースプロキシとして使用する phpMyAdmin をKubernetes上にデプロイします。

機能

  • nginx (1.29.3-alpine-perl) + phpMyAdmin (5.2.3-fpm-alpine) のマルチコンテナ構成
  • 本番環境対応のセキュリティ設定
  • Horizontal Pod Autoscaler (HPA) サポート
  • Pod Disruption Budget (PDB) による高可用性
  • Network Policy によるネットワーク分離
  • セッション永続化のための PersistentVolume サポート
  • Ingress サポート (TLS対応)
  • リソース制限の設定
  • Liveness/Readiness プローブ
  • Security Context による権限制御

前提条件

  • Kubernetes 1.19+
  • Helm 3.0+
  • MySQL/MariaDB サーバー

インストール

基本的なインストール

helm install phpmyadmin ./phpmyadmin-nginx

カスタム設定でのインストール

helm install phpmyadmin ./phpmyadmin-nginx \
  --set phpmyadmin.hosts[0].host=mysql.default.svc.cluster.local \
  --set phpmyadmin.hosts[0].port=3306 \
  --set ingress.enabled=true \
  --set ingress.hosts[0].host=phpmyadmin.example.com

values.yaml を使用したインストール

helm install phpmyadmin ./phpmyadmin-nginx -f custom-values.yaml

設定例

1. 複数のMySQLサーバーへの接続

phpmyadmin:
  hosts:
    - host: mysql-primary.default.svc.cluster.local
      port: 3306
    - host: mysql-secondary.default.svc.cluster.local
      port: 3306

2. Ingress の有効化 (TLS対応)

ingress:
  enabled: true
  className: nginx
  annotations:
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
    nginx.ingress.kubernetes.io/rate-limit: "10"
  hosts:
    - host: phpmyadmin.example.com
      paths:
        - path: /
          pathType: Prefix
  tls:
    - secretName: phpmyadmin-tls
      hosts:
        - phpmyadmin.example.com

3. オートスケーリングの有効化

autoscaling:
  enabled: true
  minReplicas: 2
  maxReplicas: 10
  targetCPUUtilizationPercentage: 80
  targetMemoryUtilizationPercentage: 80

4. Network Policy の有効化

networkPolicy:
  enabled: true
  policyTypes:
    - Ingress
    - Egress
  ingress:
    - from:
      - namespaceSelector:
          matchLabels:
            name: ingress-nginx
      ports:
      - protocol: TCP
        port: 8080
  egress:
    - to:
      - podSelector:
          matchLabels:
            app: mysql
      ports:
      - protocol: TCP
        port: 3306

5. セッション永続化

persistence:
  enabled: true
  storageClass: "standard"
  accessMode: ReadWriteMany
  size: 1Gi

パラメータ

グローバル設定

パラメータ 説明 デフォルト値
replicaCount レプリカ数 2
image.nginx.registry nginx イメージレジストリ docker.io
image.nginx.repository nginx リポジトリ nginx
image.nginx.tag nginx イメージタグ 1.29.3-alpine-perl
image.phpmyadmin.registry phpMyAdmin イメージレジストリ docker.io
image.phpmyadmin.repository phpMyAdmin リポジトリ phpmyadmin
image.phpmyadmin.tag phpMyAdmin イメージタグ 5.2.3-fpm-alpine

サービス設定

パラメータ 説明 デフォルト値
service.type Serviceタイプ ClusterIP
service.port Serviceポート 80
service.targetPort ターゲットポート 8080

phpMyAdmin 設定

パラメータ 説明 デフォルト値
phpmyadmin.hosts[0].host MySQLホスト mysql.default.svc.cluster.local
phpmyadmin.hosts[0].port MySQLポート 3306
phpmyadmin.env.PMA_ARBITRARY 任意サーバー接続許可 "0"
phpmyadmin.env.UPLOAD_LIMIT アップロード制限 "128M"
phpmyadmin.env.MEMORY_LIMIT メモリ制限 "512M"
phpmyadmin.blowfishSecret Blowfish暗号化キー "" (自動生成)

リソース設定

パラメータ 説明 デフォルト値
resources.nginx.requests.cpu nginx CPU要求 100m
resources.nginx.requests.memory nginx メモリ要求 64Mi
resources.phpmyadmin.requests.cpu phpMyAdmin CPU要求 250m
resources.phpmyadmin.requests.memory phpMyAdmin メモリ要求 256Mi

アンインストール

helm uninstall phpmyadmin

セキュリティに関する注意事項

  1. Blowfish Secret: 本番環境では必ず独自の blowfish secret を設定してください
  2. Network Policy: 本番環境では Network Policy を有効にしてアクセスを制限してください
  3. Ingress: 外部公開する場合は必ず TLS を有効にしてください
  4. 認証: phpMyAdmin への直接アクセスを制限し、VPN経由でのアクセスを推奨します

トラブルシューティング

Podが起動しない場合

kubectl describe pod -l app.kubernetes.io/name=phpmyadmin-nginx
kubectl logs -l app.kubernetes.io/name=phpmyadmin-nginx -c nginx
kubectl logs -l app.kubernetes.io/name=phpmyadmin-nginx -c phpmyadmin

MySQLに接続できない場合

  1. MySQLサーバーのホスト名とポートを確認
  2. Network Policyの設定を確認
  3. MySQLサーバーがリッスンしているか確認
kubectl exec -it <pod-name> -c phpmyadmin -- nc -zv mysql.default.svc.cluster.local 3306
Description
Alpine based PHPmyAdmin
Readme 59 KiB
Languages
Smarty 100%