NGINX Ingress Controller 사용 데이터 보고

NGINX Ingress Controller Usage Reporting는 NGINX Management Suit에 연결하고 클러스터의 NGINX Ingress Controller의 노드 수를 보고하는 Kubernetes 컨트롤러입니다. 보고하려는 노드가 있는 NGINX Ingress Controller와 동일한 클러스터에 Kubernetes 배포로 설치됩니다.

사용 보고를 사용하려면 NGINX Management Suite에 액세스할 수 있어야 합니다. 자세한 내용은 
NGINX Management Suite를 참조하세요 . 사용 보고는 NGINX Ingress Controller를 위한 새로운 Flexible Consumption Program의 요구 사항입니다.

목차

1. 요구사항
2. NGINX Management Suite에 계정 추가
3. 사용 보고 배포
4. NGINX Management Suite API에서 사용 데이터 보기
5. 사용 보고 제거
6. 명령문 arguments

1.요구 사항

사용 보고를 배포하려면 다음과 같은 환경이어야합니다.

소프트웨어 요구 사항 외에 다음이 필요합니다.

  • 기본 인증을 위한 NGINX Management Suite 사용자 이름과 비밀번호에 액세스합니다.
    NGINX Management Suite 시스템의 URL과 Usage Reporting을 위한 사용자 이름과 비밀번호가 필요합니다. Usage Reporting 사용자 계정은 /api/platform/v1/k8s-usage 엔드포인트에 액세스할 수 있어야 합니다.
  • NGINX Ingress Controller가 배포된 Kubernetes 클러스터에 액세스하여 Kubernetes 배포 및 Kubernetes Secret를 배포할 수 있습니다.
  • 사용 보고 이미지를 가져오기 위한 공용 인터넷에 액세스되어 있어야합니다. 이 이미지는 NGINX 컨테이너 레지스트리에서 호스팅됩니다. docker-registry.nginx.com/cluster-connector. 이미지를 가져와서 배포를 위해 개인 컨테이너 레지스트리에 푸시할 수 있습니다.

2. NGINX Management Suite에 계정 추가

사용 보고에는 사용 데이터를 NGINX Instance Manager로 전송하기 위한 사용자 계정이 필요합니다.

1. NGINX MangetMent Suite 문서 – 역할 만들기에 있는 단계에 따라 역할을 만듭니다. 6단계에서 역할에 대한 권한을 선택합니다.

  • Module: Instance Manager
  • Feature: NGINX Plus Usage
  • Access: CRUD

2. NGINX Management Suite 문서 – 사용자 추가에 있는 단계에 따라 사용자 계정을 생성합니다. 6단계에서 위에서 만든 역할에 사용자를 할당합니다. 현재 사용 보고 목적으로는 “기본 인증” 인증만 지원됩니다.

3. 사용 보고 배포

NameSpace 생성

사용 현황 보고를 위한 Kubernetes NameSpace를 생성합니다. (nginx-cluster-connector)

kubectl create namespace nginx-cluster-connector

NGINX Management Suite API에 자격 증명 전달

사용 보고에서 자격 증명을 사용할 수 있으려면 Kubernetes secret을 만들어야합니다.
이전 계정 추가 과정에서 만든 사용자 계정이 NGINX Management Suite API에 연결하는데 필요합니다.

사용자 이름과 비밀번호는 모두 Kubernetes Secret에 저장되며 base64로 변환해야합니다.
예시입니다. 사용자 이름은 foo이고 비밀번호는 bar입니다.

base 64로 변경하기 위해 아래와 같은 명령문을 사용합니다.

echo -n 'foo' | base64
# Zm9v
echo -n 'bar' | base64
# YmFy

다음 내용을 텍스트 편집기에 추가하여 base64로 변환한 사용자의 이름과 비밀번호를 data 에 삽입합니다.

apiVersion: v1
kind: Secret
metadata:
  name: nms-basic-auth
  namespace: nginx-cluster-connector
type: kubernetes.io/basic-auth
data:
  username: Zm9v # base64 representation of 'foo'
  password: YmFy # base64 representation of 'bar'

위의 manifest를 nms-basic-auth.yaml이라는 파일에 저장합니다. 
예시에서 NameSpace는 nginx-cluster-connector(기본 네임스페이스)이고
Kubernetes Secret 이름은 nms-basic-auth입니다.

다른 Namespace를 사용하는 경우엔 metadata.namespace를 수정합니다.

참고: 사용 보고는 base64로 인코딩된 사용자 이름과 비밀번호를 사용하여 stringData가 아닌 데이터 형식의 기본 인증 비밀 유형만 지원합니다.

Kubernetes cluster에 Kubernetes Secret 배포

kubectl apply -f nms-basic-auth.yaml

NGINX Management Suite의 인증 자격 증명을 업데이트하는 경우 username및 password 필드를 업데이트하고 명령을 다시실행하여 변경 사항을 재배포합니다. 재배포 없이 변경사항을 자동으로 감지합니다.

배포파일 cluster-connector.yaml을 다운로드하고 저장합니다.
위의 다운로드 파일에서 args를 편집하고 저장합니다.

    args:
    - -nms-server-address=https://nms.example.com/api/platform/v1
    - -nms-basic-auth-secret=nginx-cluster-connector/nms-basic-auth
  • NGINX Management Suite 서버 호스트와 API 엔드포인트 조합인 API 주소여야합니다.
    ex )https://nms.example.com/api/platform/v1
  • 이전에 만들었던 Kubernetes Secret Namespace/이름이어야 합니다 
    nginx-cluster-connector/nms-basic-auth.

