• 로그인지금 시작하세요

사용자의 편의를 위해 제공되는 기계 번역입니다.

영문본과 번역본이 일치하지 않는 경우 영문본이 우선합니다. 보다 자세한 내용은 이 페이지를 방문하시기 바랍니다.

문제 신고

APM 계측 애플리케이션을 Kubernetes에 연결

Kubernetes 메타데이터를 표시하고 분산 추적 으로 APM 에이전트에 연결 하여 성능 문제를 탐색하고 트랜잭션 오류를 해결할 수 있습니다. 자세한 내용 은 Kubernetes를 통한 앱 성능 모니터링에 대한 이 블로그 게시물 을 참조하세요.

또한 현재 베타 릴리스인 Pixie를 사용한 자동 원격 측정을 사용하여 Kubernetes 클러스터 모니터링을 빠르게 시작할 수 있습니다. New Relic으로의 이 Pixie 통합에는 언어 에이전트가 필요하지 않습니다. 여기 에서 Pixie를 사용한 자동 원격 측정에 대해 자세히 알아보세요.

메타데이터 삽입 제품은 MutatingAdmissionWebhook 를 사용하여 다음 환경 변수를 포드에 추가합니다.

NEW_RELIC_METADATA_KUBERNETES_CLUSTER_NAME
NEW_RELIC_METADATA_KUBERNETES_NODE_NAME
NEW_RELIC_METADATA_KUBERNETES_NAMESPACE_NAME
NEW_RELIC_METADATA_KUBERNETES_DEPLOYMENT_NAME
NEW_RELIC_METADATA_KUBERNETES_POD_NAME
NEW_RELIC_METADATA_KUBERNETES_CONTAINER_NAME
NEW_RELIC_METADATA_KUBERNETES_CONTAINER_IMAGE_NAME

Kubernetes 메타데이터 주입 프로젝트는 오픈 소스입니다. 다음은 APM과 인프라 데이터를 연결하는 코드 입니다.

호환성 및 요구 사항

애플리케이션과 Kubernetes를 연결하려면 Kubernetes 클러스터에 MutatingWebhookConfiguration 를 배포할 수 있어야 합니다.

필요한 권한이 있는지 확인하려면 다음 명령을 실행할 수 있습니다.

bash
$
kubectl auth can-i create mutatingwebhookconfigurations.admissionregistration.k8s.io -A

위 명령의 출력은 다음과 유사해야 합니다.

yes

다른 결과가 표시되면 Kubernetes 설명서 에 따라 클러스터에서 승인 제어를 활성화하십시오 .

네트워크 요구 사항

Kubernetes가 MutatingAdmissionWebhook 과 통신하려면 포트 443의 HTTPS 트래픽이 클러스터의 다른 모든 노드에 있는 포드로 나가는 마스터 노드(또는 클러스터 설정 방식에 따라 API 서버 컨테이너)가 허용되어야 합니다. .

인프라 설정 방식(온프레미스, AWS, Google Cloud 등)에 따라 특정 구성이 필요할 수 있습니다.

APM 에이전트 호환성

다음 New Relic 에이전트는 Kubernetes 메타데이터를 수집합니다.

오픈시프트 요구사항

Openshift와 Kubernetes를 연결하려면 Openshift 3.9 이상 이 필요한 변경 승인 웹훅을 활성화해야 합니다.

  1. 프로세스 중에 클러스터에 대한 admin 권한이 필요한 리소스를 설치합니다. 다음을 실행하여 관리자로 로그인합니다.

    bash
    $
    oc login -u system:admin
  2. 웹훅이 올바르게 구성되었는지 확인하십시오. 그렇지 않은 경우 master-config.yaml 파일을 업데이트합니다.

    admissionConfig:
    pluginConfig:
    MutatingAdmissionWebhook:
    configuration:
    apiVersion: apiserver.config.k8s.io/v1alpha1
    kubeConfigFile: /dev/null
    kind: WebhookAdmission
    ValidatingAdmissionWebhook:
    configuration:
    apiVersion: apiserver.config.k8s.io/v1alpha1
    kubeConfigFile: /dev/null
    kind: WebhookAdmission
    location: ""

    중요

    Openshift의 일부 문제를 해결 하려면 kubeConfigFile: /dev/null 을 추가하세요.

  3. YAML 파일을 편집하고 구성을 업데이트하여 인증서 서명을 활성화합니다.

    kubernetesMasterConfig:
    controllerArguments:
    cluster-signing-cert-file:
    - "/etc/origin/master/ca.crt"
    cluster-signing-key-file:
    - "/etc/origin/master/ca.key"
  4. 마스터 노드에서 Openshift 서비스를 다시 시작합니다.

