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 conectar seu aplicativo ao Kubernetes, você precisa ser capaz de implantar `MutatingWebhookConfiguration' em seu cluster do Kubernetes.
Para verificar se você tem as permissões necessárias, execute este 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 contêiner do servidor API , dependendo de como o cluster está configurado) deve permitir a saída do 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 sua 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
Quando você instala nossa integração usando Helm, ela inclui injeção de metadados. Ao configurar o gráfico nri-bundle
, certifique-se de ativar o webhook de injeção de metadados da seguinte maneira.
nri-metadata-injection: enabled: true
Após implantar o webhook, reinicie seu aplicativo pod. Eles precisam selecionar 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 para obter mais informações.
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 usá-lo, o que pode tornar a implantação muito mais fácil:
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: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.pemSe o seu certificado e par de chaves estiverem 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
implantar um novo pod e verificar as variáveis de ambiente do New Relic para verificar a correta instalação do webhook responsável por injetar os metadados.
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 desinstalar a injeção de metadados, altere seu arquivo values-newrelic.yaml
da seguinte forma:
webhook: enabled: false
Depois disso, execute novamente o comando de instalação.
Resolução de problemas
Siga estas dicas de resolução de problemas conforme necessário.