OpenShift에는 NGINX 클러스터 커넥터에 대한 SecurityContextConstraints 개체가 필요합니다.

shared-examples/에 있는 파일을 사용하여 oc create -f scc.yaml 명령으로 생성할 수 있습니다.

자세한 내용은 이 페이지의 명령줄 인수 섹션을 읽어보세요.

배포 완료

사용 보고 현황를 배포하려면 다음 명령을 실행하여 Kubernetes 클러스터에 배포하세요.

kubectl apply -f cluster-connector.yaml

4. NGINX Management Suite API에서 사용 데이터 보기

사용 보고는 클러스터의 NGINX Ingress Controller 인스턴스 및 노드 수를 NGINX Management Suite로 전송합니다. 사용 데이터를 보려면 NGINX Management Suite API에 요청합니다. 사용 데이터는 다음 엔드포인트에서 사용할 수 있습니다.

curl --user "foo:bar" https://nms.example.com/api/platform/v1/k8s-usage

요청시 아래와 같이 나오게됩니다.

{
  "items": [
    {
      "metadata": {
        "displayName": "my-cluster",
        "uid": "d290f1ee-6c54-4b01-90e6-d701748f0851",
        "createTime": "2023-01-27T09:12:33.001Z",
        "updateTime": "2023-01-29T10:12:33.001Z",
        "monthReturned": "May"
      },
      "node_count": 4,
      "max_node_count": 5,
      "pod_details": {
        "current_pod_counts": {
          "pod_count": 15,
          "waf_count": 5,
          "dos_count": 0
        },
        "max_pod_counts": {
          "max_pod_count": 25,
          "max_waf_count": 7,
          "max_dos_count": 1
        }
      }
    },
    {
      "metadata": {
        "displayName": "my-cluster2",
        "uid": "12tgb8ug-g8ik-bs7h-gj3j-hjitk672946hb",
        "createTime": "2023-01-25T09:12:33.001Z",
        "updateTime": "2023-01-26T10:12:33.001Z",
        "monthReturned": "May"
      },
      "node_count": 3,
      "max_node_count": 3,
      "pod_details": {
        "current_pod_counts": {
          "pod_count": 5,
          "waf_count": 5,
          "dos_count": 0
        },
        "max_pod_counts": {
          "max_pod_count": 15,
          "max_waf_count": 5,
          "max_dos_count": 0
        }
      }
    }
  ]
}

응답에서 각 클러스터에 대해 알기 쉬운 이름을 원하는 경우 사용량 보고를 배포할 때 -cluster-display-name 명령줄 인수를 사용하여 클러스터의 displayName을 지정할 수 있습니다. 응답에서 클러스터 이름에 해당하는 클러스터 uid를 볼 수 있습니다. 자세한 내용은 명령줄 인수 섹션을 참조하세요.

엔드포인트에서 클러스터 uid를 지정하여 특정 클러스터에 대한 사용량 데이터를 쿼리할 수 있습니다.
예시를 들면 다음과 같습니다.

curl --user "foo:bar" https://nms.example.com/api/platform/v1/k8s-usage/d290f1ee-6c54-4b01-90e6-d701748f0851
{
  "metadata": {
    "displayName": "my-cluster",
    "uid": "d290f1ee-6c54-4b01-90e6-d701748f0851",
    "createTime": "2023-01-27T09:12:33.001Z",
    "updateTime": "2023-01-29T10:12:33.001Z",
    "monthReturned": "May"
  },
  "node_count": 4,
  "max_node_count": 5,
  "pod_details": {
    "current_pod_counts": {
      "pod_count": 15,
      "waf_count": 5,
      "dos_count": 0
    },
    "max_pod_counts": {
      "max_pod_count": 25,
      "max_waf_count": 7,
      "max_dos_count": 1
    }
  }
}

5. 사용 보고 제거

Kubernetes 클러스터에서 사용 보고를 제거하려면 다음과 같은 명령문을 사용해야합니다.

kubectl delete -f cluster-connector.yaml

6. 명령문 arguments

사용 보고는 Kubernetes 배포 파일의 args section에 지정할 수 있는 여러 명령줄 인수를 지원합니다.

다음은 지원되는 명령줄 인수와 사용법 목록입니다.

-nms-server-address <string>

  • NGINX Management Suite 호스트의 주소입니다. IPv4 주소와 호스트 이름을 사용해야합니다.
    기본값: http://apigw.nms.svc.cluster.local/api/platform/v1/k8s-usage

-nms-basic-auth-secret <string>

  • NGINX Management Suite API에 대한 기본 인증을 위한 secret입니다. 비밀은 base64 인코딩을 사용하는 kubernetes.io/basic-auth 형식이어야 합니다. 형식: <namespace>/<secretname>.

-cluster-display-name <string>

  • Kubernetes 클러스터의 표시 이름입니다.

-skip-tls-verify

  • NGINX Management Suite 서버에 대한 TLS 검증을 건너뜁니다.
  • ※ 테스트 목적으로 자체 할당 인증서를 사용하기 위한 옵션입니다. ※

-min-update-interval <string>

  • NGINX Management Suite 업데이트 사이의 최소 간격. 기본값: 24h.
  • ※ 테스트 목적으로 사용됩니다. ※

지금 30일 무료 평가판을 시작하거나 NGINX STORE에 문의하여 NGINX Ingress Controller에 대해 상담 받아보세요.

NGINX STORE를 통한 솔루션 도입 및 기술지원 무료 상담 신청

* indicates required