Kubernetes 감시 데이터를 표면화하고 이를 APM 에이전트 트레이스 에 연결하여 성능 문제를 탐색하고 오프셋 오류를 해결할 수 있습니다. 자세한 내용은 Kubernetes를 통한 앱 성능 모니터링에 대한 이 블로그 게시물을 참조하세요.
메타데이터 삽입 제품은 MutatingAdmissionWebhook
를 사용하여 다음 환경 변수를 포드에 추가합니다.
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
팁
Kubernetes 메타데이터 주입 프로젝트는 오픈 소스입니다. 다음은 APM과 인프라 데이터를 연결하는 코드입니다.
호환성 및 요구 사항
Kubernetes 에 기능을 연결하려면 쿠버네티스 클러스터에 구현하다, 배포하다 `MutatingWebhookConfiguration'을 사용할 수 있어야 합니다.
필요한 권한이 있는지 확인하려면 다음 명령을 실행하세요.
$kubectl auth can-i create mutatingwebhookconfigurations.admissionregistration.k8s.io -A
위 명령의 출력은 다음과 유사해야 합니다.
$yes
다른 결과가 표시되면 Kubernetes 설명서 에 따라 클러스터에서 승인 제어를 활성화하십시오 .
네트워크 요구 사항
Kubernetes MutatingAdmissionWebhook
와 통신하려면 제어 평면 노드(또는 서버가 설정된 방식에 따라 API 서버 컨테이너)가 서버 내의 다른 모든 노드에서 포트 443을 통해 HTTPS 트래픽의 유출을 허용해야 합니다.
인프라 설정 방식(온프레미스, AWS, Google Cloud 등)에 따라 특정 구성이 필요할 수 있습니다.
APM 에이전트 호환성
다음 New Relic 에이전트는 Kubernetes 메타데이터를 수집합니다.
메타데이터 주입 설정
Helm을 사용하여 통합을 설치 하면 포함되는 데이터가 포함됩니다. nri-bundle
차트를 구성할 때 다음과 같이 메타데이터 웹훅을 활성화해야 합니다.
nri-metadata-injection: enabled: true
웹훅을 구현하고 배포한 후, 제작 파드를 다시 시작하세요. 필요한 환경 변수를 선택해야 합니다.
기본적으로 APM 에이전트를 포함하여 생성한 모든 파드에는 올바른 환경 변수가 설정되어 있으며, 클러스터 전체에 업데이트 내용이 적용됩니다. 환경 변수가 설정되었는지 확인하려면 실행 중인 모든 컨테이너를 중지하고 새 인스턴스를 시작해야 합니다. 자세한 내용은 데이터의 유효성을 검사하세요를 참조하세요.
이 기본 구성은 또한 Kubernetes 인증서 API 를 사용하여 주입에 필요한 인증서를 자동으로 관리합니다. 필요한 경우 메타데이터 주입을 클러스터의 특정 네임스페이스로 제한하거나 인증서를 자체 관리할 수 있습니다.
사용자 정의 구성
주입 대상 네임스페이스 제한
레이블을 사용하여 특정 네임스페이스에만 메타데이터 주입을 제한할 수 있습니다.
이 기능을 활성화하려면 values-newrelic.yaml
파일에 다음을 추가하세요.
nri-metadata-injection: injectOnlyLabeledNamespaces: true
이 옵션을 사용하면 newrelic-metadata-injection
레이블이 enabled
로 설정된 네임스페이스에만 삽입이 적용됩니다.
$kubectl label namespace YOUR_NAMESPACE newrelic-metadata-injection=enabled
cert-manager를 사용하여 인증서 생성
기본적으로 차트에서는 kube-webhook-certgen
사용하여 웹훅 실행에 필요한 인증서를 자동으로 생성합니다.
그러나 cert-manager를 설치한 경우 이를 대신 사용하도록 차트를 구성할 수 있으며, 이를 통해 구현하다, 배포를 훨씬 쉽게 만들 수 있습니다.
nri-metadata-injection: certManager: enabled: true
사용자 지정 인증서 관리
팁
웹훅 인증서를 수동으로 관리하는 것은 고급 사용자에게만 권장됩니다. New Relic 지원 팀은 이 구성 문제를 해결하는 데 도움을 주지 못할 수 있습니다.
사용자 정의 인증서를 사용하려면 Helm을 사용하여 설치할 때 인증서 자동 설치를 비활성화해야 합니다.
인증서 설치를 비활성화하려면 다음과 같이 nri-bundle Helm values.yaml
을 수정합니다.
nri-metadata-injection: customTLSCertificate: true
이제 사용자 정의 인증서 관리 옵션을 진행할 수 있습니다. PEM 형식으로 인코딩된 인증서, 서버 키 및 CA(인증 기관) 번들이 필요합니다.
표준 인증서 형식(X.509)인 경우
openssl
설치하고 다음을 실행합니다.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.pem인증서와 키 쌍이 다른 형식인 경우 Digicert 기술 자료를 참조하여 자세한 도움을 받으세요.
서명된 인증서/키 쌍으로 TLS 암호를 만들고 다음 명령을 사용하여 CA로 변경하는 웹훅 구성을 패치합니다.
$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}'}]"
중요
Kubernetes에서 서명한 인증서의 만료 기간은 1년입니다. 자세한 내용 은 GitHub의 Kubernetes 소스 코드를 참조하세요.
메타데이터 주입 검증
모양하다, 배포하다 새로운 패드를 만들고 뉴렐릭 환경 변수를 확인하여 미터데이터 주입을 담당하는 웹훅의 올바른 설치를 확인합니다.
다음을 실행하여 더미 nginx 포드를 생성합니다.
bash$kubectl run test-nginx --image nginx -n newrelicNew Relic 환경 변수가 주입되었는지 확인하십시오.
bash$kubectl exec -n newrelic test-nginx -- env | grep NEW_RELIC_METADATA_KUBERNETES
예상되는 출력은 다음과 같습니다.
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
메타데이터 주입 비활성화
메타데이터를 제거하려면 다음과 같이 values-newrelic.yaml
파일을 변경하세요.
webhook: enabled: false
그런 다음 설치 명령을 다시 실행하십시오.
문제점 해결
필요에 따라 다음 문제 해결 팁을 따르십시오.