Descripción general

El Controlador de Admisión de Datadog es un componente del Agente de Clúster de Datadog. El principal beneficio del Controlador de Admisión es simplificar la configuración de su Pod de aplicación. Para ello, tiene dos funcionalidades principales:

  • Inyectar variables de entorno (DD_AGENT_HOST, DD_TRACE_AGENT_URL, DD_ENTITY_ID y DD_EXTERNAL_ENV) para configurar DogStatsD y los SDK de Datadog en los contenedores de la aplicación del usuario.
  • Inyectar etiquetas estándar de Datadog (env, service, version) desde las etiquetas de la aplicación en las variables de entorno del contenedor.

El Controlador de Admisión de Datadog es de tipo MutatingAdmissionWebhook. Para más detalles sobre los controladores de admisión, consulte la guía de Kubernetes sobre controladores de admisión.

Requisitos

  • Agente de Clúster de Datadog v7.40+

Configuración

El Datadog Operator habilita el Controlador de Admisión de Datadog por defecto. No se necesita configuración adicional para habilitar el Controlador de Admisión.

Si deshabilitó el Controlador de Admisión, puede volver a habilitarlo configurando el parámetro features.admissionController.enabled a true en su configuración de DatadogAgent:

datadog-agent.yaml

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

A partir de la versión v2.35.0 del gráfico de Helm, el Controlador de Admisión de Datadog está habilitado por defecto. No se necesita configuración adicional para habilitar el Controlador de Admisión.

Para habilitar el Controlador de Admisión para el gráfico de Helm v2.34.6 y versiones anteriores, configure el parámetro clusterAgent.admissionController.enabled a true:

datadog-values.yaml

#(...)
clusterAgent:
  #(...)
  ## @param admissionController - object - required
  ## Enable the admissionController to automatically inject APM and
  ## DogStatsD config and standard tags (env, service, version) into
  ## your pods
  #
  admissionController:
    enabled: true

    ## @param mutateUnlabelled - boolean - optional
    ## Enable injecting config without having the pod label:
    ## admission.datadoghq.com/enabled="true"
    #
    mutateUnlabelled: false

Para habilitar el Controlador de Admisión sin usar Helm o el operador de Datadog, agregue lo siguiente a su configuración:

Primero, descargue el manifiesto de permisos RBAC del Agente de Clúster y agregue lo siguiente bajo rules:

cluster-agent-rbac.yaml

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

Agregue 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:
  - port: 443
    targetPort: 8000

Agregue variables de entorno al despliegue del Agente de Clúster que habiliten el Controlador de Admisión:

cluster-agent-deployment.yaml

- name: DD_ADMISSION_CONTROLLER_ENABLED
  value: "true"
- name: DD_ADMISSION_CONTROLLER_SERVICE_NAME
  value: "datadog-cluster-agent-admission-controller"

# Uncomment this to configure Datadog SDKs automatically (see below)
# - name: DD_ADMISSION_CONTROLLER_MUTATE_UNLABELLED
#   value: "true"

Finalmente, ejecute 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 biblioteca de instrumentación APM

Puede configurar el Agente de Clúster (versión 7.39 y superior) para inyectar bibliotecas de instrumentación utilizando Instrumentación de Paso Único. Lee Instrumentación APM de Paso Único para más información.

Si no desea utilizar la Instrumentación de Paso Único, se puede usar el Controlador de Admisión de Datadog para inyectar SDKs de Datadog directamente como una alternativa manual a nivel de pod. Lee Inyección de SDK Local para más información.

Inyección de variables de entorno APM y DogStatsD

Para configurar clientes de DogStatsD u otras bibliotecas APM que no soportan inyección de bibliotecas, inyecte las variables de entorno DD_AGENT_HOST y DD_ENTITY_ID haciendo una de las siguientes acciones:

  • Agregue la etiqueta admission.datadoghq.com/enabled: "true" a su Pod.
  • Configure el controlador de admisión del Agente de Clúster estableciendo mutateUnlabelled (o DD_ADMISSION_CONTROLLER_MUTATE_UNLABELLED, dependiendo de su método de configuración) a true.

Agregar una configuración de Agente mutateUnlabelled: true en el chart de Helm hace que el Agente de Clúster intente interceptar cada Pod sin etiquetar.

Para evitar que los Pods reciban variables de entorno, agregue la etiqueta admission.datadoghq.com/enabled: "false". Esto funciona incluso si establece mutateUnlabelled: true.

Si mutateUnlabelled está establecido en false, la etiqueta del Pod debe establecerse en 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_ENV o DD_SERVICE si ya existen.

Cuando estas variables de entorno no están configuradas, el Controlador de Admisión utiliza el valor de las etiquetas estándar en el siguiente orden (de mayor a menor):

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

Configurar el modo de comunicación de APM y DogStatsD

A partir de la versión 1.20.0 del Agente de Clúster de Datadog, el Controlador de Admisión de Datadog se puede configurar para inyectar diferentes modos de comunicación entre la aplicación y el agente de Datadog.

Esta función se puede configurar estableciendo admission_controller.inject_config.mode o definiendo un modo específico del Pod utilizando la etiqueta del Pod admission.datadoghq.com/config.mode.

A partir de la versión 3.22.0 del gráfico de Helm y la versión 1.1.0 del Operador de Datadog, el modo de comunicación se establece automáticamente en socket si se habilita el socket de APM o el socket de DSD.

Opciones posibles:

ModoDescripción
hostip (Predeterminado)Inyectar la IP del host en la variable de entorno DD_AGENT_HOST
serviceInyectar el nombre DNS del servicio local de Datadog en la variable de entorno DD_AGENT_HOST (disponible con Kubernetes v1.22+)
socketInyectar la ruta del socket de dominio Unix en la variable de entorno DD_TRACE_AGENT_URL y la definición del volumen para acceder a la ruta correspondiente. Inyectar la URL que se utilizará para conectar el Agente de Datadog para métricas de DogStatsD en DD_DOGSTATSD_URL.
csiInyectar las rutas del socket de dominio Unix en las variables de entorno DD_TRACE_AGENT_URL y DD_DOGSTATSD_URL y la definición del volumen CSI de Datadog para acceder a las rutas correspondientes. Este modo está disponible para el Agente de Clúster de Datadog v7.67+.

Nota: El modo específico del pod tiene prioridad sobre el modo global definido a nivel del Controlador de Admisión.

Solución de Problemas

Vea Solución de Problemas del Controlador de Admisión.

Lectura Adicional