InfoGrab Docs

Kubernetes 클러스터 자동 검색

요약

Kubernetes 클러스터 자동 검색을 사용하면 클라우드 공급자에서 호스팅되는 Kubernetes 클러스터를 자동으로 검색하고 등록할 수 있습니다. 새로운 Kubernetes 클러스터를 검색하는 동안 Teleport는 클러스터에 어떤 구성 요소도 설치하지 않습니다.

Kubernetes 클러스터 자동 검색을 사용하면 클라우드 공급자에서 호스팅되는 Kubernetes 클러스터를 자동으로 검색하고 등록할 수 있습니다.

새로운 Kubernetes 클러스터를 검색하는 동안 Teleport는 클러스터에 어떤 구성 요소도 설치하지 않습니다. 대신, 클러스터의 API에 대한 직접 접근과 최소한의 접근 권한이 필요합니다.

지원되는 클라우드#

  • AWS: AWS EKS 클러스터에 대한 자동 검색.
  • Azure: Azure AKS 클러스터에 대한 자동 검색.
  • Google Cloud: Google Kubernetes Engine 클러스터에 대한 자동 검색.

Kubernetes 클러스터 자동 검색 작동 방식#

Kubernetes 클러스터 자동 검색은 두 단계로 이루어집니다:

클라우드 API 폴링#

Teleport Discovery Service는 설정된 클라우드 공급자를 스캔하고 Kubernetes 클러스터가 필터링 레이블 집합과 일치하는지 식별하는 역할을 합니다. 프로세스가 새로운 Kubernetes 클러스터를 식별하면 Teleport 내에 동적 리소스를 생성합니다. 이 리소스에는 클라우드 공급자에서 가져온 다음과 같은 정보가 포함됩니다:

  • 이름: 클러스터 이름
  • 레이블
    • 클러스터 태그.
    • 클러스터 위치.
    • 클러스터가 속한 클라우드 계정 식별 — AWS 계정 ID / Azure 구독 ID.
Tip

Teleport 레지스트리에 클러스터를 다른 이름으로 가져올 수 있습니다. 이를 위해서는 클라우드 공급자의 리소스(EKS, AKS, GKE)에 다음 태그를 추가해야 합니다:

  • : TeleportKubernetesName
  • : 원하는 이름

Discovery Service는 클러스터에 해당 태그가 포함되어 있는지 확인하고 해당 값을 Teleport의 리소스 이름으로 사용합니다.

동일한 이름을 가진 클러스터가 서로 다른 리전/클라우드 공급자에 있어 Teleport에서 충돌이 발생하는 경우 이 기능을 사용해야 합니다.

새로운 Kubernetes 클러스터를 감지하는 것 외에도, Discovery Service는 삭제되었거나 태그가 더 이상 필터링 레이블을 충족하지 않는 Kubernetes 클러스터를 Teleport 레지스트리에서 제거합니다.

다음 스니펫은 Discovery Service의 다양한 설정 옵션과 기본값을 설명합니다.

