Vous pouvez faire apparaître les métadonnées Kubernetes et les lier à vos agents APM sous forme de traces distribuées pour explorer les problèmes de performances et résoudre les erreurs de transaction. Pour plus d'informations, consultez cet article de blog sur le monitoring des performances des applications via Kubernetes.
Le produit injection métadonnée utilise un MutatingAdmissionWebhook
pour ajouter les variables d'environnement suivantes au pod :
NEW_RELIC_METADATA_KUBERNETES_CLUSTER_NAMENEW_RELIC_METADATA_KUBERNETES_NODE_NAMENEW_RELIC_METADATA_KUBERNETES_NAMESPACE_NAMENEW_RELIC_METADATA_KUBERNETES_DEPLOYMENT_NAMENEW_RELIC_METADATA_KUBERNETES_POD_NAMENEW_RELIC_METADATA_KUBERNETES_CONTAINER_NAMENEW_RELIC_METADATA_KUBERNETES_CONTAINER_IMAGE_NAME
Conseil
Notre projet d'injection de métadonnées Kubernetes est open source. Voici le code pour lier les données APM et d'infrastructure.
Compatibilité et exigences
Pour connecter vos applications à Kubernetes, vous devez pouvoir déployer « MutatingWebhookConfiguration » sur votre cluster Kubernetes.
Pour vérifier que vous disposez des autorisations requises, exécutez cette commande :
$kubectl auth can-i create mutatingwebhookconfigurations.admissionregistration.k8s.io -A
Le résultat de la commande ci-dessus devrait ressembler à :
$yes
Si vous voyez un résultat différent, suivez la documentation Kubernetes pour activer le contrôle d'admission dans votre cluster.
Exigences réseau
Pour que Kubernetes puisse communiquer avec notre MutatingAdmissionWebhook
, le nœud control plane (ou le conteneur du serveur API, selon la configuration du cluster ) doit autoriser la sortie du trafic HTTPS sur le port 443 vers le pod de tous les autres nœuds du cluster.
Cela peut nécessiter une configuration spécifique en fonction de la configuration de votre infrastructure (sur site, AWS, Google Cloud, etc.).
Compatibilité de l'agent APM
Les agents New Relic suivants collectent les métadonnées Kubernetes :
- Version Go 2.3.0 ou supérieure
- Java 4.10.0 ou supérieur
- Node.js 5.3.0 ou supérieur
- Python 4.14.0 ou supérieur
- Ruby 6.1.0 ou supérieur
- .NET 8.17.438 ou supérieur
Configurer l'injection de métadonnées
Lorsque vous installez notre intégration à l’aide de Helm, elle inclut l’injection de métadonnées. Lors de la configuration du graphique nri-bundle
, assurez-vous d'activer le webhook d'injection de métadonnées comme suit.
nri-metadata-injection: enabled: true
Important : votre pod d'application devra être redémarré après le déploiement de nri-metadata-injection, afin qu'il puisse récupérer les variables d'environnement nécessaires.
Par défaut, tous les pods que vous créez qui incluent des agents APM ont les variables d'environnement correctes définies et l' injection de métadonnées s'applique à l'ensemble cluster. Pour vérifier que les variables d'environnement ont été définies, tout conteneur en cours d'exécution doit être arrêté et une nouvelle instance démarrée. Voir Valider l'injection de métadonnées pour plus d'informations.
Cette configuration par défaut utilise également l' API des certificats Kubernetes pour gérer automatiquement les certificats requis pour l'injection. Si besoin, vous pouvez limiter l' injection de métadonnées à un espace de nommage spécifique de votre cluster ou autogérer vos certificats.
Configuration personnalisée
Limiter l'espace de nommage soumis à injection
Vous pouvez limiter l' injection de métadonnées uniquement à un espace de nommage spécifique en utilisant des étiquettes.
Pour activer cette fonctionnalité, ajoutez ce qui suit au fichier values-newrelic.yaml
:
nri-metadata-injection: injectOnlyLabeledNamespaces: true
Avec cette option, injection est uniquement appliquée aux espaces de nommage dont l'étiquette newrelic-metadata-injection
est définie sur enabled
:
$kubectl label namespace YOUR_NAMESPACE newrelic-metadata-injection=enabled
Utilisez cert-manager pour générer des certificats
Par défaut, notre graphique utilise kube-webhook-certgen
pour générer automatiquement les certificats requis pour l'exécution du webhook.
Cependant, si vous avez installé cert-manager , vous pouvez configurer notre graphique pour l'utiliser à la place, ce qui peut rendre le déploiement beaucoup plus facile :
nri-metadata-injection: certManager: enabled: true
Gérer les certificats personnalisés
Conseil
La gestion manuelle des certificats webhook est recommandée uniquement aux utilisateurs avancés. L'équipe d'assistance de New Relic ne pourra peut-être pas vous aider à résoudre ce configuration.
Pour utiliser des certificats personnalisés, vous devez désactiver l'installation automatique des certificats lorsque vous effectuez l'installation à l'aide de Helm.
Pour désactiver l'installation des certificats, modifiez simplement nri-bundle Helm values.yaml
comme ceci :
nri-metadata-injection: customTLSCertificate: true
Vous pouvez maintenant procéder à l’option de gestion des certificats personnalisés. Vous avez besoin de votre certificat, de votre clé de serveur et de votre ensemble d'autorité de certification (CA) codés au format PEM.
Si vous les avez au format de certificat standard (X.509), installez
openssl
et exécutez ce qui suit :bash$openssl x509 -in YOUR_CERTIFICATE_FILENAME -outform PEM -out YOUR_CERTIFICATE_FILENAME.pem$openssl x509 -in YOUR_SERVER_KEY_FILENAME -outform PEM -out YOUR_SERVER_KEY_FILENAME.pem$openssl x509 -in YOUR_CA_BUNDLE_FILENAME -outform PEM -out YOUR_BUNDLE_FILENAME.pemSi votre certificat et votre paire de clés sont dans un autre format, consultez la base de connaissances Digicert pour obtenir de l'aide.
Créez le secret TLS avec la paire certificat/clé signée et corrigez la configuration du webhook en mutation avec l'autorité de certification à l'aide des commandes suivantes :
$kubectl create secret tls YOUR_NEWRELIC_METADATA_INJECTION_ADMISSION \> --key=YOUR_PEM_ENCODED_SERVER_KEY \> --cert=YOUR_PEM_ENCODED_CERTIFICATE \> --dry-run -o yaml |$kubectl -n newrelic apply -f -$
$caBundle=$(cat YOUR_PEM_ENCODED_CA_BUNDLE | base64 | td -d $'\n')$kubectl patch mutatingwebhookconfiguration newrelic-metadata-injection-cfg --type='json' -p "[{'op': 'replace', 'path': '/webhooks/0/clientConfig/caBundle', 'value':'${caBundle}'}]"
Important
Les certificats signés par Kubernetes ont une durée d'expiration d'un an. Pour plus d'informations, consultez le code source de Kubernetes sur GitHub.
Valider l'injection de métadonnées
lancer un nouveau pod et vérifier les variables d'environnement New Relic pour vérifier la bonne installation du webhook responsable de l'injection du fichier méta.
Créez un pod nginx factice en exécutant :
bash$kubectl run test-nginx --image nginx -n newrelicVérifiez si les variables d’environnement New Relic ont été injectées :
bash$kubectl exec -n newrelic test-nginx -- env | grep NEW_RELIC_METADATA_KUBERNETES
Le résultat attendu serait quelque chose comme ce qui suit :
NEW_RELIC_METADATA_KUBERNETES_CLUSTER_NAME=THE_CLUSTER_NAMENEW_RELIC_METADATA_KUBERNETES_NODE_NAME=nodeaNEW_RELIC_METADATA_KUBERNETES_NAMESPACE_NAME=newrelicNEW_RELIC_METADATA_KUBERNETES_POD_NAME=test-nginxNEW_RELIC_METADATA_KUBERNETES_CONTAINER_NAME=nginx
Désactiver l'injection de métadonnées
Pour désinstaller l'injection de métadonnées, modifiez votre fichier values-newrelic.yaml
comme suit :
webhook: enabled: false
Après cela, exécutez à nouveau la commande d’installation.
Dépannage
Suivez ces conseils de dépannage si nécessaire.