Détection automatique du nom de cluster Kubernetes
À partir de la version 6.11+ de l’Agent, l’Agent Datadog peut détecter automatiquement le nom de cluster Kubernetes sur Google Kubernetes Engine (GKE), Azure Kubernetes Service (AKS) et Amazon Elastic Kubernetes Service (EKS). Le nom de cluster peut également être fourni directement ou découvert à partir des étiquettes de nœud Kubernetes. S’il est détecté, le nom de cluster est ajouté en tant que suffixe au nom de nœud pour toutes les données collectées. Cela facilite l’identification des nœuds dans les clusters Kubernetes.
Ce nom de cluster doit être un nom unique et respecter les restrictions suivantes :
- Ne doit contenir que des lettres minuscules, des chiffres et des traits d'union
- Doit commencer par une lettre
- Doit se terminer par un chiffre ou une lettre
- Doit contenir au maximum 80 caractères
Configuration
Vous pouvez fournir un nom de cluster directement dans votre configuration Datadog. Lorsqu’il est fourni, celui-ci est prioritaire sur toutes les autres options.
Dans l’opérateur Datadog, définissez la valeur sous global.clusterName.
apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
name: datadog
spec:
global:
clusterName: <CLUSTER_NAME>
Dans votre chart Helm, définissez la valeur sous datadog.clusterName.
datadog:
clusterName: <CLUSTER_NAME>
Fournisseurs de cloud
Si un nom de cluster n’est pas fourni dans la configuration, l’Agent et l’Agent de cluster contactent les services de métadonnées du fournisseur de cloud pour le récupérer.
GKE
Sur GKE, le nom de cluster est récupéré à partir du serveur de métadonnées de VM. L’Agent effectue une requête pour récupérer les attributs de l’instance et utilise la valeur renvoyée en cas de réussite.
Vous pouvez tester cette requête en utilisant kubectl exec dans le pod de l’Agent et en exécutant une requête curl comme suit.
curl -v "http://169.254.169.254/computeMetadata/v1/instance/attributes/cluster-name" -H "Metadata-Flavor: Google"
Une requête réussie renvoie une réponse 200 et le nom de cluster Kubernetes tel qu’il apparaît dans la console GKE. L’activation de certaines fonctionnalités GKE telles que Workload Identity peut restreindre cet accès.
AKS
Sur AKS, le nom de cluster est récupéré à partir d’Azure Instance Metadata Service. L’Agent demande le nom de groupe de ressources de la VM, puis analyse cette valeur pour déterminer le nom de cluster Kubernetes.
Vous pouvez tester cette requête en utilisant kubectl exec dans le pod de l’Agent et en exécutant une requête curl comme suit.
curl -v "http://169.254.169.254/metadata/instance/compute/resourceGroupName?api-version=2017-08-01&format=text" -H "Metadata: true"
Une requête réussie renvoie une réponse 200 et le nom de groupe de ressources AKS qui doit être analysé. Par exemple, l’Agent analyse example-cluster-name à partir du MC_MyResourceGroup_example-cluster-name_eastus renvoyé.
EKS
Sur l’EKS, le site Agent récupère le nom du cluster en récupérant les balises de l’instance EC2 et en identifiant la balise kubernetes.io/cluster/<CLUSTER_NAME>: owned préremplie pour déterminer le nom du cluster.
Par défaut, l’Agent utilise l’Instance Metadata Service (IMDS) pour obtenir l’identité de l’instance, qui est utilisée par l’Agent et le SDK AWS pour décrire les tags sur l’instance. Sur l’Agent 7.64.0 et versions ultérieures, il utilise IMDSv2 par défaut pour récupérer cette identité. Cela nécessite que l’instance EC2 et son rôle IAM disposent de l’autorisation ec2:DescribeTags. L’Agent ne prend pas en charge EKS Pod Identity pour les autorisations IAM.
L’Agent peut également récupérer les tags EC2 directement depuis IMDS lorsque la variable d’environnement suivante est fournie.
- name: DD_COLLECT_EC2_TAGS_USE_IMDS
value: "true"
Toutefois, IMDS n’accorde pas l’accès aux tags EC2 par défaut. Vous devez activer l’accès aux tags et définir votre limite de sauts sur 2 (ou plus).
Étiquettes de nœud
La dernière méthode de détection utilise les étiquettes de nœud Kubernetes. L’Agent inspecte son nœud Kubernetes actuel et recherche les étiquettes suivantes :
alpha.eksctl.io/cluster-namekubernetes.azure.com/clusterad.datadoghq.com/cluster-name
Des étiquettes supplémentaires peuvent être ajoutées avec la variable d’environnement :
- name: DD_KUBERNETES_NODE_LABEL_AS_CLUSTER_NAME
value: "<NODE_LABEL_KEY>"
Si l’étiquette de nœud est trouvée, la valeur est utilisée comme nom de cluster.