Você pode exibir metadados Kubernetes e vinculá-los ao seu agente APM como rastreamento distribuído para explorar problemas de desempenho e solucionar erros de operação. Para obter mais informações, consulte esta postagem do blog sobre monitoramento de desempenho de aplicativos via Kubernetes.
O produto metadados injeção usa um MutatingAdmissionWebhook
para adicionar as seguintes variáveis de ambiente ao 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
Dica
Nosso projeto de injeção de metadados do Kubernetes é de código aberto. Aqui está o código para vincular o APM e os dados de infraestrutura.
Compatibilidade e requisitos
Para vincular seu aplicativo e Kubernetes, você deve ser capaz de implantar MutatingWebhookConfiguration
s em seu cluster do Kubernetes.
Para verificar se você tem as permissões necessárias, você pode executar o seguinte comando:
$kubectl auth can-i create mutatingwebhookconfigurations.admissionregistration.k8s.io -A
A saída do comando acima deve ser algo semelhante a:
yes
Se você vir um resultado diferente, siga a documentação do Kubernetes para habilitar o controle de admissão em seu cluster.
Requisitos de rede
Para que Kubernetes se comunique com nosso MutatingAdmissionWebhook
, o nó mestre (ou o contêiner do servidor API , dependendo de como o cluster está configurado) deve ter permissão de saída para tráfego HTTPS na porta 443 para pod em todos os outros nós do cluster.
Isso pode exigir configuração específica dependendo de como a infraestrutura está configurada (local, AWS, Google Cloud, etc.).
Compatibilidade APM do agente
O seguinte agente New Relic coleta metadados Kubernetes :
- Go 2.3.0 ou superior
- Java 4.10.0 ou superior
- Node.js 5.3.0 ou superior
- Python 4.14.0 ou superior
- Ruby 6.1.0 ou mais alto
- .NET 8.17.438 ou superior
Configure a injeção de metadados
A injeção de metadados está incluída quando você instala nossa integração usando Helm. Apenas certifique-se de que, ao configurar o gráfico nri-bundle
, o webhook que injeta os metadados esteja ativado:
nri-metadata-injection: enabled: true
Seu pod de aplicativo precisará ser reiniciado após a implantação do webhook, para que eles possam coletar as variáveis de ambiente necessárias.
Por padrão, todos os pods criados que incluem o agente APM têm as variáveis de ambiente corretas definidas e a injeção de metadados se aplica a todo o cluster. Para verificar se as variáveis de ambiente foram definidas, qualquer contêiner em execução deve ser interrompido e uma nova instância iniciada (consulte Validar a injeção de metadados).
Essa configuração padrão também usa a API de certificados Kubernetes para gerenciar automaticamente os certificados necessários para a injeção. Se necessário, você pode limitar a injeção de metadados a namespaces específicos em seu cluster ou autogerenciar seus certificados.
Configuração personalizada
Limitar namespace sujeito a injeção
Você pode limitar a injeção de metadados apenas a namespaces específicos usando rótulos.
Para ativar esse recurso, adicione o seguinte ao arquivo values-newrelic.yaml
:
nri-metadata-injection: injectOnlyLabeledNamespaces: true
Com esta opção, a injeção é aplicada apenas aos namespaces que possuem o rótulo newrelic-metadata-injection
definido como enabled
:
$kubectl label namespace YOUR_NAMESPACE newrelic-metadata-injection=enabled
Use o cert-manager para gerar certificados
Por padrão, nosso gráfico usa kube-webhook-certgen para gerar automaticamente os certificados necessários para a execução do webhook.
No entanto, se você tiver o cert-manager instalado, poderá configurar nosso gráfico para usar o cert-manager, o que pode simplificar significativamente o processo de implantação:
nri-metadata-injection: certManager: enabled: true
Gerenciar certificados personalizados
Dica
O gerenciamento manual de certificados de webhook é recomendado apenas para usuários avançados. A equipe de suporte New Relic pode não ser capaz de ajudar na resolução de problemas nesta configuração.
Para usar certificados personalizados, você precisa desabilitar a instalação automática de certificados ao instalar usando o Helm.
Para desativar a instalação de certificados, basta modificar o Helm nri-bundle values.yaml
assim:
nri-metadata-injection: customTLSCertificate: true
Agora você pode prosseguir com a opção de gerenciamento de certificado personalizado.
Você precisa do certificado, da chave do servidor e do pacote da Autoridade de Certificação (CA) codificados no formato PEM.
- Se você os tiver no formato de certificado padrão (X.509), instale
openssl
e execute o seguinte:
$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.pem
- Se o seu par de certificado/chave estiver em outro formato, consulte a base de conhecimento da Digicert para obter mais ajuda.
Crie o segredo TLS com o par de certificado/chave assinado e corrija a configuração mutante do webhook com a CA usando os seguintes 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
Os certificados assinados pelo Kubernetes têm validade de um ano. Para obter mais informações, consulte o código-fonte do Kubernetes no GitHub.
Validar a injeção de metadados
Para validar se o webhook (responsável por injetar os metadados) foi instalado corretamente, implante um novo pod e verifique as variáveis de ambiente New Relic .
Crie um pod nginx fictício executando:
bash$kubectl run test-nginx --image nginx -n newrelicVerifique se as variáveis de ambiente do New Relic foram injetadas:
bash$kubectl exec -n newrelic test-nginx -- env | grep NEW_RELIC_METADATA_KUBERNETES
A saída esperada seria algo como o seguinte:
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
Desative a injeção de metadados
Para desativar/desinstalar a injeção de metadados, altere seu arquivo values-newrelic.yaml
da seguinte forma:
webhook: enabled: false
E execute novamente o comando de instalação.
Resolução de problemas
Siga estas dicas de resolução de problemas conforme necessário.