Diretório de artigos
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-secret
um 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
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-secret
um 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