diff --git a/README.md b/README.md new file mode 100644 index 0000000..79af2ab --- /dev/null +++ b/README.md @@ -0,0 +1,201 @@ +# 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 サーバー + +## インストール + +### 基本的なインストール + +```bash +helm install phpmyadmin ./phpmyadmin-nginx +``` + +### カスタム設定でのインストール + +```bash +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 を使用したインストール + +```bash +helm install phpmyadmin ./phpmyadmin-nginx -f custom-values.yaml +``` + +## 設定例 + +### 1. 複数のMySQLサーバーへの接続 + +```yaml +phpmyadmin: + hosts: + - host: mysql-primary.default.svc.cluster.local + port: 3306 + - host: mysql-secondary.default.svc.cluster.local + port: 3306 +``` + +### 2. Ingress の有効化 (TLS対応) + +```yaml +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. オートスケーリングの有効化 + +```yaml +autoscaling: + enabled: true + minReplicas: 2 + maxReplicas: 10 + targetCPUUtilizationPercentage: 80 + targetMemoryUtilizationPercentage: 80 +``` + +### 4. Network Policy の有効化 + +```yaml +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. セッション永続化 + +```yaml +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` | + +## アンインストール + +```bash +helm uninstall phpmyadmin +``` + +## セキュリティに関する注意事項 + +1. **Blowfish Secret**: 本番環境では必ず独自の blowfish secret を設定してください +2. **Network Policy**: 本番環境では Network Policy を有効にしてアクセスを制限してください +3. **Ingress**: 外部公開する場合は必ず TLS を有効にしてください +4. **認証**: phpMyAdmin への直接アクセスを制限し、VPN経由でのアクセスを推奨します + +## トラブルシューティング + +### Podが起動しない場合 + +```bash +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サーバーがリッスンしているか確認 + +```bash +kubectl exec -it -c phpmyadmin -- nc -zv mysql.default.svc.cluster.local 3306 +```