[Recursos do Kubernetes] Explicação detalhada do gerenciamento de configuração de dados criptografados secretos

1. Conhecimento teórico da configuração de criptografia secreta

1. O que é segredo?

O artigo anterior explicou a explicação detalhada do recurso ConfigMap Centro de gerenciamento de configuração ConfigMap , que é usado para armazenar dados não criptografados em texto simples, como arquivos de configuração de programa e outras informações. O ConfigMap não pode implementar criptografia. Se armazenarmos informações confidenciais, como tokens, senhas , e chaves secretas, precisamos usar o tipo Secret para criptografia.

2. A diferença entre Secret e configMap

  • ConfigMap: usado para armazenar informações de configuração civilizadas não criptografadas.
  • Segredo: usado para armazenar dados criptografados, como senhas, tokens e outras informações.

3. Parâmetros e tipos secretos

Secret tem três parâmetros opcionais:

  • generic: Tipo genérico, geralmente usado para armazenar dados de senha.
  • tls: usado para armazenar chaves privadas e certificados.
  • docker-registry: usado para armazenar as informações de autenticação do docker warehouse.

Três tipos secretos:

  • Service Account: usado para ser referenciado por serviceaccount. Quando o serviceaccout é criado, o Kubernetes criará o segredo correspondente por padrão. Se o pod usar serviceaccount, o segredo correspondente será montado automaticamente no diretório /run/secrets/kubernetes.io/serviceaccount do pod.
  • Opaco: Segredo no formato de codificação base64, usado para armazenar senhas, chaves secretas, etc. Os dados originais podem ser obtidos por meio da decodificação base64 --decode, portanto, a segurança é fraca
  • kubernetes.io/dockerconfigjson: usado para armazenar informações de autenticação para registros privados do docker.

2. Pratique: use Secret para criptografia

1. Método 1: Importando variáveis ​​de ambiente

Primeiro, criptografe os valores de nome de usuário e senha primeiro:

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

Crie var-secretum segredo chamado

cat varSecretConfig.yaml 

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

Crie um recurso de implantação usando a imagem do busybox e introduza o segredo

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

Execute o arquivo YAML:

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

Visualize o status da criação de recursos:

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

[Falha na transferência da imagem do link externo, o site de origem pode ter um mecanismo anti-leeching, é recomendável salvar a imagem e carregá-la diretamente (img-ct3A6Giw-1688270847294) (D:\MD Archives\IMG\image-20230702114038298.png )]

Entre no container para verificar se a variável foi importada com sucesso:

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

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

2. Método 2: Introdução do método de montagem de volume

Crie volume-secretum segredo chamado

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

Crie uma implantação e introduza o segredo

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

Execute o arquivo YAML:

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

Entre no container para visualizar:

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

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

cat /tmp/username 
admin

Acho que você gosta

Origin blog.csdn.net/weixin_45310323/article/details/131499575
Recomendado
Clasificación