# 이 섹션은 Discovery Service를 설정합니다
discovery_service:
    enabled: true
    discovery_group: "prod"
    aws:
       # AWS 리소스 유형. 유효한 옵션은 다음과 같습니다:
       # eks - AWS EKS 클러스터를 검색하고 등록합니다
       # ec2 - AWS EC2 머신을 검색하고 등록합니다
     - types: ["eks"]
       # 리소스를 검색할 AWS 리전
       regions: ["us-east-1", "us-west-1"]
       # 리소스 등록 시 일치시킬 AWS 리소스 태그
       # 선택적 섹션: 기본값은 "*":"*"
       tags:
         "env": "prod"
       # AWS 계정에서 리소스를 검색할 때 위임할 AWS 역할.
       # EKS 클러스터 폴링 시 위임할 선택적 AWS 역할 ARN 값입니다
       assume_role_arn: arn:aws:iam::123456789012:role/iam-discovery-role
       # External ID는 서드파티 서비스(위임된 접근)에서 AWS 계정에 접근할 때
       # 설정해야 하는 선택적 값입니다.
       external_id: "example-external-id"
       # Discovery Service가 EKS 접근 항목을 생성해야 할 선택적 역할.
       # 설정하지 않으면 Discovery Service는 자체 ID를 사용하여 접근 항목을 생성합니다.
       # 사용 시 역할은 Teleport Kubernetes Service에 설정된 역할과 일치해야 합니다.
       setup_access_for_arn: arn:aws:iam::123456789012:role/kube-service-role
    # Azure 호스팅 리소스 검색을 위한 매처.
    azure:
      # Azure 리소스 유형. 유효한 옵션은 다음과 같습니다:
      # 'aks' - Azure AKS Kubernetes 클러스터를 검색하고 등록합니다.
    - types: ["aks"]
      # 리소스를 검색할 Azure 리전. 유효한 옵션은 다음과 같습니다:
      # '*' - 모든 리전에서 리소스를 검색합니다(기본값).
      # 유효한 Azure 리전 이름. Azure "az" CLI 사용: `az account list-locations -o table`
      regions: ["*"]
      # 리소스를 검색할 Azure 구독 ID. 유효한 옵션은 다음과 같습니다:
      # '*' - 모든 구독에서 리소스를 검색합니다(기본값).
      # 구독 ID: `az account subscription list -o table`
      subscriptions: ["*"]
      # 리소스를 검색할 Azure 리소스 그룹. 유효한 옵션은 다음과 같습니다:
      # '*' - 설정된 구독 내 모든 리소스 그룹에서 리소스를 검색합니다(기본값).
      # 리소스 그룹: `az group list -o table`
      resource_groups: ["*"]
      # 리소스 일치에 사용되는 Azure 리소스 태그 필터.
      # 선택적 섹션: 기본값은 "*":"*"
      tags:
        "env": "prod"
    # GCP 호스팅 리소스 검색을 위한 매처.
    gcp:
      # GCP 리소스 유형. 유효한 옵션은 다음과 같습니다:
      # 'gke' - GCP GKE Kubernetes 클러스터를 검색하고 등록합니다.
    - types: ["gke"]
      # 리소스를 검색할 GCP 위치. 유효한 옵션은 다음과 같습니다:
      # '*' - 모든 위치에서 리소스를 검색합니다(기본값).
      # 유효한 GCP 리전 또는 영역 이름.
      locations: ["*"]
      # GCP 프로젝트 ID
      project_ids: ["myproject"]
      # 리소스 일치에 사용되는 GCP 리소스 태그 필터.
      # 선택적 섹션: 기본값은 "*":"*"
      tags:
        "*" : "*"

Kubernetes 클러스터로 요청 전달#

Teleport Kubernetes Service는 Discovery Service가 생성하거나 업데이트한 동적 리소스를 모니터링하고 해당 리소스가 나타내는 Kubernetes 클러스터로 요청을 전달하는 역할을 합니다. 올바르게 작동하려면 대상 Kubernetes 클러스터에 대한 직접 접근과 요청을 전달할 수 있는 권한이 필요합니다.

Kubernetes Service에서 동적 리소스 모니터링을 활성화하려면 다음 스니펫과 같이 kubernetes_service.resources 섹션을 설정해야 합니다:

## 이 섹션은 Kubernetes Service를 설정합니다
kubernetes_service:
    enabled: true
    # "tctl create" 명령 또는 Kubernetes 자동 검색으로 생성된 동적 Kubernetes 클러스터 리소스를 위한 매처.
    resources:
    - labels:
        "*": "*" # 이 서비스가 감시하는 클러스터를 제한하도록 설정할 수 있습니다.
      aws:
       # AWS 계정의 EKS 클러스터에 접근할 때 위임할 AWS 역할.
       # EKS 클러스터로 요청을 전달할 때 위임할 선택적 AWS 역할 ARN 값입니다.
       assume_role_arn: arn:aws:iam::123456789012:role/iam-discovery-role
       # External ID는 서드파티 서비스(위임된 접근)에서 AWS 계정에 접근할 때
       # 설정해야 하는 선택적 값입니다.
       external_id: "example-external-id"

