k8s/archive_1

18.Volume - 外部からのMySQLアクセスを遮断する

YOOANT 2026. 3. 18. 20:11

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

これまでに構築したアーキテクチャは上記の通りである。この構造におけるMySQLに注目すると、セキュリティ上の脆弱性が存在する。30002番ポートを通じてMySQLへ直接アクセスできるように設定されている点である。ServiceのNodePortを活用し、30002番ポートを外部に開放したことで、誰でもMySQLにアクセスできる状態となっている。

 

✅ Serviceの種類

  • NodePort:Kubernetes内部から該当サービスに接続するためのポートを開放し、外部からの接続を可能にする。
  • ClusterIPKubernetes内部でのみ通信可能な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

日本語