Kubernetes. Configurando nuestras aplicaciones: variables de entornos, ConfigMap, Secrets
Configurando nuestras aplicaciones con variables de entorno
Para configurar las aplicaciones que vamos a desplegar usamos variables de entorno, por ejemplo podemos ver las variables de entorno que podemos definir para configurar la imagen docker de MariaDB.
Podemos definir un Deployment
que defina un contenedor configurado por medio de variables de entorno, mariadb-deployment.yaml
:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: mariadb-deployment
labels:
app: mariadb
type: database
spec:
replicas: 1
template:
metadata:
labels:
app: mariadb
type: database
spec:
containers:
- name: mariadb
image: mariadb
ports:
- containerPort: 3306
name: db-port
env:
- name: MYSQL_ROOT_PASSWORD
value: my-password
Y creamos el despliegue:
kubectl create -f mariadb-deployment.yaml
deployment.apps "mariadb-deployment" created
O directamente ejecutando:
kubectl run mariadb --image=mariadb --env MYSQL_ROOT_PASSWORD=my-password
Veamos el pod creado:
kubectl get pods -l app=mariadb
NAME READY STATUS RESTARTS AGE
mariadb-deployment-fc75f956-f5zlt 1/1 Running 0 15s
Y probamos si podemos acceder, introduciendo la contraseña configurada:
kubectl exec -it mariadb-deployment-fc75f956-f5zlt -- mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.2.15-MariaDB-10.2.15+maria~jessie mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
Configurando nuestras aplicaciones: ConfigMaps
ConfigMap
te permite definir un diccionario (clave,valor) para guardar información que puedes utilizar para configurar una aplicación.
Al crear un ConfigMap
los valores se pueden indicar desde un directorio, un fichero o un literal.
kubectl create cm mariadb --from-literal=root_password=my-password \
--from-literal=mysql_usuario=usuario \
--from-literal=mysql_password=password-user \
--from-literal=basededatos=test
configmap "mariadb" created
kubectl get cm
NAME DATA AGE
mariadb 4 15s
kubectl describe cm mariadb
Name: mariadb
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
mysql_usuario:
----
usuario
root_password:
----
my-password
basededatos:
----
test
mysql_password:
----
password-user
Events: <none>
Ahora podemos configurar el fichero yaml que define el despliegue, mariadb-deployment-configmap.yaml
:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: mariadb-deploy-cm
labels:
app: mariadb
type: database
spec:
replicas: 1
template:
metadata:
labels:
app: mariadb
type: database
spec:
containers:
- name: mariadb
image: mariadb
ports:
- containerPort: 3306
name: db-port
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
configMapKeyRef:
name: mariadb
key: root_password
- name: MYSQL_USER
valueFrom:
configMapKeyRef:
name: mariadb
key: mysql_usuario
- name: MYSQL_PASSWORD
valueFrom:
configMapKeyRef:
name: mariadb
key: mysql_password
- name: MYSQL_DATABASE
valueFrom:
configMapKeyRef:
name: mariadb
key: basededatos
Creamos el despliegue y probamos el acceso:
kubectl create -f mariadb-deployment-configmap.yaml
deployment.apps "mariadb-deploy-cm" created
kubectl get pods -l app=mariadb
NAME READY STATUS RESTARTS AGE
mariadb-deploy-cm-57f7b9c7d7-ll6pv 1/1 Running 0 15s
kubectl exec -it mariadb-deploy-cm-57f7b9c7d7-ll6pv -- mysql -u usuario -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.2.15-MariaDB-10.2.15+maria~jessie mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| test |
+--------------------+
2 rows in set (0.00 sec)
Configurando nuestras aplicaciones: Secrets
Los Secrets
nos permiten guardar información sensible que será codificada. Por ejemplo,nos permite guarda contraseñas, claves ssh, …
Al crear un Secret
los valores se pueden indicar desde un directorio, un fichero o un literal.
kubectl create secret generic mariadb --from-literal=password=root
secret "mariadb" created
kubectl get secret
NAME TYPE DATA AGE
...
mariadb Opaque 1 15s
kubectl describe secret mariadb
Name: mariadb
Namespace: default
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
password: 4 bytes
Los Secrets
no son seguro, no están encriptados.
kubectl get secret mariadb -o yaml
apiVersion: v1
data:
password: cm9vdA==
kind: Secret
metadata:
creationTimestamp: 2018-05-23T18:22:27Z
name: mariadb
namespace: default
resourceVersion: "162405"
selfLink: /api/v1/namespaces/default/secrets/mariadb
uid: 3fa5e1ad-5eb6-11e8-ab66-fa163e99cb75
type: Opaque
echo 'cm9vdA==' | base64 --decode
root
Podemos definir un Deployment
que defina un contenedor configurado por medio de variables de entorno, mariadb-deployment-secret.yaml
:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: mariadb-deploy-secret
labels:
app: mariadb
type: database
spec:
replicas: 1
template:
metadata:
labels:
app: mariadb
type: database
spec:
containers:
- name: mariadb
image: mariadb
ports:
- containerPort: 3306
name: db-port
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mariadb
key: password
Creamos el despliegue y probamos el acceso:
kubectl create -f mariadb-deployment-secret.yaml
deployment.apps "mariadb-deploy-secret" created
kubectl get pods -l app=mariadb
NAME READY STATUS RESTARTS AGE
mariadb-deploy-secret-f946dddfd-kkmlb 1/1 Running 0 15s
kubectl exec -it mariadb-deploy-secret-f946dddfd-kkmlb -- mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.2.15-MariaDB-10.2.15+maria~jessie mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
La empresa Bitnami ha desarrollado otro recurso de Kubernete llamado SealedSecrets
que permite que un controlador gestione la encriptación de los datos sensibles.
Índice de entradas sobre Kubernetes
Este artículo corresponde a una serie de entradas donde he hablado sobre Kubernetes:
- Instalación de kubernetes con kubeadm
- Desplegando una aplicación en Kubernetes
- Recursos de Kubernetes: Pods
- Recursos de Kubernetes: ReplicaSet
- Recursos de Kubernetes: Deployment
- Kubernetes: Desplegando la aplicación Mediawiki
- Kubernetes: Desplegando la aplicación GuestBook (Parte 1)
- Recursos de Kubernetes: Services
- El servicio DNS en Kubernetes
- Kubernetes: Desplegando la aplicación GuestBook (Parte 2)
- Kubernetes: Desplegando la aplicación LetsChat
- Recursos de Kubernetes: Ingress
- Accediendo a nuestras aplicaciones Kubernetes con Ingress
- Recursos de Kubernetes: Namespaces
- Kubernetes. Configurando nuestras aplicaciones: variables de entornos, ConfigMap, Secrets
- Kubernetes. Desplegando WordPress con MariaDB
- Almacenamiento en Kubernetes. PersistentVolumen. PersistentVolumenClaims
- Kubernetes. Desplegando WordPress con MariaDB con almacenamiento persistente
- Integración de Kubernetes con OpenStack
Leave a Comment
Your email address will not be published. Required fields are marked *