kubernetes_service.resources 매개변수를 설정하면 Teleport Kubernetes Service는 Teleport Discovery Service가 검색한 EKS 클러스터를 모니터링하도록 설정됩니다. 모니터링 프로세스는 레이블 매칭 메커니즘을 사용하여 EKS 클러스터를 식별하고 관리합니다.

  1. 검색 및 레이블 매칭: Discovery Service는 AWS 환경 내에서 사용 가능한 EKS 클러스터를 식별합니다. Teleport Kubernetes Service는 이 클러스터의 레이블을 선택기 배열kubernetes_service.resources[].labels 설정에 지정된 레이블과 비교합니다.
  2. 역할 선택: EKS 클러스터의 레이블과 일치하는 배열의 첫 번째 선택기가 Kubernetes Service가 위임할 역할을 결정합니다. 이 역할은 Teleport Kubernetes Service가 AWS API에서 필요한 클러스터 세부 정보를 가져오기 위해 필수적입니다. 일치하는 항목이 없으면 Kubernetes Service는 자체 ID를 기본으로 사용합니다.
  3. AWS 및 Kubernetes API와의 상호작용: 일치 항목이 발견되고 역할이 위임되면 Teleport Kubernetes Service는 이 역할을 사용하여 AWS API에 접근합니다. 설정 및 상태와 같은 EKS 클러스터에 대한 정보를 가져옵니다. 이후 Teleport Kubernetes Service는 클러스터와의 상호작용을 가능하게 하는 Kubernetes API로 요청을 전달합니다.

Discovery Service와 Kubernetes Service 모두 동일한 Teleport 프로세스 또는 별도의 프로세스에서 설정할 수 있습니다.

Kubernetes 클러스터 자동 검색

원문 보기
요약

Kubernetes 클러스터 자동 검색을 사용하면 클라우드 공급자에서 호스팅되는 Kubernetes 클러스터를 자동으로 검색하고 등록할 수 있습니다. 새로운 Kubernetes 클러스터를 검색하는 동안 Teleport는 클러스터에 어떤 구성 요소도 설치하지 않습니다.

Kubernetes 클러스터 자동 검색을 사용하면 클라우드 공급자에서 호스팅되는 Kubernetes 클러스터를 자동으로 검색하고 등록할 수 있습니다.

새로운 Kubernetes 클러스터를 검색하는 동안 Teleport는 클러스터에 어떤 구성 요소도 설치하지 않습니다. 대신, 클러스터의 API에 대한 직접 접근과 최소한의 접근 권한이 필요합니다.

지원되는 클라우드#

  • AWS: AWS EKS 클러스터에 대한 자동 검색.
  • Azure: Azure AKS 클러스터에 대한 자동 검색.
  • Google Cloud: Google Kubernetes Engine 클러스터에 대한 자동 검색.

Kubernetes 클러스터 자동 검색 작동 방식#

Kubernetes 클러스터 자동 검색은 두 단계로 이루어집니다:

클라우드 API 폴링#

Teleport Discovery Service는 설정된 클라우드 공급자를 스캔하고 Kubernetes 클러스터가 필터링 레이블 집합과 일치하는지 식별하는 역할을 합니다. 프로세스가 새로운 Kubernetes 클러스터를 식별하면 Teleport 내에 동적 리소스를 생성합니다. 이 리소스에는 클라우드 공급자에서 가져온 다음과 같은 정보가 포함됩니다:

  • 이름: 클러스터 이름
  • 레이블
    • 클러스터 태그.
    • 클러스터 위치.
    • 클러스터가 속한 클라우드 계정 식별 — AWS 계정 ID / Azure 구독 ID.