중요

Openshift 4.0 이상에서는 승인 웹훅을 활성화하기 위해 동적 승인 제어 가 필요합니다. 해당 버전에서는 master-config.yaml 파일이 지원되지 않기 때문입니다.

메타데이터 주입 설정

Helm을 사용하여 통합을 설치할 때 메타데이터 삽입이 포함됩니다. 차트를 구성할 때 메타데이터를 삽입하는 웹훅이 활성화되어 있는지 확인하십시오.

webhook:
enabled: true

기본적으로 APM 에이전트를 포함하여 생성하는 모든 포드에는 올바른 환경 변수가 설정되어 있으며 메타데이터 주입이 전체 클러스터에 적용됩니다. 환경 변수가 설정되었는지 확인하려면 실행 중인 모든 컨테이너를 중지하고 새 인스턴스를 시작해야 합니다( 메타데이터 삽입 확인 참조).

이 기본 구성은 또한 Kubernetes 인증서 API 를 사용하여 주입에 필요한 인증서를 자동으로 관리합니다. 필요한 경우 메타데이터 주입을 클러스터의 특정 네임스페이스로 제한하거나 인증서를 자체 관리할 수 있습니다.

사용자 정의 구성

주입 대상 네임스페이스 제한

레이블을 사용하여 특정 네임스페이스에만 메타데이터 주입을 제한할 수 있습니다.

이 기능을 활성화하려면 values-newrelic.yaml 파일에 다음을 추가하세요.

nri-metadata-injection:
injectOnlyLabeledNamespaces: true

이 옵션을 사용하면 newrelic-metadata-injection 레이블이 enabled 로 설정된 네임스페이스에만 삽입이 적용됩니다.

bash
$
kubectl label namespace YOUR_NAMESPACE newrelic-metadata-injection=enabled

cert-manager를 사용하여 인증서 생성

기본적으로 차트는 kube-webhook-certgen 을 사용하여 웹훅을 실행하는 데 필요한 인증서를 자동으로 생성합니다.

그러나 cert-manager 가 설치되어 있는 경우 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 을 설치하고 다음을 실행합니다.
openssl x509 -in CERTIFICATE_FILENAME -outform PEM -out CERTIFICATE_FILENAME.pem
openssl x509 -in SERVER_KEY_FILENAME -outform PEM -out SERVER_KEY_FILENAME.pem
openssl x509 -in CA_BUNDLE_FILENAME -outform PEM -out BUNDLE_FILENAME.pem
  • 인증서/키 쌍이 다른 형식인 경우 Digicert 지식 기반 에서 추가 도움말을 참조하세요.

서명된 인증서/키 쌍으로 TLS 암호를 만들고 다음 명령을 사용하여 CA로 변경하는 웹훅 구성을 패치합니다.

kubectl create secret tls newrelic-metadata-injection-admission \
--key=PEM_ENCODED_SERVER_KEY \
--cert=PEM_ENCODED_CERTIFICATE \
--dry-run -o yaml |
kubectl -n newrelic apply -f -

caBundle=$(cat 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 소스 코드를 참조하세요.

메타데이터 주입 검증

웹훅(메타데이터 주입 담당)이 올바르게 설치되었는지 확인하려면 새 포드를 배포하고 New Relic 환경 변수를 확인하세요.

  1. 다음을 실행하여 더미 nginx 포드를 생성합니다.
bash
$
kubectl run test-nginx --image nginx -n newrelic
  1. New Relic 환경 변수가 주입되었는지 확인하십시오.
bash
$
kubectl exec -n newrelic test-nginx -- env | grep NEW_RELIC_METADATA_KUBERNETES

예상되는 출력은 다음과 같습니다.

NEW_RELIC_METADATA_KUBERNETES_CLUSTER_NAME=cluster-name
NEW_RELIC_METADATA_KUBERNETES_NODE_NAME=nodea
NEW_RELIC_METADATA_KUBERNETES_NAMESPACE_NAME=newrelic
NEW_RELIC_METADATA_KUBERNETES_POD_NAME=test-nginx
NEW_RELIC_METADATA_KUBERNETES_CONTAINER_NAME=nginx

메타데이터 주입 비활성화

메타데이터 삽입을 비활성화/제거하려면 values-newrelic.yaml 파일을 다음과 같이 변경합니다.

webhook:
enabled: false

그리고 설치 명령 을 다시 실행하십시오.

문제점 해결

필요에 따라 다음 문제 해결 팁을 따르십시오.

Copyright © 2022 New Relic Inc.