[クラウドネイティブ] k8s ストレージ管理における ConfigMap と Secret の使用

 

 

目次

1 構成マップ

1.1 はじめに

1.2 利点

1.3 ConfigMap の定義

1.4 使用方法

2 シークレット

2.1 はじめに

2.1 シークレットの定義

2.2 使用方法


1 構成マップ

1.1 はじめに

Kubernetes では、ConfigMap は非機密情報を保存するために使用される Kubernetes オブジェクトですこれは、キーと値のペア、構成ファイル全体、または JSON データなどの構成データを保存するために使用されます。ConfigMap は通常、コンテナー イメージ内の構成ファイル、コマンド ライン パラメーター、環境変数などに使用されます。

ConfigMap は、次の 3 つの方法で構成データを挿入できます。

  1. 環境変数の注入: Pod 内のコンテナ環境変数に構成データを注入します。

  2. 設定ファイルの挿入: 設定データをポッドのコンテナ ファイル システムに挿入すると、コンテナはこれらのファイルを読み取ることができます。

  3. コマンド ライン パラメーターの挿入: 構成データをコンテナーのコマンド ライン パラメーターに挿入します。

1.2 利点

  1. ハードコーディングを避け、構成データをアプリケーションコードから分離します。

  2. 保守と更新が簡単で、ConfigMap はイメージを再構築せずに個別に変更できます。

  3. 構成データはさまざまな方法で挿入できるため、より柔軟になります。

  4. ConfigMap は、Kubernetes の自動化メカニズムを通じてバージョン管理およびロールバックできます。

  5. ConfigMap は複数の Pod で共有できるため、構成データの重複ストレージが削減されます。

1.3 ConfigMap の定義

  • 基本操作

    # 查看 configmap
    $ kubectl get configmap/cm  
    # 查看详细
    $ kubectl describe configmap/cm my-config
    # 删除 cm
    $ kubectl delete cm my-config

  • コマンドラインの作成:

    • kubectl create configmapコマンドを使用して configmap を作成できます。具体的なコマンドは次のとおりです。

    • $ kubectl create configmap my-config --from-literal=key1=value1 --from-literal=key2=value2

  • 設定ファイル経由で作成:推奨

    • configmap の内容は、YAML ファイルを作成することで定義できます。たとえば、my-config次のような名前の構成マップを作成します。

    • apiVersion: v1
      kind: ConfigMap
      metadata:
        name: my-config
      data:
        key1: value1
        key2: value2

    • apiVersion: v1
      kind: ConfigMap
      metadata:
        name: app-config
      data:
        application.yml: |
          name: xiaochen

    • 次に、kubectl apply -fコマンドを使用して con を作成します

      $ kubectl create configmap my-config --from-file=config-files/

      フィグマップ。

  • ファイルから作成:

    • $ echo -n admin >./username
      $ echo -n 123456 > ./password
      $ kubectl create configmap myconfigmap --from-file=./username --from-file=./password

  • フォルダーから作成:

    • 複数の構成ファイルを同じフォルダーに配置し、kubectl create configmapコマンドを使用して構成マップを作成できます。次に例を示します。

    •  
    • これにより、フォルダー内のすべてのファイルの内容をキーと値のペアとしてmy-config含む configmapという名前の構成マップが作成されます。config-files/

  • 環境変数を介して作成:

    • 環境変数の値は configmap に変換できます。たとえば、次のコマンドを使用して、現在の環境変数の値を configmap に変換します。

    • $ kubectl create configmap my-config --from-env-file=<(env)

1.4 使用方法

  • 環境変数で使用される

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: busybox
    command: ["/bin/sh", "-c", "echo $BUSY_NAME ; sleep 3600;"]
    env:
    # name: 是容器需要环境变量名称
    - name: BUSY_NAME
    # valueForm: value 来源与什么
      valueFrom:
        configMapKeyRef:  # 值来源与 configmap  来源与哪个 configmap 来源与哪个 configmap 中 key
          name: app-cm
          key: name
    # 一次性注入这个 configmap
    envFrom:
    - configMapRef:
        name: my-config