Tip

Teleport 레지스트리에 클러스터를 다른 이름으로 가져올 수 있습니다. 이를 위해서는 클라우드 공급자의 리소스(EKS, AKS, GKE)에 다음 태그를 추가해야 합니다:

  • : TeleportKubernetesName
  • : 원하는 이름

Discovery Service는 클러스터에 해당 태그가 포함되어 있는지 확인하고 해당 값을 Teleport의 리소스 이름으로 사용합니다.

동일한 이름을 가진 클러스터가 서로 다른 리전/클라우드 공급자에 있어 Teleport에서 충돌이 발생하는 경우 이 기능을 사용해야 합니다.

새로운 Kubernetes 클러스터를 감지하는 것 외에도, Discovery Service는 삭제되었거나 태그가 더 이상 필터링 레이블을 충족하지 않는 Kubernetes 클러스터를 Teleport 레지스트리에서 제거합니다.

다음 스니펫은 Discovery Service의 다양한 설정 옵션과 기본값을 설명합니다.

# 이 섹션은 Discovery Service를 설정합니다
discovery_service:
    enabled: true
    discovery_group: "prod"
    aws:
       # AWS 리소스 유형. 유효한 옵션은 다음과 같습니다:
       # eks - AWS EKS 클러스터를 검색하고 등록합니다
       # ec2 - AWS EC2 머신을 검색하고 등록합니다
     - types: ["eks"]
       # 리소스를 검색할 AWS 리전
       regions: ["us-east-1", "us-west-1"]
       # 리소스 등록 시 일치시킬 AWS 리소스 태그
       # 선택적 섹션: 기본값은 "*":"*"
       tags:
         "env": "prod"
       # AWS 계정에서 리소스를 검색할 때 위임할 AWS 역할.
       # EKS 클러스터 폴링 시 위임할 선택적 AWS 역할 ARN 값입니다
       assume_role_arn: arn:aws:iam::123456789012:role/iam-discovery-role
       # External ID는 서드파티 서비스(위임된 접근)에서 AWS 계정에 접근할 때
       # 설정해야 하는 선택적 값입니다.
       external_id: "example-external-id"
       # Discovery Service가 EKS 접근 항목을 생성해야 할 선택적 역할.
       # 설정하지 않으면 Discovery Service는 자체 ID를 사용하여 접근 항목을 생성합니다.
       # 사용 시 역할은 Teleport Kubernetes Service에 설정된 역할과 일치해야 합니다.
       setup_access_for_arn: arn:aws:iam::123456789012:role/kube-service-role
    # Azure 호스팅 리소스 검색을 위한 매처.
    azure:
      # Azure 리소스 유형. 유효한 옵션은 다음과 같습니다:
      # 'aks' - Azure AKS Kubernetes 클러스터를 검색하고 등록합니다.
    - types: ["aks"]
      # 리소스를 검색할 Azure 리전. 유효한 옵션은 다음과 같습니다:
      # '*' - 모든 리전에서 리소스를 검색합니다(기본값).
      # 유효한 Azure 리전 이름. Azure "az" CLI 사용: `az account list-locations -o table`
      regions: ["*"]
      # 리소스를 검색할 Azure 구독 ID. 유효한 옵션은 다음과 같습니다:
      # '*' - 모든 구독에서 리소스를 검색합니다(기본값).
      # 구독 ID: `az account subscription list -o table`
      subscriptions: ["*"]
      # 리소스를 검색할 Azure 리소스 그룹. 유효한 옵션은 다음과 같습니다:
      # '*' - 설정된 구독 내 모든 리소스 그룹에서 리소스를 검색합니다(기본값).
      # 리소스 그룹: `az group list -o table`
      resource_groups: ["*"]
      # 리소스 일치에 사용되는 Azure 리소스 태그 필터.
      # 선택적 섹션: 기본값은 "*":"*"
      tags:
        "env": "prod"
    # GCP 호스팅 리소스 검색을 위한 매처.
    gcp:
      # GCP 리소스 유형. 유효한 옵션은 다음과 같습니다:
      # 'gke' - GCP GKE Kubernetes 클러스터를 검색하고 등록합니다.
    - types: ["gke"]
      # 리소스를 검색할 GCP 위치. 유효한 옵션은 다음과 같습니다:
      # '*' - 모든 위치에서 리소스를 검색합니다(기본값).
      # 유효한 GCP 리전 또는 영역 이름.
      locations: ["*"]
      # GCP 프로젝트 ID
      project_ids: ["myproject"]
      # 리소스 일치에 사용되는 GCP 리소스 태그 필터.
      # 선택적 섹션: 기본값은 "*":"*"
      tags:
        "*" : "*"

