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.

Cómo usar una cadena de conexión dinámica para POD en el archivo secreto de Kubernetes.

Soy nuevo en k8s. Agradecería cualquier sugerencia.
Tenemos varios espacios de nombres de k8s en AKS.

Estoy trabajando en la creación de un cronjob que ejecutará un script en múltiples pods de PostgreSQL en varios espacios de nombres. He creado un archivo de secretos para ejecutar de forma segura un cronjob en un único POD objetivo en el espacio de nombres predeterminado.
Aquí está mi archivo de secretos:

apiVersion: v1
kind: Secret
metadata:
    name: db-secrets
type: Opaque
data:
  "POSTGRES_PASSWORD": <encoded_password>
  "POSTGRES_USER": <encoded_username>
stringData:
  "DATABASE_HOST": postgres-db-postgresql-0.postgres-db-postgresql-headless.default.svc.cluster.local

¿Alguien puede sugerirme:
1) Cómo utilizar la cadena dinámica del DNS del POD objetivo de PostgreSQL en la sección DATABASE_HOST de mi archivo de secretos, para que después de implementarlo en el clúster k8s, cada cronjob obtenga dinámicamente el DNS del POD objetivo y se conecte al POD en su propio espacio de nombres?
2) ¿Es posible utilizar variables para obtener dinámicamente el DNS del POD?

Leí en algún lugar que puedo usar HELM, sin embargo, todavía no he tenido tiempo de trabajar con Helm.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    ¡Hola! Aquí tienes algunas sugerencias para ayudarte con la creación de tu cronjob:

    1. Para obtener de manera dinámica el DNS del POD de PostgreSQL objetivo en tu archivo de secretos, puedes utilizar un ConfigMap para almacenar la información del DNS de cada namespace. Luego puedes montar el ConfigMap en tu archivo YAML del cronjob y utilizar la variable de entorno para hacer referencia al DNS. Aquí tienes un ejemplo:

    Crea un archivo de ConfigMap:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: db-dns
    data:
      namespace1: postgres-db-postgresql-0.postgres-db-postgresql-headless.namespace1.svc.cluster.local
      namespace2: postgres-db-postgresql-0.postgres-db-postgresql-headless.namespace2.svc.cluster.local
    

    En tu archivo YAML del cronjob, agrega el siguiente volumen y variables de entorno:

    apiVersion: batch/v1beta1
    kind: CronJob
    metadata:
      name: my-cronjob
    spec:
      schedule: "*/5 * * * *"
      jobTemplate:
        spec:
          template:
            spec:
              volumes:
                - name: db-dns
                  configMap:
                    name: db-dns
              containers:
                - name: my-container
                  image: my-image
                  env:
                    - name: DATABASE_HOST
                      valueFrom:
                        configMapKeyRef:
                          name: db-dns
                          key: namespace1
                  command: ["/bin/sh", "-c", "echo hello"]
                  volumeMounts:
                    - name: db-dns
                      mountPath: /etc/db-dns
    

    En la sección DATABASE_HOST de tu archivo de secretos, puedes hacer referencia a la variable de entorno de esta manera:

    stringData:
      "DATABASE_HOST": $(DATABASE_HOST)
    
    1. Sí, puedes utilizar variables para obtener de manera dinámica el DNS del POD. El ejemplo en la sugerencia 1 utiliza una variable de entorno para hacer referencia a los datos del ConfigMap. También puedes utilizar Helm u otras herramientas para almacenar y hacer referencia a variables.

    ¡Espero que esto te ayude! Hazme saber si tienes alguna otra pregunta.

Comments are closed.