Información general

El controlador de admisión de Datadog es un componente de Datadog Cluster Agent. El principal beneficio del controlador de admisión es simplificar la configuración de tu pod de aplicación. Para ello, cuenta con dos funcionalidades principales:

  • Inyectar las variables de entorno (DD_AGENT_HOST, DD_TRACE_AGENT_URL y DD_ENTITY_ID) para configurar las bibliotecas DogStatsD y del rastreador de APM en los contenedores de aplicaciones del usuario.
  • Inyectar las etiquetas (tags) estándar de Datadog (env, service y version) procedentes de las etiquetas de la aplicación en las variables de entorno del contenedor .

El controlador de admisión de Datadog es del tipo MutatingAdmissionWebhook. Para obtener más detalles sobre los controladores de admisión, consulta la guía de Kubernetes sobre controladores de admisión.

Requisitos

  • Datadog clúster Agent v7.40 o posterior

Configuración

Para habilitar el controlador de admisión para Operator de Datadog, debes establecer el parámetro features.admissionController.enabled como true en tu configuración DatadogAgent:

apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
  name: datadog
spec:
  #(...)
  features:
    admissionController:
      enabled: true
      mutateUnlabelled: false

A partir de Helm charts v2.35.0, el controlador de admisión de Datadog está activado de forma predeterminada. No es necesaria ninguna configuración adicional para activarlo.

Para activar el controlador de admisión para Helm charts v2.34.6 o anterior, establece el parámetro clusterAgent.admissionController.enabled como true :

values.yaml

#(...)
clusterAgent:
  #(...)
  ## @param admissionController - objet - nécessaire
  ## Habilita el controlador de admisión para inyectar automáticamente APM y
  ## la configuración DogStatsD y etiquetas estándar (env, servicio, versión) en
  ## tus pods
  #
  admissionController:
    enabled: true

    ## @param mutateUnlabelled - booleano - opcional
    ## Habilita la configuración de inyección sin tener la etiqueta del pod:
    ## admission.datadoghq.com/enabled="true"
    #
    mutateUnlabelled: false

Para habilitar el controlador de admisión sin usar Helm o Operator de Datadog, añade lo siguiente a tu configuración:

En primer lugar, descarga el manifiesto con los permisos de configuración del control de acceso basado en roles (RBAC) de Cluster Agent y añade lo siguiente en rules:

cluster-agent-rbac.yaml

- apiGroups:
  - admissionregistration.k8s.io
  recursos:
  - mutatingwebhookconfigurations
  verbs: ["get", "list", "watch", "update", "create"]
- apiGroups: [""]
  recursos: ["secrets"]
  verbos: ["get", "list", "watch", "update", "create"]
- apiGroups: ["batch"]
  recursos: ["jobs", "cronjobs"]
  verbs: ["get"]
- apiGroups: ["apps"]
  recursos: ["statefulsets", "replicasets", "deployments"]
  verbos: ["get"]

Añade lo siguiente al final de agent-services.yaml:

agent-services.yaml

apiVersion: v1
kind: Service
metadata:
  name: datadog-cluster-agent-admission-controller
  labels:
    app: "datadog"
    app.kubernetes.io/name: "datadog"
spec:
  selector:
    app: datadog-cluster-agent
  ports:
  - puerto: 443
    targetPort: 8000

Añade variables de entorno al despliegue de Cluster Agent que habilitan el controlador de admisión:

cluster-agent-deployment.yaml

- nombre: DD_ADMISSION_CONTROLLER_ENABLED
  valor: "true"
- nombre: DD_ADMISSION_CONTROLLER_SERVICE_NAME
  valor: "datadog-cluster-agent-admission-controller"

# Deselecciona esto para configurar los rastreadores APM automáticamente (ver más abajo).
# - nombre: DD_ADMISSION_CONTROLLER_MUTATE_UNLABELLED
# valor: "true"

Por último, ejecuta los siguientes comandos:

  • kubectl apply -f cluster-agent-rbac.yaml
  • kubectl apply -f agent-services.yaml
  • kubectl apply -f cluster-agent-deployment.yaml

Inyección de la biblioteca de instrumentación

Puedes configurar el Cluster Agent (v7.39 o posterior) para inyectar bibliotecas de instrumentación. Consulta Inyección de bibliotecas de instrumentación con el controlador de admisión para obtener más información.

APM y DogStatsD

Para configurar clientes DogStatsD u otras bibliotecas APM que no admitan la inyección de bibliotecas, inyecta las variables de entorno DD_AGENT_HOST y DD_ENTITY_ID realizando una de las siguientes acciones:

  • Añade la etiqueta admission.datadoghq.com/enabled: "true" a tu pod.
  • Configura el controlador de admisión del Cluster Agent estableciendo mutateUnlabelled (o DD_ADMISSION_CONTROLLER_MUTATE_UNLABELLED, dependiendo de tu método de configuración), como true.

Añadir una configuración del Agent mutateUnlabelled: true en el Helm chart hace que el Cluster Agent intente interceptar todos los pods sin etiquetar.

Para evitar que los pods reciban variables de entorno, añade la etiqueta admission.datadoghq.com/enabled: "false" . Esto funciona incluso si configuras el parámetro mutateUnlabelled: true.

Si mutateUnlabelled está configurado como false, la etiqueta del pod debe configurarse como admission.datadoghq.com/enabled: "true".

Opciones posibles:

mutateUnlabelledEtiqueta del podInyección
trueSin etiqueta
trueadmission.datadoghq.com/enabled=true
trueadmission.datadoghq.com/enabled=falseNo
falseSin etiquetaNo
falseadmission.datadoghq.com/enabled=true
falseadmission.datadoghq.com/enabled=falseNo

Orden de prioridad

El controlador de admisión de Datadog no inyecta las variables de entorno DD_VERSION, DD_ENVo DD_SERVICE si ya existen.

Cuando no se han definido estas variables de entorno, el controlador de admisión usa el valor de las etiquetas estándar en el siguiente orden (primero la más alta):

  • Etiquetas en el pod
  • Etiquetas en ownerReference (ReplicaSets, DaemonSets, Deployments, etc.)

Configurar el modo de comunicación entre APM y DogstatsD

A partir de Datadog Cluster Agent v1.20.0, el controlador de admisión de Datadog puede ser configurado para inyectar diferentes modos de comunicación entre la aplicación y el Datadog Agent.

Esta función puede configurarse mediante el parámetro admission_controller.inject_config.mode, o definiendo un modo específico de pod mediante el uso de la etiqueta de pod admission.datadoghq.com/config.mode.

Opciones posibles:

ModoDescripción
hostip (por defecto) Inyecta la IP de host en la variable de entorno DD_Agent_HOST
serviceInyecta el nombre DNS local de Datadog en la variable de entornoDD_Agent_HOST (disponible con Kubernetes v1.22+).
socketInyecta la ruta Unix Domain Socket en la variable de entorno DD_TRACE_Agent_URL y la definición del volumen para acceder a la ruta correspondiente. Inyecta la URL a utilizar para conectar el Datadog Agent para métricas de DogStatsD en DD_DOGSTATSD_URL.

Nota: El modo específico del pod tiene prioridad sobre el modo global definido en el nivel del controlador de admisión.

Resolución de problemas

Consulta la resolución de problemas del controlador de admisión.

Leer más