Kubernetes 클러스터로 요청 전달#

Teleport Kubernetes Service는 Discovery Service가 생성하거나 업데이트한 동적 리소스를 모니터링하고 해당 리소스가 나타내는 Kubernetes 클러스터로 요청을 전달하는 역할을 합니다. 올바르게 작동하려면 대상 Kubernetes 클러스터에 대한 직접 접근과 요청을 전달할 수 있는 권한이 필요합니다.

Kubernetes Service에서 동적 리소스 모니터링을 활성화하려면 다음 스니펫과 같이 kubernetes_service.resources 섹션을 설정해야 합니다:

## 이 섹션은 Kubernetes Service를 설정합니다
kubernetes_service:
    enabled: true
    # "tctl create" 명령 또는 Kubernetes 자동 검색으로 생성된 동적 Kubernetes 클러스터 리소스를 위한 매처.
    resources:
    - labels:
        "*": "*" # 이 서비스가 감시하는 클러스터를 제한하도록 설정할 수 있습니다.
      aws:
       # AWS 계정의 EKS 클러스터에 접근할 때 위임할 AWS 역할.
       # EKS 클러스터로 요청을 전달할 때 위임할 선택적 AWS 역할 ARN 값입니다.
       assume_role_arn: arn:aws:iam::123456789012:role/iam-discovery-role
       # External ID는 서드파티 서비스(위임된 접근)에서 AWS 계정에 접근할 때
       # 설정해야 하는 선택적 값입니다.
       external_id: "example-external-id"

kubernetes_service.resources 매개변수를 설정하면 Teleport Kubernetes Service는 Teleport Discovery Service가 검색한 EKS 클러스터를 모니터링하도록 설정됩니다. 모니터링 프로세스는 레이블 매칭 메커니즘을 사용하여 EKS 클러스터를 식별하고 관리합니다.

  1. 검색 및 레이블 매칭: Discovery Service는 AWS 환경 내에서 사용 가능한 EKS 클러스터를 식별합니다. Teleport Kubernetes Service는 이 클러스터의 레이블을 선택기 배열kubernetes_service.resources[].labels 설정에 지정된 레이블과 비교합니다.
  2. 역할 선택: EKS 클러스터의 레이블과 일치하는 배열의 첫 번째 선택기가 Kubernetes Service가 위임할 역할을 결정합니다. 이 역할은 Teleport Kubernetes Service가 AWS API에서 필요한 클러스터 세부 정보를 가져오기 위해 필수적입니다. 일치하는 항목이 없으면 Kubernetes Service는 자체 ID를 기본으로 사용합니다.
  3. AWS 및 Kubernetes API와의 상호작용: 일치 항목이 발견되고 역할이 위임되면 Teleport Kubernetes Service는 이 역할을 사용하여 AWS API에 접근합니다. 설정 및 상태와 같은 EKS 클러스터에 대한 정보를 가져옵니다. 이후 Teleport Kubernetes Service는 클러스터와의 상호작용을 가능하게 하는 Kubernetes API로 요청을 전달합니다.

Discovery Service와 Kubernetes Service 모두 동일한 Teleport 프로세스 또는 별도의 프로세스에서 설정할 수 있습니다.