k8s/archive_1

12.Secret

YOOANT 2026. 3. 18. 11:20

✅ Secretとは?

シークレット (Secret) は、コンフィグマップ (ConfigMap) と同様に環境変数を分離して管理するためのオブジェクトである。大きな違いは、シークレットがパスワードやトークンのようにセキュリティ上重要な値(機密情報)を管理するために特化している点である。


✅ Secretを活用して「機密情報」を分離する

既存のManifestファイルの確認

spring-config.yaml

apiVersion: v1
kind: ConfigMap

# ConfigMap の基本情報
metadata:
  name: spring-config 

# Key-Value 形式で設定値を保存
data:
  my-account: suhwan
  my-password: password123 # セキュリティ上重要な値

上記のマニフェストファイルにおいて、my-password の値がセキュリティ上重要な情報であると仮定する。この場合、my-password はコンフィグマップではなく、シークレット (Secret) で管理すべきである。


既存ファイルの修正および新規ファイルの作成

修正 (spring-config.yaml)

apiVersion: v1
kind: ConfigMap

metadata:
  name: spring-config

data:
  my-account: suhwan
  # my-password はここから削除する

新規作成 (spring-secret.yaml)

apiVersion: v1
kind: Secret

# Secret の基本情報
metadata:
  name: spring-secret # Secret の名前

# Key-Value 形式で値を保存
stringData:
  my-password: my-secret-password

参考:シークレットが正しく適用されたか確認するため、my-password の値を変更している。

修正 (spring-deployment.yaml)

apiVersion: apps/v1
kind: Deployment

metadata:
  name: spring-deployment

spec:
  replicas: 5
  selector:
    matchLabels:
      app: backend-app

  template:
    metadata:
      labels:
        app: backend-app
    spec:
      containers:
        - name: spring-container
          image: spring-server
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8080
          env:
            - name: MY_ACCOUNT
              valueFrom:
                configMapKeyRef:
                  name: spring-config
                  key: my-account
            - name: MY_PASSWORD
              valueFrom:
                secretKeyRef: # ConfigMap ではなく Secret を参照
                  name: spring-secret # Secret の名前
                  key: my-password    # Secret 内の Key 値

Manifestファイルの反映

$ kubectl apply -f spring-secret.yaml
$ kubectl apply -f spring-config.yaml
$ kubectl apply -f spring-deployment.yaml

# Deployment の再起動
$ kubectl rollout restart deployment spring-deployment

正常に反映されたか確認

問題なく反映されていることが確認できる

 

'k8s > archive_1' 카테고리의 다른 글

14.Deployment - MySQL(Volume未設定)  (0) 2026.03.18
13.Volumeとは?  (0) 2026.03.18
11.ConfigMap  (0) 2026.03.18
10.環境変数登録  (0) 2026.03.18
9.Service - Spring Bootと通信  (0) 2026.03.17

日本語