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ó do plano de controle (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 o 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.