Kubernetes - segredos
Os segredos podem ser definidos como objetos Kubernetes usados para armazenar dados confidenciais, como nome de usuário e senhas com criptografia.
Existem várias maneiras de criar segredos no Kubernetes.
- Criação de arquivos txt.
- Criando a partir do arquivo yaml.
Criação de arquivo de texto
Para criar segredos a partir de um arquivo de texto, como nome de usuário e senha, primeiro precisamos armazená-los em um arquivo txt e usar o seguinte comando.
$ kubectl create secret generic tomcat-passwd –-from-file = ./username.txt –fromfile = ./.
password.txt
Criando a partir do arquivo Yaml
apiVersion: v1
kind: Secret
metadata:
name: tomcat-pass
type: Opaque
data:
password: <User Password>
username: <User Name>
Criando o segredo
$ kubectl create –f Secret.yaml
secrets/tomcat-pass
Usando segredos
Depois de criar os segredos, eles podem ser consumidos em um pod ou no controlador de replicação como -
- Variável de ambiente
- Volume
Como Variável de Ambiente
Para usar o segredo como variável de ambiente, vamos usar env na seção de especificações do arquivo yaml do pod.
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: mysecret
key: tomcat-pass
Como volume
spec:
volumes:
- name: "secretstest"
secret:
secretName: tomcat-pass
containers:
- image: tomcat:7.0
name: awebserver
volumeMounts:
- mountPath: "/tmp/mysec"
name: "secretstest"
Configuração secreta como variável de ambiente
apiVersion: v1
kind: ReplicationController
metadata:
name: appname
spec:
replicas: replica_count
template:
metadata:
name: appname
spec:
nodeSelector:
resource-group:
containers:
- name: appname
image:
imagePullPolicy: Always
ports:
- containerPort: 3000
env: -----------------------------> 1
- name: ENV
valueFrom:
configMapKeyRef:
name: appname
key: tomcat-secrets
No código acima, sob o env definição, estamos usando segredos como variável de ambiente no controlador de replicação.
Segredos como montagem de volume
apiVersion: v1
kind: pod
metadata:
name: appname
spec:
metadata:
name: appname
spec:
volumes:
- name: "secretstest"
secret:
secretName: tomcat-pass
containers:
- image: tomcat: 8.0
name: awebserver
volumeMounts:
- mountPath: "/tmp/mysec"
name: "secretstest"