注意: env 是指定 configmap 中某个 key 进行注入 envForm 将 configmap 中内容全部注入

  • ボリューム経由の構成の使用

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
spec:
  containers:
    - name: myapp-container
      image: busybox
      command: ["/bin/sh","-c","sleep 3600"]
      volumeMounts:
        - name: data-volume
          mountPath: /data
  volumes:
    - name: data-volume
      configMap:
        name: application-cm

2 シークレット

2.1 はじめに

Kubernetes では、Secret は、パスワード、API キー、証明書などの機密情報を保存および管理するために使用されるオブジェクト タイプです。これらは ConfigMap に似ていますが、機密情報を扱う場合、シークレットはより優れたセキュリティと機密性を提供します。

シークレットを使用すると、この機密情報をコンテナーに挿入し、実行時にこの情報が誤って漏洩したり他人に公開されたりしないようにすることができます。シークレットは、直接定義、ファイルからのロード、環境変数からのロードなど、さまざまな方法で定義および使用できます。

Kubernetes では、シークレットは通常、次のシナリオで使用されます。

  • 証明書やキーなどの機密ファイルを保存するボリュームとしてポッドにマウントされます。

  • ポッドで環境変数を使用してユーザー名やパスワードなどの機密情報を保存する

  • Docker イメージ リポジトリのログイン情報を保存するために使用されます。

  • 外部サービスを保存するための API キー

シークレットは、ボリュームと環境変数を介してポッドの仕様で参照できます。コンテナーがボリュームを使用してシークレットを参照する場合、シークレットはファイルの形式でコンテナーにマウントされます。コンテナーが環境変数を使用して Secret を参照する場合、Secret 内のデータは Base64 でエンコードされ、キーと値のペアの形式でコンテナーの環境変数に挿入されます。

需要注意的是,Secret 并不提供强大的安全保证,只是简单地将数据存储在 base64 编码的形式下,并不提供加密或其他安全措施,因此不要将高度敏感的信息存储在 Secret 中。在处理高度敏感的信息时,需要使用更高级别的保护机制,如使用加密数据的 Volume 类型,或者使用第三方加密解决方案等。

2.1 シークレットの定義

  • コマンドラインを使用して作成します

    • kubectl create secret コマンドを使用してシークレットを作成できます。次に例を示します。

    • $ kubectl create secret generic my-secret --from-literal=username=admin --from-literal=password=admin123

  • YAML ファイル定義を使用します

    • YAML ファイルを作成して Secret オブジェクトを定義できます。次に例を示します。

    • apiVersion: v1
      kind: Secret
      metadata:
        name: my-secret
      type: Opaque
      data:
        username: YWRtaW4= # base64 编码后的用户名 admin
        password: MWYyZDFlMmU2N2Rm # base64 编码后的密码 1f2d1e2e67df

    • 注意: 这个 YAML 文件定义了一个名为 my-secret 的 Secret 对象,其中包含了两个 base64 编码后的 key-value 对:username 和 password。

  • ファイルを使用して作成します:

    $ echo -n admin >./username
    $ echo -n 123456 > ./password
    $ kubectl create secret generic mysecret --from-file=./username --from-file=./password

  • 環境変数を介して作成:

    • 環境変数の値はシークレットに変換できます。たとえば、次のコマンドを使用して、現在の環境変数の値をシークレットに変換します。

    • $ kubectl create secret generic  my-config --from-env-file=<(env)

2.2 使用方法

  • 環境変数、コマンドラインパラメータはSecretを使用します

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: myapp-container
      image: busybox
      command: ["/bin/sh","-c","sleep 3600"]
      env:
        - name: USERNAME
          valueFrom:
            secretKeyRef:
              name: my-secret
              key: username
        - name: PASSWORD
          valueFrom:
            secretKeyRef:
              name: my-secret
              key: password
      # 一次性注入这个 secret
      envFrom:
        - secretRef:
              name: my-secret
  restartPolicy: Never
  • ボリュームの使用

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
spec:
  containers:
    - name: myapp-container
      image: busybox
      command: ["/bin/sh","-c","sleep 3600"]
      volumeMounts:
        - name: secret-volume
          mountPath: /data
  volumes:
    - name: secret-volume
      secret:
        secretName: aaa

Supongo que te gusta

Origin blog.csdn.net/weixin_53678904/article/details/132375484
Recomendado
Clasificación