Quantcast
Channel: Planeta Código
Viewing all articles
Browse latest Browse all 2699

Una sinfonía en C#: Ejecutar Wordpress + MySQL en Kubernetes paso a paso 3, configuración

$
0
0

En el post anterior Agregamos Persisten Volumens y Persisten Volume Claims para tener un persistencia más allá del ciclo de vida de los Pods, en este Post vamos a mover la configuración a ConfigMaps y Secrets.

Crear config maps

El siguiente paso es pasar las environment variables a configuración, de modo de poder modificarlas y que sea escalable. De momento no vamos a crear secrets, solo pasar los valores a un configmap

Primero creamos el configmap, de momento con los secrets y el mismo para ambas aplicaciones

apiVersion:v1kind:ConfigMapmetadata:labels:app:my-wordpressname:mywordpress-configdata:MYSQL_RANDOM_ROOT_PASSWORD:'1'MYSQL_DATABASE:passwordMYSQL_USER:readWriteMYSQL_PASSWORD:passwordMYSQL_HOST:mysql

Y modificamos los deployment para cargar sus valores en las variables de entorno

apiVersion:apps/v1kind:Deploymentmetadata:name:my-dblabels:app:my-dbspec:replicas:1selector:matchLabels:app:my-dbtemplate:metadata:labels:app:my-dbspec:containers:-name:my-dbimage:mysql:5.7ports:-containerPort:80volumeMounts:-mountPath:/var/lib/mysqlname:my-db-pvenv:-name:MYSQL_RANDOM_ROOT_PASSWORDvalueFrom:configMapKeyRef:name:mywordpress-configkey:MYSQL_RANDOM_ROOT_PASSWORD-name:MYSQL_DATABASEvalueFrom:configMapKeyRef:name:mywordpress-configkey:MYSQL_DATABASE-name:MYSQL_USERvalueFrom:configMapKeyRef:name:mywordpress-configkey:MYSQL_USER-name:MYSQL_PASSWORDvalueFrom:configMapKeyRef:name:mywordpress-configkey:MYSQL_PASSWORDvolumes:-name:my-db-pvpersistentVolumeClaim:claimName:mysql-pvc
apiVersion:apps/v1kind:Deploymentmetadata:name:my-wordpresslabels:app:my-wordpressspec:replicas:1selector:matchLabels:app:my-wordpresstemplate:metadata:labels:app:my-wordpressspec:containers:-name:my-wordpressimage:wordpress:latestvolumeMounts:-name:my-wp-pvmountPath:/var/www/htmlports:-containerPort:80env:-name:WORDPRESS_DB_PASSWORDvalueFrom:configMapKeyRef:name:mywordpress-configkey:MYSQL_PASSWORD-name:WORDPRESS_DB_USERvalueFrom:configMapKeyRef:name:mywordpress-configkey:MYSQL_USER-name:WORDPRESS_DB_NAMEvalueFrom:configMapKeyRef:name:mywordpress-configkey:MYSQL_DATABASE-name:WORDPRESS_DB_HOSTvalueFrom:configMapKeyRef:name:mywordpress-configkey:MYSQL_HOSTvolumes:-name:my-wp-pvpersistentVolumeClaim:claimName:mywordpress-pvc

Proteger secrets

Los secrets o passwords de la base de datos en el yaml del config map no son una buena idea, podemos hacer dos cosas:

  • Crear dos objetos secret en yaml
  • Crear los secrets por línea de comandos

Cada uno tiene sus ventajas y desventajas.

Crear dos objectos secret Ya que los secrets se guardan en base64 primero hay que encodearlos

apiVersion:v1kind:Secretmetadata:name:mysecretstype:Opaquedata:MYSQL_PASSWORD:bXlwYXNzd29yZA==

Modificamos el configmap para quitar el password y modificamos los deployments para leer el secret

apiVersion:v1kind:ConfigMapmetadata:labels:app:my-wordpressname:mywordpress-configdata:MYSQL_DATABASE:passwordMYSQL_USER:readWriteMYSQL_HOST:mysqlMYSQL_RANDOM_ROOT_PASSWORD:'1'
apiVersion:apps/v1kind:Deploymentmetadata:name:my-dblabels:app:my-dbspec:replicas:1selector:matchLabels:app:my-dbtemplate:metadata:labels:app:my-dbspec:containers:-name:my-dbimage:mysql:5.7ports:-containerPort:80volumeMounts:-mountPath:/var/lib/mysqlname:my-db-pvenv:-name:MYSQL_RANDOM_ROOT_PASSWORDvalueFrom:configMapKeyRef:name:mywordpress-configkey:MYSQL_RANDOM_ROOT_PASSWORD-name:MYSQL_DATABASEvalueFrom:configMapKeyRef:name:mywordpress-configkey:MYSQL_DATABASE-name:MYSQL_USERvalueFrom:configMapKeyRef:name:mywordpress-configkey:MYSQL_USER-name:MYSQL_PASSWORDvalueFrom:secretKeyRef:name:mysecretskey:MYSQL_PASSWORDvolumes:-name:my-db-pvpersistentVolumeClaim:claimName:mysql-pvc-name:my-db-configconfigMap:name:mywordpress-config
apiVersion:apps/v1kind:Deploymentmetadata:name:my-wordpresslabels:app:my-wordpressspec:replicas:1selector:matchLabels:app:my-wordpresstemplate:metadata:labels:app:my-wordpressspec:containers:-name:my-wordpressimage:wordpress:latestvolumeMounts:-name:my-wp-pvmountPath:/var/www/htmlports:-containerPort:80env:-name:WORDPRESS_DB_PASSWORDvalueFrom:secretKeyRef:name:mysecretskey:MYSQL_PASSWORD-name:WORDPRESS_DB_USERvalueFrom:configMapKeyRef:name:mywordpress-configkey:MYSQL_USER-name:WORDPRESS_DB_NAMEvalueFrom:configMapKeyRef:name:mywordpress-configkey:MYSQL_DATABASE-name:WORDPRESS_DB_HOSTvalueFrom:configMapKeyRef:name:mywordpress-configkey:MYSQL_HOSTvolumes:-name:my-wp-pvpersistentVolumeClaim:claimName:mywordpress-pvc

Genial, el último paso sería para no tener el secret en un archivo (aunque se puede restringir su acceso) es crearlo por línea de comandos Borramos el existente y lo creamos por línea de comandos

kubectldeletesecretmysecretskubectlcreatesecretgenericmysecrets--from-literal=MYSQL_PASSWORD='bXlwYXNzd29yZA=='kubectlgetsecretmysecrets-oyaml

Alternativamente podemos crearlo por línea de comandos a partir de un file (por ejemplo si es un texto largo o un certificado, etc.)

kubectlcreatesecretgenericdb-user-pass--from-file=username=./username.txt--from-file=password=./password.txt

Nos leemos.


Viewing all articles
Browse latest Browse all 2699