Kubernetes: secretos
Los secretos se pueden definir como objetos de Kubernetes que se utilizan para almacenar datos confidenciales como el nombre de usuario y las contraseñas con cifrado.
Hay varias formas de crear secretos en Kubernetes.
- Creando a partir de archivos txt.
- Creando desde el archivo yaml.
Crear desde archivo de texto
Para crear secretos a partir de un archivo de texto, como el nombre de usuario y la contraseña, primero debemos almacenarlos en un archivo txt y usar el siguiente comando.
$ kubectl create secret generic tomcat-passwd –-from-file = ./username.txt –fromfile = ./.
password.txt
Crear desde archivo Yaml
apiVersion: v1
kind: Secret
metadata:
name: tomcat-pass
type: Opaque
data:
password: <User Password>
username: <User Name>
Creando el secreto
$ kubectl create –f Secret.yaml
secrets/tomcat-pass
Usando secretos
Una vez que hemos creado los secretos, se puede consumir en un pod o en el controlador de replicación como:
- Variable ambiental
- Volume
Como variable de entorno
Para usar el secreto como variable de entorno, usaremos env en la sección de especificaciones del archivo pod yaml.
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: mysecret
key: tomcat-pass
Como volumen
spec:
volumes:
- name: "secretstest"
secret:
secretName: tomcat-pass
containers:
- image: tomcat:7.0
name: awebserver
volumeMounts:
- mountPath: "/tmp/mysec"
name: "secretstest"
Configuración secreta como variable de entorno
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
En el código anterior, bajo el env definición, estamos usando secretos como variable de entorno en el controlador de replicación.
Secretos como montaje de volumen
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"