✅ 既存構成におけるセキュリティの課題

これまでに構築したアーキテクチャは上記の通りである。この構造におけるMySQLに注目すると、セキュリティ上の脆弱性が存在する。30002番ポートを通じてMySQLへ直接アクセスできるように設定されている点である。ServiceのNodePortを活用し、30002番ポートを外部に開放したことで、誰でもMySQLにアクセスできる状態となっている。
✅ Serviceの種類
- NodePort:Kubernetes内部から該当サービスに接続するためのポートを開放し、外部からの接続を可能にする。
- ClusterIP:Kubernetes内部でのみ通信可能なIPアドレスを付与する。外部からのリクエストは不可である。
- LoadBalancer:外部のロードバランサー(AWSのロードバランサーなど)を活用し、外部から接続できるよう連携する。
✅ セキュリティ課題の解決
セキュリティ上の課題を解決するため、Serviceの種類としてNodePortを使用せず、ClusterIPを活用しなければならない。ClusterIPを活用することで、外部から無差別にMySQLへアクセスできないよう遮断する必要がある。
1.既存Service Manifestファイルの修正
mysql-service.yaml
apiVersion: v1
kind: Service
# Serviceの基本情報
metadata:
name: mysql-service # Service名
# Serviceの詳細情報
spec:
type: ClusterIP # Serviceの種類
selector:
app: mysql-db # 実行中のPodのうち、「app: mysql-db」という値を持つPodとServiceを紐付け
ports:
- protocol: TCP # サービスに接続するためのプロトコル
port: 3306 # Kubernetes内部からServiceに接続するためのポート番号
targetPort: 3306 # マッピングするPodのポート番号
※nodePortは削除する。
**~~nodePort: 30002** # 外部からユーザーがアクセスするポート番号~~
2.Serviceの修正反映
$ kubectl delete service mysql-service
$ kubectl apply -f mysql-service.yaml
$ kubectl rollout restart deployment spring-deployment
3.Spring Bootと正常に接続されたか確認する

4.外部のDBツールでのアクセスできなくなったか確認する

✅ 図解で理解する

✅ DB管理のために接続する必要がある場合は?
Kubernetesのport-forwardを活用して接続すればよい。以下のポートフォワーディングコマンドを使用すると、自身のローカルコンピュータからのみ該当Podへの接続を許可できるようになる。
$ kubectl port-forward pod/[MySQLのPod名] 3306:3306

'k8s > archive_1' 카테고리의 다른 글
| 20.EC2 - (k3s) Nginxの起動 (0) | 2026.03.18 |
|---|---|
| 19.EC2 - k3s (0) | 2026.03.18 |
| 17.Volume - ConfigMap、Secret (0) | 2026.03.18 |
| 16.Deployment - Spring BootとMySQLの連携 (0) | 2026.03.18 |
| 15.Deployment - MySQL(Volume設定) (0) | 2026.03.18 |