Puede mostrar los metadatos Kubernetes y vincularlos a su agente APM como rastreo distribuido para explorar problemas de rendimiento y solucionar errores de transacción. Para obtener más información, consulte esta publicación de blog sobre monitoreo del rendimiento de aplicaciones a través de Kubernetes.
El producto de inyección de metadatos utiliza un MutatingAdmissionWebhook
para agregar las siguientes variables de entorno al 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
Sugerencia
Nuestro proyecto de inyección de metadatos de Kubernetes es de código abierto. Aquí está el código para vincular APM y datos de infraestructura.
Compatibilidad y requisitos
Para conectar su aplicación a Kubernetes, debe poder desplegar `MutatingWebhookConfiguration' en su clúster de Kubernetes.
Para verificar que tiene las licencias necesarias, ejecute este comando:
$kubectl auth can-i create mutatingwebhookconfigurations.admissionregistration.k8s.io -A
El resultado del comando anterior debería ser algo similar a:
$yes
Si ve un resultado diferente, siga la documentación de Kubernetes para habilitar el control de admisión en su clúster.
Requisitos de red
Para que Kubernetes se comunique con nuestro MutatingAdmissionWebhook
, el nodo del plano de control (o contenedor del servidor API , según cómo esté configurado el clúster) debe permitir la salida del tráfico HTTPS en el puerto 443 hacia los pods en todos los demás nodos del clúster.
Esto puede requerir una configuración específica dependiendo de cómo esté configurada su infraestructura (local, AWS, Google Cloud, etc.).
APM compatibilidad del agente
El siguiente agente New Relic recopila metadatos Kubernetes :
- Go 2.3.0 o superior
- Java 4.10.0 o superior
- Node.js 5.3.0 o superior
- Python 4.14.0 o superior
- Ruby 6.1.0 o mas alto
- .NET 8.17.438 o superior
Configurar la inyección de metadatos
Cuando instalas nuestra integración usando Helm, incluye la inyección de metadatos. Al configurar el gráfico nri-bundle
, cerciorar de habilitar el webhook de inyección de metadatos de la siguiente manera.
nri-metadata-injection: enabled: true
Luego de desplegar el webhook, resetear el módulo de su aplicación. Necesitan recoger las variables de entorno requeridas.
De forma predeterminada, todos los pods que cree que incluyan el agente APM tienen configuradas las variables de entorno correctas y la inyección de metadatos se aplica a todo el clúster. Para comprobar que se configuraron las variables de entorno, se debe detener cualquier contenedor en ejecución e iniciar una nueva instancia. Consulte Validar la inyección de metadatos para obtener más información.
Esta configuración predeterminada también utiliza la API de certificados de Kubernetes para administrar automáticamente los certificados necesarios para la inyección. Si es necesario, puedes limitar la inyección de metadatos a espacios de nombres específicos en tu clúster o autogestionar tus certificados.
Configuración personalizada
Limitar el espacio de nombres sujeto a inyección
Puede limitar la inyección de metadatos solo a un espacio de nombres específico mediante el uso de etiquetas.
Para habilitar esta característica, agregue lo siguiente al archivo values-newrelic.yaml
:
nri-metadata-injection: injectOnlyLabeledNamespaces: true
Con esta opción, la inyección solo se aplica a aquellos espacios de nombres que tienen la etiqueta newrelic-metadata-injection
establecida en enabled
:
$kubectl label namespace YOUR_NAMESPACE newrelic-metadata-injection=enabled
Utilice cert-manager para generar certificados
De forma predeterminada, nuestro gráfico emplea kube-webhook-certgen
para generar automáticamente los certificados necesarios para que se ejecute el webhook.
Sin embargo, si tiene instalado cert-manager , puede configurar nuestro gráfico para usarlo en su lugar, lo que puede hacer que desplegar sea mucho más fácil:
nri-metadata-injection: certManager: enabled: true
Administrar certificados personalizados
Sugerencia
Se recomienda administrar manualmente los certificados de webhook solo para usuarios avanzados. Es posible que el equipo de soporte New Relic no pueda ayudar a resolver los problemas de esta configuración.
Para utilizar certificados personalizados, debe desactivar la instalación automática de certificados cuando realiza la instalación mediante Helm.
Para deshabilitar la instalación de certificados, simplemente modifique nri-bundle Helm values.yaml
de esta manera:
nri-metadata-injection: customTLSCertificate: true
Ahora puede continuar con la opción de gestión de certificados personalizados. Necesita su certificado, clave de servidor y paquete de autoridad de certificación (CA) codificados en formato PEM.
Si los tiene en el formato de certificado estándar (X.509), instale
openssl
y ejecute lo siguiente: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 su certificado y par de claves están en otro formato, consulte la base de conocimientos de Digicert para obtener más ayuda.
Cree el secreto TLS con el par de claves/certificado firmado y parchee la configuración del webhook mutante con la CA mediante los siguientes comandos:
$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}'}]"
Importante
Los certificados firmados por Kubernetes tienen una caducidad de un año. Para obtener más información, consulte el código fuente de Kubernetes en GitHub.
Validar la inyección de metadatos.
despliegue un nuevo pod y verifique las variables de entorno New Relic para verificar la correcta instalación del webhook responsable de inyectar los metadatos.
Cree un pod nginx ficticio ejecutando:
bash$kubectl run test-nginx --image nginx -n newrelicCompruebe si se inyectaron variables de entorno de New Relic:
bash$kubectl exec -n newrelic test-nginx -- env | grep NEW_RELIC_METADATA_KUBERNETES
El resultado esperado sería algo como lo siguiente:
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
Deshabilitar la inyección de metadatos
Para desinstalar la inyección de metadatos, cambie su archivo values-newrelic.yaml
de la siguiente manera:
webhook: enabled: false
Luego de eso, vuelva a ejecutar el comando de instalación.
Resolución de problemas
Siga estos consejos de resolución de problemas según sea necesario.