Présentation

Le contrôleur d’admission Datadog est un composant de l’Agent de cluster Datadog dont l’intérêt principal vise à simplifier la configuration de vos pods d’application. Pour ce faire, il remplit deux fonctions clés :

  • Injecter des variables d’environnement (‘DD_AGENT_HOST’, ‘DD_TRACE_AGENT_URL’, ‘DD_ENTITY_ID’ et ‘DD_EXTERNAL_ENV’) pour configurer DogStatsD et les bibliothèques de traceur APM dans les conteneurs d’application de l’utilisateur.
  • Il injecte les tags standard Datadog (env, service, version) des étiquettes d’application dans les variables d’environnement de conteneur.

Le contrôleur d’admission Datadog est de type ‘MutatingAdmissionWebhook’. Pour plus de détails sur les contrôleurs d’admission, consultez le guide Kubernetes sur les contrôleurs d’admission.

Prérequis

  • Agent de cluster Datadog v7.40+

Configuration

Le Datadog Operator active le contrôleur d’admission Datadog par défaut. Aucune configuration supplémentaire n’est nécessaire pour activer le contrôleur d’admission.

Si vous avez désactivé le contrôleur d’admission, vous pouvez le réactiver en définissant le paramètre ‘features.admissionController.enabled’ sur ’true’ dans votre configuration ‘DatadogAgent’ :

datadog-agent.yaml

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

À partir de la version v2.35.0 du chart Helm, le contrôleur d’admission Datadog est activé par défaut. Aucune configuration supplémentaire n’est nécessaire pour activer le contrôleur d’admission.

Pour activer le contrôleur d’admission pour le chart Helm v2.34.6 et versions antérieures, définissez le paramètre ‘clusterAgent.admissionController.enabled’ sur ’true’ :

datadog-values.yaml

#(...)
clusterAgent:
  #(...)
  ## @param admissionController - objet - obligatoire
  ## Permet au admissionController d'injecter automatiquement la configuration d'APM et
  ## de DogStatsD, ainsi que les tags standard (env, service, version), dans
  ## vos pods
  #
  admissionController:
    enabled: true

    ## @param mutateUnlabelled - booléen - facultatif
    ## Permet d'injecter la configuration sans l'étiquette de pod :
    ## admission.datadoghq.com/enabled="true"
    #
    mutateUnlabelled: false

Pour activer le contrôleur d’admission sans utiliser Helm ou l’Operator Datadog, ajoutez ce qui suit à votre configuration :

Tout d’abord, téléchargez le manifeste des autorisations RBAC de l’Agent de cluster et ajoutez ce qui suit sous 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"]

Ajoutez ce qui suit en bas du fichier 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

Ajoutez les variables d’environnement qui activent le contrôleur d’admission au fichier de déploiement de l’Agent de cluster :

cluster-agent-deployment.yaml

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

# Supprimez la mise en commentaire de ce bloc pour configurer automatiquement les traceurs APM (voir ci-dessous)
# - name: DD_ADMISSION_CONTROLLER_MUTATE_UNLABELLED
#   value: "true"

Enfin, exécutez les commandes suivantes :

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

Injection de bibliothèque d’instrumentation APM

Vous pouvez configurer l’Agent de cluster (version 7.39 et ultérieure) pour injecter des bibliothèques d’instrumentation à l’aide de l’instrumentation en une étape. Consultez la section Instrumentation APM en une étape pour en savoir plus.

Si vous ne souhaitez pas utiliser l’instrumentation en une étape, le contrôleur d’admission Datadog peut être utilisé pour injecter directement les bibliothèques de traceur APM comme alternative manuelle au niveau du pod. Consultez la section Injection de SDK locale pour en savoir plus.

Injection de variables d’environnement APM et DogStatsD

Pour configurer des clients DogStatsD ou d’autres bibliothèques APM qui ne prennent pas en charge l’injection de bibliothèque, injecter les variables d’environnement ‘DD_AGENT_HOST’ et ‘DD_ENTITY_ID’ en effectuant l’une des opérations suivantes :

  • Ajoutez l’étiquette ‘admission.datadoghq.com/enabled: “true”’ à votre Pod
  • Configurez le contrôleur d’admission de l’Agent de cluster en définissant mutateUnlabelled (ou DD_ADMISSION_CONTROLLER_MUTATE_UNLABELLED, en fonction de votre méthode de configuration) sur true.

L’ajout d’une configuration d’Agent ‘mutateUnlabelled: true’ dans le chart Helm fait en sorte que l’Agent de cluster tente d’intercepter chaque Pod sans étiquette.

Pour empêcher les pods de recevoir les variables d’environnement, ajoutez l’étiquette admission.datadoghq.com/enabled: "false". Cette opération fonctionne même si vous définissez mutateUnlabelled: true.

Si ‘mutateUnlabelled’ est défini sur ‘false’, l’étiquette du Pod doit être définie sur ‘admission.datadoghq.com/enabled: “true”’.

Options possibles :

mutateUnlabelledÉtiquette de podInjection
trueAucune étiquetteOui
trueadmission.datadoghq.com/enabled=trueOui
trueadmission.datadoghq.com/enabled=falseNon
falseAucune étiquetteNon
falseadmission.datadoghq.com/enabled=trueOui
falseadmission.datadoghq.com/enabled=falseNon

Ordre de priorité

Le contrôleur d’admission Datadog n’injecte pas les variables d’environnement DD_VERSION, DD_ENV ou DD_SERVICE si elles existent déjà.

Si ces variables d’environnement ne sont pas définies, le contrôleur d’admission utilise la valeur des tags standard dans l’ordre suivant (en commençant par le premier élément) :

  • Étiquettes sur le pod
  • Étiquettes sur la ownerReference (ReplicaSets, DaemonSets, déploiements, etc.)

Configurer le mode de communication entre APM et DogStatsD

Depuis la version 1.20.0 de l’Agent de cluster Datadog, il est possible de configurer le contrôleur d’admission Datadog afin d’injecter différents modes de communication entre l’application et l’Agent Datadog.

Cette fonctionnalité peut être configuré en définissant admission_controller.inject_config.mode ou en configurant un mode propre à un pod à l’aide de l’étiquette de pod admission.datadoghq.com/config.mode.

À partir de la version v3.22.0 du chart Helm et de la version v1.1.0 du Datadog Operator, le mode de communication est automatiquement défini sur ‘socket’ si le socket APM ou le socket DSD est activé.

Options possibles :

ModeDescription
hostip (par défaut)Injecter l’adresse IP de l’host dans la variable d’environnement ‘DD_AGENT_HOST’
serviceInjecter le nom DNS du service local Datadog dans la variable d’environnement ‘DD_AGENT_HOST’ (disponible avec Kubernetes v1.22+)
socketInjecter le chemin Unix Domain Socket dans la variable d’environnement ‘DD_TRACE_AGENT_URL’ et la définition de volume pour accéder au chemin correspondant. Injecter l’URL à utiliser pour se connecter à l’Agent Datadog pour les métriques DogStatsD dans ‘DD_DOGSTATSD_URL’.
csiInjecter les chemins Unix Domain Socket dans les variables d’environnement ‘DD_TRACE_AGENT_URL’ et ‘DD_DOGSTATSD_URL’ et la définition de volume CSI Datadog pour accéder aux chemins correspondants. Ce mode est disponible pour l’Agent de cluster de Datadog v7.67+.

Remarque : le mode spécifique au Pod a priorité sur le mode global défini au niveau du contrôleur d’admission.

Dépannage

Consultez la section Dépannage du contrôleur d’admission.

Pour aller plus loin