[Cloud Native] O uso de ConfigMap & Secret no gerenciamento de armazenamento k8s

 

 

Índice

1ConfigMap

1.1 Introdução

1.2 Vantagens

1.3 Definir ConfigMap

1.4 Uso

doisSegredo

2.1 Introdução

2.1 Definir segredo

2.2 Uso


1ConfigMap

1.1 Introdução

No Kubernetes, um ConfigMap é um objeto do Kubernetes usado para armazenar informações não confidenciais . Ele é usado para armazenar dados de configuração, como pares de valores-chave, arquivos de configuração inteiros ou dados JSON. ConfigMap geralmente é usado para arquivos de configuração, parâmetros de linha de comando, variáveis ​​de ambiente, etc. em imagens de contêiner.

O ConfigMap pode injetar dados de configuração de três maneiras:

  1. Injeção de variável de ambiente: injete dados de configuração nas variáveis ​​de ambiente do contêiner no pod.

  2. Injeção de arquivo de configuração: injete dados de configuração no sistema de arquivos do contêiner no pod, e o contêiner poderá ler esses arquivos.

  3. Injeção de parâmetros de linha de comando: injete dados de configuração nos parâmetros de linha de comando do contêiner.

1.2 Vantagens

  1. Evite codificação rígida e separe os dados de configuração do código do aplicativo.

  2. Fácil de manter e atualizar, o ConfigMap pode ser modificado de forma independente, sem reconstruir a imagem.

  3. Os dados de configuração podem ser injetados de diversas maneiras, tornando-os mais flexíveis.

  4. O ConfigMap pode ser controlado por versão e revertido por meio do mecanismo de automação do Kubernetes.

  5. O ConfigMap pode ser compartilhado por vários Pods, reduzindo o armazenamento duplicado de dados de configuração.

1.3 Definir ConfigMap

  • Operações básicas

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

  • Criação de linha de comando :

    • Você pode usar kubectl create configmapo comando para criar um configmap. O comando específico é o seguinte:

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

  • Criar via arquivo de configuração : Recomendado

    • O conteúdo do configmap pode ser definido criando um arquivo YAML. Por exemplo, crie um my-configconfigmap com o seguinte nome:

    • 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

    • Em seguida, use kubectl apply -fo comando para criar con

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

      mapa de fig.。

  • Criar a partir do arquivo:

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

  • Criar a partir da pasta :

    • Você pode colocar vários arquivos de configuração na mesma pasta e então usar kubectl create configmapcomandos para criar um configmap, por exemplo:

    •  
    • Isso criará um configmap chamado my-configconfigmap que contém config-files/o conteúdo de todos os arquivos da pasta como pares de valores-chave.

  • Criado por meio de variáveis ​​de ambiente :

    • O valor de uma variável de ambiente pode ser convertido em um configmap. Por exemplo, use o seguinte comando para converter o valor da variável de ambiente atual em um configmap:

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

1.4 Uso

  • Usado em variáveis ​​de ambiente

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 中内容全部注入

  • Usando configuração via Volume

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

doisSegredo

2.1 Introdução

No Kubernetes, Secret é um tipo de objeto usado para armazenar e gerenciar informações confidenciais, como senhas, chaves de API, certificados, etc. Eles são semelhantes ao ConfigMap, mas os Secrets proporcionam maior segurança e confidencialidade ao lidar com informações confidenciais.

Os segredos podem ser usados ​​para injetar essas informações confidenciais no contêiner e garantir que essas informações não vazem acidentalmente ou sejam expostas a outras pessoas em tempo de execução. Os segredos podem ser definidos e usados ​​de várias maneiras, como definição direta, carregamento de um arquivo, carregamento de variáveis ​​de ambiente, etc.

No Kubernetes, os segredos geralmente são usados ​​nos seguintes cenários:

  • Montado no pod como um volume para armazenar arquivos confidenciais, como certificados e chaves

  • Use variáveis ​​de ambiente em pods para armazenar informações confidenciais, como nomes de usuário e senhas

  • Usado para armazenar informações de login para o repositório de imagens Docker

  • Chave de API para armazenar serviços externos

Os segredos podem ser referenciados nas especificações do pod por meio de volumes e variáveis ​​de ambiente. Quando um contêiner usa um volume para fazer referência a um segredo, o segredo será montado no contêiner na forma de um arquivo. Quando um contêiner usa uma variável de ambiente para fazer referência a um segredo, os dados no segredo serão codificados em base64 e injetados na variável de ambiente do contêiner na forma de pares chave-valor.

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

2.1 Definir segredo

  • Crie usando linha de comando :

    • Você pode usar o comando kubectl create secret para criar um segredo, por exemplo:

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

  • Use a definição de arquivo YAML :

    • Você pode criar um arquivo YAML para definir o objeto Secret, por exemplo:

    • 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。

  • Crie usando o arquivo:

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

  • Criado por meio de variáveis ​​de ambiente :

    • O valor de uma variável de ambiente pode ser convertido em um segredo. Por exemplo, use o seguinte comando para converter o valor da variável de ambiente atual em um segredo:

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

2.2 Uso

  • Variáveis ​​de ambiente, parâmetros de linha de comando usam segredo

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
  • uso de volume

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

Acho que você gosta

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