[Cloud Native Kubernetes] 構成管理 - Secret & ConfigMap


ここに画像の説明を挿入


1. 機密設定の抽象化 Secret

シークレットは、パスワード、トークン、秘密鍵などの少量の機密情報を含むオブジェクトです。このような情報は、Pod 仕様またはイメージに配置できます。Secret を使用すると、アプリケーション コードに機密データを含める必要がなくなります。Secret は、それを使用する Pod とは別に作成できるため、Pod の作成、表示、編集のワークフローで Secret とそのデータが公開されるリスクが少なくなります。

1.シークレットを知る

Secret は使用数据加密され、etcd に保存され、Volume をマウントすることで Pod コンテナーからアクセスされます。通常、格納されるデータは平文ではなく、エンコードまたは暗号化されます。たとえば、一般的なのbase64はエンコード方法です。

平文:直接理解できるもの。

base64 エンコーディングを使用して、次のように文字列「majinjian」を出力します。

[root@master ~]# echo -n 'majinjian' | base64
bWFqaW5qaWFu
[root@master ~]# 

2. シークレットの使用

(1) Secret 暗号化データの作成

最初に Secret 暗号化データ (.yaml ファイル) をvi secret.yaml作成し、次のように入力します。

apiVersion: v1
kind: Secret
metadata: 
  name: mysecret
type: Opaque
data: 
  username: cm9vdA==
  password: cXdlcnR5dWlvcDE5OTkuLg==

次のように:

ここに画像の説明を挿入
作成が成功したら、yaml ファイルを実行します。

[root@master ~]# kubectl apply -f secret.yaml 

この時点でシークレットを確認すると、mysecret が正常に作成されていることがわかります。

ここに画像の説明を挿入

(2) Secret を変数として Pod コンテナにマウントする

vi secret-val.yaml新しい yaml ファイル secret-val.yaml を作成します。

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: nginx
    image: nginx
    env:
      - name: SECRET_USERNAME
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: username
      - name: SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: password

「valueFrom」は変数としてのマウントを意味し、マウント ポイントは前の手順で作成した mysecret です。

ここに画像の説明を挿入
作成が成功したら、yaml ファイルを実行します。

[root@master ~]# kubectl apply -f secret-val.yaml 

この時点で、ノード内のポッドを確認し、mypod が実行されるのを待ちます (実行中の状態のみ)。

ここに画像の説明を挿入
最後に、コンテナーに入り、マウントした値が変数に含まれているかどうかを確認します。

[root@master ~]# kubectl exec -it mypod bash

echo $变量名(e.g. echo $SECRET_USERNAME ) を使用して、保存された変数値を表示します。

次に、抽象 ConfigMap を構成します

ConfigMap は、非機密データをキーと値のペアに格納するために使用される API オブジェクトです。使用すると、Pod はそれを環境変数、コマンドライン パラメーター、またはストレージ ボリューム内の構成ファイルとして使用できます。ConfigMap は、環境構成情報をコンテナー イメージから分離します。これは、アプリケーション構成の変更に便利です。ただし、ConfigMap は機密性や暗号化を提供しません。

1. ConfigMap を理解する

ConfigMap は Secret に似ています。違いは、Secret は暗号化されたデータを格納するのに対し、ConfigMap は暗号化されたデータを格納すること不加密数据であり、ストアド プロシージャは基本的に Secret と同じです。

2. ConfigMap の使用

ヒント: 操作の前に、以前に作成したシークレットとコンテナーを削除して、区別しやすくします。

[root@master ~]# kubectl delete secret --all
[root@master ~]# kubectl delete Pod --all

(1) 設定ファイルを作成する

ここvi redis.propertiesで作成するプロパティ ファイルには、次のように入力します。

redis.host=127.0.0.1
redis.port=6379
redis.password=123456

(2) ConfigMap の作成

[root@master ~]# kubectl create configmap redis-config --from-file=redis.properties 
configmap/redis-config created
[root@master ~]# 

この時点で、configmap (cm はその省略形) を確認すると、正常に作成されています。

ここに画像の説明を挿入

(3) ConfigMap を変数として Pod コンテナにマウントする

vi myconfig.yaml構成ファイル myconfig.yaml ファイルを作成し、次のように入力します。

apiVersion: v1
kind: ConfigMap
metadata:
  name: myconfig
  namespace: default
data:
  special.level: info
  special.type: hello

作成が成功したら、ファイルを実行します。

[root@master ~]# kubectl apply -f myconfig.yaml 
configmap/myconfig created

この時点で、もう一度 ConfigMap を確認すると、myconfig も正常に作成されています。

ここに画像の説明を挿入
vi config-var.yamlマウントファイル config-var.yaml ファイルを作成し、次の内容を入力します。

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: busybox
      image: busybox
      command: [ "/bin/sh", "-c", "echo $(LEVEL) $(TYPE)" ]
      env:
        - name: LEVEL
          valueFrom:
            configMapKeyRef:
              name: myconfig
              key: special.level
        - name: TYPE
          valueFrom:
            configMapKeyRef:
              name: myconfig
              key: special.type
  restartPolicy: Never

作成が成功したら、ファイルを実行します。

[root@master ~]# kubectl apply -f config-var.yaml 
pod/mypod created

最も一般的な方法は、ログを介してコンテナーを表示することです。「info hello」を出力すると、マウントが完了します。

[root@master ~]# kubectl logs mypod
[root@master ~]# info hello

おすすめ

転載: blog.csdn.net/weixin_53072519/article/details/127077819