Continuamos una serie de art铆culos pr谩cticos sobre c贸mo hacer la vida m谩s f谩cil para los desarrolladores y desarrolladores en su trabajo diario con Kubernetes. Todos ellos se recopilan de nuestra experiencia en la soluci贸n de problemas de los clientes y se mejoran con el tiempo, pero a煤n as铆 no dicen ser ideales: consid茅relos m谩s como ideas y espacios en blanco, sugiera sus soluciones y mejoras en los comentarios.
Esta vez, se considerar谩n dos temas, relacionados condicionalmente con un tema: el acceso del usuario al entorno de desarrollo.
1. 驴C贸mo cerramos los circuitos de desarrollo de usuarios innecesarios?
A menudo nos enfrentamos a la tarea de cerrar todo el circuito de desarrollo (decenas / cientos de aplicaciones) detr谩s de la autenticaci贸n b谩sica o la lista blanca, para que los robots de b煤squeda o solo personas de terceros no puedan llegar all铆.
Por lo general, para limitar el acceso, cada Ingress y aplicaci贸n deben crear
secretos de autenticaci贸n b谩sicos por separado . Administrarlos es muy problem谩tico al escribir con una docena de aplicaciones. Por lo tanto, organizamos el control de acceso centralizado.
Para hacer esto, nginx se cre贸 con una configuraci贸n de este tipo:
location / { satisfy any; auth_basic "Authentication or whitelist!"; auth_basic_user_file /etc/nginx/htpasswd/htpasswd; allow 10.0.0.0/8; allow 175.28.12.2/32; deny all; try_files FAKE_NON_EXISTENT @return200; } location @return200 { return 200 Ok; }
Adem谩s en los Ingresss de la aplicaci贸n, simplemente agregamos la anotaci贸n:
ingress.kubernetes.io/auth-url: "http://dev-auth.dev-auth-infra.svc.cluster.local"
Por lo tanto, al acceder a la aplicaci贸n, la solicitud va al
dev-auth
, que verifica si se ingres贸 la autenticaci贸n b谩sica correcta o si el cliente ingresa a la lista blanca. Si se cumple una de las condiciones, la solicitud se confirma y pasa a la aplicaci贸n.

En el caso de utilizar dicho servicio, un repositorio es suficiente, en el que se almacena una lista de todos los accesos y a trav茅s del cual podemos configurar convenientemente nuestro "centro de autorizaci贸n 煤nico". Su distribuci贸n a nuevas aplicaciones se lleva a cabo mediante la adici贸n elemental de anotaciones.
2. 驴C贸mo proporcionamos acceso a las aplicaciones dentro de Kubernetes en un entorno de desarrollo?
... ya sea Redis, RabbitMQ, PostgreSQL o el desarrollador PHP favorito de Xdebug.Muy a menudo, al traducir aplicaciones a Kubernetes, para garantizar una mejor seguridad, tenemos que bloquear el acceso desde el exterior y por completo. Y luego los desarrolladores que est谩n acostumbrados a "ir a su IDE" a la base de datos o a Xdebug experimentan serias dificultades.
Para resolver este problema, utilizamos una VPN directamente en el cl煤ster de Kubernetes. El esquema general se ve de modo que cuando se conecta a un servidor VPN que se ejecuta en K8, en el archivo de configuraci贸n de OpenVPN empujamos la direcci贸n del servidor DNS, que tambi茅n vive en K8. OpenVPN configura la VPN de tal manera que cuando solicita un recurso dentro de Kubernetes, primero va al servidor DNS de Kubernetes, por ejemplo, detr谩s de la direcci贸n del servicio
redis.production.svc.cluster.local
. DNS en Kubernetes lo resuelve a 10.244.1.15 y las solicitudes de esta direcci贸n IP pasan por OpenVPN directamente al cl煤ster de Kubernetes.
Durante el funcionamiento de esta soluci贸n, logramos expandirla repetidamente. En particular:
- Como no encontramos un panel de administraci贸n simple y adecuado (para nuestro caso) para contabilizar el acceso a la VPN , tuvimos que crear nuestra propia interfaz simple: el gr谩fico oficial proporciona solo la opci贸n de ejecutar comandos de consola para emitir certificados.
El panel de administraci贸n resultante (ver tambi茅n en Docker Hub ) se ve muy asc茅tico:

Puede crear nuevos usuarios o revocar certificados antiguos:

Tambi茅n puede ver la configuraci贸n de este cliente:

- Agregamos autorizaci贸n en VPN basada en usuarios en GitLab , donde se verifica la contrase帽a y si el usuario est谩 activo en GitLab. Esto es para los casos en que el cliente desea administrar usuarios que pueden conectarse a la VPN de desarrollo solo sobre la base de GitLab, y sin el uso de administradores adicionales; en cierto sentido, resulta "SSO para los pobres". Como base, tomaron el cuadro ya mencionado.
Para hacer esto, escribimos un script de Python que, al conectar un usuario a OpenVPN, usando el nombre de usuario y la contrase帽a, compara el hash en la base de datos de GitLab y verifica su estado (si est谩 activo).

Aqu铆 est谩 el script en s铆:
Y en la configuraci贸n de OpenVPN solo especifique lo siguiente:
auth-user-pass-verify /etc/openvpn/auth-user.py via-env
script-security 3
client-cert-not-required
Por lo tanto, si un empleado dejaba al cliente, simplemente lo desactivaban en GitLab, despu茅s de lo cual no podr铆a conectarse a la VPN.
En lugar de una conclusi贸n
Continuando con una serie de art铆culos con recetas pr谩cticas de Flant para la operaci贸n de Kubernetes, cubrir茅 temas como resaltar nodos individuales para tareas espec铆ficas (驴por qu茅 y c贸mo?) Y configurar servicios como php-fpm / gunicorn que se ejecutan en contenedores para cargas pesadas. 隆Suscr铆bete a nuestro blog para no perderte las actualizaciones!
PS
Otros del ciclo de consejos y trucos de K8s:
Lea tambi茅n en nuestro blog: