Files
phpmyadmin/README.md
2025-11-20 06:28:50 +00:00

202 lines
5.6 KiB
Markdown

# 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 <pod-name> -c phpmyadmin -- nc -zv mysql.default.svc.cluster.local 3306
```