es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Hacer que Airflow cargue todas las claves de un secreto de Kubernetes sin especificarlas.

Estoy utilizando Google Cloud Composer 1.17.7 con Airflow 2.1.4.
Principalmente, estoy siguiendo estos documentos.

He creado un secreto de Kubernetes que se ve así:

apiVersion: v1
data:
  KEY1: valorcodificadoenbase64-1
  KEY2: valorcodificadoenbase64-2
  KEY3: valorcodificadoenbase64-3
  ...
  KEYN: valorcodificadoenbase64-N
kind: Secret
metadata:
  creationTimestamp: "2021-12-13T12:58:03Z"
  name: airflow-secrets
  namespace: default
  resourceVersion: ""
  uid: ""
type: Opaque

Para cargar este secreto y usarlo en Airflow como variables de entorno, parece que tengo que crear un objeto airflow.kubernetes.secret.Secret para cada clave incluida en el secreto de K8s.

secret_env1 = Secret(
    deploy_type='env',
    deploy_target='KEY1',
    secret='airflow-secrets',
    key='KEY1')
secret_env2 = Secret(
    deploy_type='env',
    deploy_target='KEY2',
    secret='airflow-secrets',
    key='KEY2')
...
secret_envN = Secret(
    deploy_type='env',
    deploy_target='KEYN',
    secret='airflow-secrets',
    key='KEYN')

Esto se vuelve complicado cuando hay muchas claves que se deben utilizar.
Se me ocurrió una solución con un bucle for que aún me obliga a especificar todas las claves necesarias:

secret_envvars = [
    'KEY1',
    'KEY2',
    'KEY3',
    ...
    'KEYN'
]
secret_envs = [
    Secret(
        deploy_type='env',
        secret='airflow-secrets',
        deploy_target=var,
        key=var,
    ) for var in secret_envvars]

Me pregunto si hay alguna forma de cargar todas las claves de un secreto de K8s en Airflow sin la necesidad de especificar explícitamente las claves. Por ejemplo, sería útil poder acceder programáticamente a la lista de todas las claves incluidas en el secreto de K8s (algo como k8sSecret.keys()).

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en tecnología de la información especializado en kubernetes-secrets y Airflow 2.x, entiendo su preocupación acerca del proceso manual de especificar cada clave al crear airflow.kubernetes.secret.Secret para cargar el secreto de Kubernetes en Airflow. Actualmente, en Airflow, no hay una forma directa de acceder a la lista de claves incluidas en el secreto de Kubernetes. Sin embargo, existen algunas soluciones alternativas para abordar este problema:

    Un enfoque es utilizar la API de Kubernetes para obtener directamente la lista de claves del secreto de Kubernetes. Este enfoque requiere alguna configuración adicional en el entorno de Airflow, incluyendo la biblioteca de cliente de Python de Kubernetes y las credenciales de ServiceAccount con permisos para acceder a los secretos de Kubernetes. Puede crear una función de Python que utilice la API de Kubernetes para obtener dinámicamente las claves del secreto y crear objetos airflow.kubernetes.secret.Secret para cada clave.

    Otro enfoque es utilizar el plugin kubernetes-secrets en Airflow, el cual proporciona una forma más conveniente de cargar los secretos de Kubernetes en el entorno de Airflow. El plugin kubernetes-secrets le permite cargar un secreto de Kubernetes como un diccionario y utilizarlo directamente en sus DAGs. Este enfoque no requiere que defina airflow.kubernetes.secret.Secret para cada clave explícitamente. Sin embargo, es posible que aún necesite transformar los datos del secreto en las variables de entorno que requiere su DAG.

    En conclusión, aunque no hay una forma directa de acceder a la lista de claves incluidas en el secreto de Kubernetes en Airflow, los dos enfoques mencionados anteriormente pueden ayudarlo a solucionar este problema. Además, también puede considerar el uso de herramientas de terceros diseñadas para administrar secretos de Kubernetes, como HashiCorp Vault o Kubernetes External Secrets.

Comments are closed.