【Kubernetesリソース】秘密暗号化データ構成管理 詳細説明

1. シークレット暗号化構成の理論的知識

1. シークレットとは何ですか?

前回の記事では、プログラム構成ファイルやその他の情報など、暗号化されていない平文データを保存するために使用されるConfigMap リソース ConfigMap 構成管理センターについて詳しく説明しましたが、ConfigMap では暗号化を実装できません。トークンやパスワードなどの機密情報を保存する場合は、 、および秘密キーを使用するには、暗号化に秘密タイプを使用する必要があります。

2. Secret と configMap の違い

  • ConfigMap: 文明化された非暗号化構成情報を保存するために使用されます。
  • シークレット: パスワード、トークン、その他の情報などの暗号化されたデータを保存するために使用されます。

3. シークレットパラメータとタイプ

Secret には 3 つのオプションのパラメータがあります。

  • generic: パスワード データの保存によく使用されるジェネリック タイプ。
  • tls: 秘密キーと証明書を保存するために使用されます。
  • docker-registry: Docker ウェアハウスの認証情報を保存するために使用されます。

シークレット3種類:

  • サービス アカウント: 以前は serviceaccount によって参照されていました。serviceaccout が作成されると、Kubernetes はデフォルトで対応するシークレットを作成します。ポッドが serviceaccount を使用する場合、対応するシークレットはポッドの /run/secrets/kubernetes.io/serviceaccount ディレクトリに自動的にマウントされます。
  • Opaque: Base64 エンコード形式のシークレット。パスワードや秘密キーなどを保存するために使用されます。元データはbase64 --decodeデコードで取得できるのでセキュリティが弱い
  • kubernetes.io/dockerconfigjson: プライベート Docker レジストリの認証情報を保存するために使用されます。

2. 実践: 暗号化に Secret を使用する

1. 方法 1: 環境変数をインポートする

まず、ユーザー名とパスワードの値を暗号化します。

echo admin|base64
echo NTQ34tg*@19VF-AdmiN|base64

var-secretという名前のシークレットを作成します

cat varSecretConfig.yaml 

---
apiVersion: v1 
kind: Secret
metadata:
  name: var-secret
type: Opaque          # 指定加密方式
data:
  username: YWRtaW4K  # 值是加密后的
  password: TlRRMzR0ZypAMTlWRi1BZG1pTgo=

Busybox イメージを使用して Deployment リソースを作成し、Secret を導入します

cat vardeploy.yaml 
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: vardemo
spec:
  replicas: 1
  selector:
    matchLabels:
      type: var
  template:
    metadata:
      labels:
        type: var
    spec:
      containers:
      - name: vardemo
        image: busybox:1.28.0
        imagePullPolicy: IfNotPresent
        command: ["/bin/sh", "-c", "sleep 36000"]
        env:
        - name: password
          valueFrom:
            secretKeyRef:
              name: var-secret
              key: password
        - name: username
          valueFrom:
            secretKeyRef:
              name: var-secret
              key: username

YAML ファイルを実行します。

kubectl apply -f varSecretConfig.yaml 
kubectl apply -f vardeploy.yaml 

リソースの作成ステータスを表示します。

kubectl get pod -l type=var
kubectl get secret var-secret
kubectl describe secret var-secret

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-ct3A6Giw-1688270847294) (D:\MD Archives\IMG\image-20230702114038298.png) )]

コンテナーに入って、変数が正常にインポートされたかどうかを確認します。

kubectl exec -it vardemo-5cf58dd664-vnv5q -- /bin/sh

echo $username
admin
echo $password
NTQ34tg*@19VF-AdmiN

2. 方法2:ボリュームマウント方式の導入

volume-secretという名前のシークレットを作成します

cat volumeSecretConfig.yaml 
---
apiVersion: v1 
kind: Secret
metadata:
  name: volume-secret
type: Opaque
data:
  username: YWRtaW4K
  password: TlRRMzR0ZypAMTlWRi1BZG1pTgo=

デプロイメントを作成し、シークレットを導入する

cat volumedeploy.yaml 
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: volumedemo
spec:
  replicas: 1
  selector:
    matchLabels:
      type: volume
  template:
    metadata:
      labels:
        type: volume
    spec:
      volumes:
      - name: volume-secret
        secret:
          secretName: volume-secret  # 定义挂载卷
      containers:
      - name: volumedemo
        image: busybox:1.28.0
        imagePullPolicy: IfNotPresent
        command: ["/bin/sh", "-c", "sleep 36000"]
        volumeMounts:
        - name: volume-secret
          mountPath: /tmp 
          readOnly: true

YAML ファイルを実行します。

kubectl apply -f volumeSecretConfig.yaml
kubectl apply -f volumedeploy.yaml	

表示するコンテナを入力してください:

kubectl exec -it volumedemo-6dc47cff57-qstv4 -- /bin/sh

cat /tmp/password 
NTQ34tg*@19VF-AdmiN

cat /tmp/username 
admin

おすすめ

転載: blog.csdn.net/weixin_45310323/article/details/131499575