

 **이 페이지 개선에 도움 주기** 

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 **GitHub에서 이 페이지 편집** 링크를 선택합니다.

# kro 기능 생성
<a name="create-kro-capability"></a>

이 주제에서는 Amazon EKS 클러스터에서 kro 기능을 생성하는 방법을 설명합니다.

## 사전 조건
<a name="_prerequisites"></a>

kro 기능을 생성하기 전에 다음이 있는지 확인합니다.
+ 지원되는 Kubernetes 버전(표준 및 확장 지원의 모든 버전이 지원됨)을 실행하는 기존 Amazon EKS 클러스터
+ EKS 클러스터에서 기능 리소스를 생성할 수 있는 충분한 IAM 권한
+ (CLI/eksctl의 경우) 설치 및 구성된 적절한 CLI 도구

**참고**  
ACK 및 Argo CD와 달리 kro에는 신뢰 정책 이외의 추가 IAM 권한이 필요하지 않습니다. kro는 전적으로 클러스터 내에서 작동하며 AWS API 직접 호출을 수행하지 않습니다. 하지만 여전히 IAM 기능 역할에 적절한 신뢰 정책을 제공해야 합니다. kro의 Kubernetes RBAC 권한 구성에 대한 자세한 내용은 [kro 권한 구성](kro-permissions.md) 섹션을 참조하세요.

## 도구 선택
<a name="_choose_your_tool"></a>

AWS Management Console, AWS CLI 또는 eksctl을 사용하여 kro 기능을 생성할 수 있습니다.
+  [콘솔을 사용하여 kro 기능 생성](kro-create-console.md) - 안내 경험을 이용하려면 콘솔 사용
+  [AWS CLI를 사용하여 kro 기능 생성](kro-create-cli.md) -스크립트 및 자동화를 이용하려면 AWS CLI 사용
+  [eksctl을 사용하여 kro 기능 생성](kro-create-eksctl.md) - Kubernetes 네이티브 경험을 이용하려면 eksctl 사용

## kro 기능을 생성할 때 상황
<a name="_what_happens_when_you_create_a_kro_capability"></a>

kro 기능을 생성하는 경우:

1. EKS는 kro 기능 서비스를 생성하고 클러스터의 리소스를 모니터링하고 관리하도록 이를 구성함

1. 사용자 지정 리소스 정의(CRD)가 클러스터에 설치됨

1. ResourceGraphDefinitions 및 해당 인스턴스를 관리할 권한을 부여하는 `AmazonEKSKROPolicy`를 사용하여 IAM 기능 역할에 대한 액세스 항목이 자동으로 생성됨([EKS 기능에 대한 보안 고려 사항](capabilities-security.md) 참조)

1. 기능에서 사용자가 제공하는 IAM 기능 역할(신뢰 관계에만 사용됨)을 수임함

1. kro에서 `ResourceGraphDefinition` 리소스 및 인스턴스 감시를 시작함

1. 기능 상태가 `CREATING`에서 `ACTIVE`로 변경됨 

활성 상태가 되면 ResourceGraphDefinitions를 생성하여 사용자 지정 API를 정의하고 해당 API의 인스턴스를 생성할 수 있습니다.

**참고**  
자동으로 생성된 액세스 항목에는 ResourceGraphDefinitions 및 해당 인스턴스를 관리할 권한을 kro에 부여하는 `AmazonEKSKROPolicy`가 포함됩니다. kro에서 ResourceGraphDefinitions에 정의된 기본 Kubernetes 리소스(예: 배포, 서비스 또는 ACK 리소스)를 생성하고 관리하려면 추가 액세스 항목 정책을 구성해야 합니다. 액세스 항목 및 추가 권한을 구성하는 방법에 대한 자세한 내용은 [kro 권한 구성](kro-permissions.md) 및 [EKS 기능에 대한 보안 고려 사항](capabilities-security.md) 섹션을 참조하세요.

## 다음 단계
<a name="_next_steps"></a>

kro 기능을 생성한 후:
+  [kro 개념](kro-concepts.md) - kro 개념 및 리소스 구성 이해
+  [kro 개념](kro-concepts.md) - SimpleSchema, CEL 표현식 및 리소스 구성 패턴에 대해 알아보기

# 콘솔을 사용하여 kro 기능 생성
<a name="kro-create-console"></a>

이 주제에서는 AWS Management Console을 사용하여 Kube Resource Orchestrator(kro) 기능을 생성하는 방법을 설명합니다.

## kro 기능 생성
<a name="_create_the_kro_capability"></a>

1. https://console.aws.amazon.com/eks/home\$1/clusters에서 Amazon EKS 콘솔을 엽니다.

1. 클러스터 이름을 선택하여 클러스터 세부 정보 페이지를 여세요.

1. **기능** 탭을 선택하세요.

1. 왼쪽 탐색에서 **Kube Resource Orchestrator(kro)**를 선택하세요.

1. **kro 기능 생성**을 선택하세요.

1. **IAM 기능 역할**의 경우:
   + IAM 기능 역할이 이미 있는 경우 드롭다운 선택
   + 역할을 생성해야 하는 경우 **kro 역할 생성** 선택 

     그러면 신뢰 정책이 미리 채워진 새 탭에서 IAM 콘솔이 열립니다. kro는 클러스터 내에서 완전히 작동하므로 역할에는 추가 IAM 권한이 필요하지 않습니다.

     역할을 생성한 후 EKS 콘솔로 돌아가면 역할이 자동으로 선택됩니다.
**참고**  
ACK 및 Argo CD와 달리 kro에는 신뢰 정책 이외의 추가 IAM 권한이 필요하지 않습니다. kro는 전적으로 클러스터 내에서 작동하며 AWS API 직접 호출을 수행하지 않습니다.

1. **생성(Create)**을 선택합니다.

기능 생성 프로세스가 시작됩니다.

## 기능이 활성 상태인지 확인
<a name="_verify_the_capability_is_active"></a>

1. **기능** 탭에서 kro 기능 상태를 확인하세요.

1. 상태가 `CREATING`에서 `ACTIVE`로 변경될 때까지 기다리세요.

1. 활성 상태가 되면 기능을 사용할 준비가 된 것입니다.

기능 상태 및 문제 해결에 대한 자세한 내용은 [기능 리소스 작업](working-with-capabilities.md) 섹션을 참조하세요.

## Kubernetes 리소스를 관리할 권한 부여
<a name="_grant_permissions_to_manage_kubernetes_resources"></a>

kro 기능을 생성하는 경우 `AmazonEKSKROPolicy`를 사용하여 EKS 액세스 항목이 자동으로 생성되며, 이를 통해 kro에서 ResourceGraphDefinitions 및 해당 인스턴스를 관리할 수 있습니다. 그러나 ResourceGraphDefinitions에 정의된 기본 Kubernetes 리소스(예: 배포, 서비스, ConfigMaps 등)를 생성하기 위한 권한은 기본적으로 부여되지 않습니다.

이 의도적인 설계는 최소 권한 원칙을 따르며, ResourceGraphDefinitions마다 필요한 권한이 다릅니다. ResourceGraphDefinitions에서 관리할 리소스에 따라 kro에 필요한 권한을 명시적으로 구성해야 합니다.

빠르게 시작하는 경우와 테스트 또는 개발 환경에서는 `AmazonEKSClusterAdminPolicy`를 사용합니다.

1. EKS 콘솔에서 클러스터의 **액세스** 탭으로 이동하세요.

1. **액세스 항목**에서 kro 기능 역할에 대한 항목(이전에 생성한 역할 ARN이 있음)을 찾으세요.

1. 액세스 항목을 선택하여 세부 정보를 여세요.

1. **액세스 정책** 섹션에서 **액세스 정책 연결**을 선택하세요.

1. 정책 목록에서 `AmazonEKSClusterAdminPolicy`를 선택하세요.

1. **액세스 범위**에서 **클러스터**를 선택하세요.

1. **** 연결을 선택합니다.

**중요**  
`AmazonEKSClusterAdminPolicy`는 모든 네임스페이스에서 모든 리소스 유형을 생성하는 기능을 포함하여 모든 Kubernetes 리소스를 생성 및 관리하는 광범위한 권한을 부여합니다. 이는 개발 및 POC에 편리하지만 프로덕션에서 사용해서는 안 됩니다. 프로덕션의 경우 ResourceGraphDefinitions에서 관리할 특정 리소스에 필요한 권한만 부여하는 사용자 지정 RBAC 정책을 생성합니다. 최소 권한 구성에 대한 지침은 [kro 권한 구성](kro-permissions.md) 및 [EKS 기능에 대한 보안 고려 사항](capabilities-security.md) 섹션을 참조하세요.

## 사용자 지정 리소스를 사용할 수 있는지 확인
<a name="_verify_custom_resources_are_available"></a>

기능이 활성 상태가 되면 클러스터에서 kro 사용자 지정 리소스를 사용할 수 있는지 확인합니다.

 **콘솔 사용** 

1. Amazon EKS 콘솔에서 클러스터로 이동

1. **리소스** 탭 선택

1. **확장** 선택 

1. **CustomResourceDefinitions** 선택 

`ResourceGraphDefinition` 리소스 유형이 나열됩니다.

 **kubectl 사용** 

```
kubectl api-resources | grep kro.run
```

`ResourceGraphDefinition` 리소스 유형이 나열됩니다.

## 다음 단계
<a name="_next_steps"></a>
+  [kro 개념](kro-concepts.md) - kro 개념 및 리소스 구성 이해
+  [kro 개념](kro-concepts.md) - SimpleSchema, CEL 표현식 및 구성 패턴에 대해 알아보기
+  [기능 리소스 작업](working-with-capabilities.md) - kro 기능 리소스 관리

# AWS CLI를 사용하여 kro 기능 생성
<a name="kro-create-cli"></a>

이 주제에서는 AWS CLI를 사용하여 Kube Resource Orchestrator(kro) 기능을 생성하는 방법을 설명합니다.

## 사전 조건
<a name="_prerequisites"></a>
+  **AWS CLI** – 버전 `2.12.3` 이상. 버전을 확인하려면 `aws --version`을 실행합니다. 자세한 내용은 AWS 명령줄 인터페이스 사용 설명서에서 [설치하기](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)를 참조하세요.
+  **`kubectl`** - Kubernetes 클러스터 작업을 위한 명령줄 도구. 자세한 내용은 [`kubectl` 및 `eksctl` 설정](install-kubectl.md) 섹션을 참조하세요.

## 1단계: IAM 기능 역할 생성
<a name="_step_1_create_an_iam_capability_role"></a>

신뢰 정책 파일을 생성합니다.

```
cat > kro-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}
EOF
```

IAM 역할을 생성합니다.

```
aws iam create-role \
  --role-name KROCapabilityRole \
  --assume-role-policy-document file://kro-trust-policy.json
```

**참고**  
ACK 및 Argo CD와 달리 kro에는 추가 IAM 권한이 필요하지 않습니다. kro는 전적으로 클러스터 내에서 작동하며 AWS API 직접 호출을 수행하지 않습니다. 역할은 EKS 기능 서비스와 신뢰 관계를 설정하는 데만 필요합니다.

## 2단계: kro 기능 생성
<a name="_step_2_create_the_kro_capability"></a>

클러스터에서 kro 기능 리소스를 생성합니다. *region-code*를 클러스터가 있는 AWS 리전(예: `us-west-2`)으로 바꾸고 *my-cluster*를 클러스터 이름으로 바꿉니다.

```
aws eks create-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro \
  --type KRO \
  --role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/KROCapabilityRole \
  --delete-propagation-policy RETAIN
```

명령은 즉시 반환되지만, EKS가 필요한 기능 인프라 및 구성 요소를 생성하므로 기능이 활성 상태가 되려면 다소 시간이 걸립니다. EKS는 생성될 때 클러스터에서 이 기능과 관련된 Kubernetes 사용자 지정 리소스 정의를 설치합니다.

**참고**  
클러스터가 존재하지 않는다는 오류가 발생하거나 권한이 없는 경우 다음을 확인합니다.  
클러스터 이름이 올바른지
AWS CLI가 올바른 리전에 구성되었는지
필요한 IAM 권한이 있음

## 3단계: 기능이 활성 상태인지 확인
<a name="_step_3_verify_the_capability_is_active"></a>

기능이 활성 상태가 될 때까지 기다립니다. *region-code*를 클러스터를 생성한 AWS 리전으로 바꾸고 *my-cluster*를 클러스터 이름으로 바꿉니다.

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro \
  --query 'capability.status' \
  --output text
```

상태가 `ACTIVE`로 표시되면 기능이 준비된 것입니다.

전체 기능 세부 정보를 볼 수도 있습니다.

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro
```

## 4단계: Kubernetes 리소스를 관리할 권한 부여
<a name="_step_4_grant_permissions_to_manage_kubernetes_resources"></a>

kro 기능을 생성하는 경우 `AmazonEKSKROPolicy`를 사용하여 EKS 액세스 항목이 자동으로 생성되며, 이를 통해 kro에서 ResourceGraphDefinitions 및 해당 인스턴스를 관리할 수 있습니다. 그러나 ResourceGraphDefinitions에 정의된 기본 Kubernetes 리소스(예: 배포, 서비스, ConfigMaps 등)를 생성하기 위한 권한은 기본적으로 부여되지 않습니다.

이 의도적인 설계는 최소 권한 원칙을 따르며, ResourceGraphDefinitions마다 필요한 권한이 다릅니다. 예: \$1 ConfigMaps 및 Secrets만 생성하는 ResourceGraphDefinition에는 배포 및 서비스를 생성하는 권한과 다른 권한이 필요함 \$1 ACK 리소스를 생성하는 ResourceGraphDefinition에는 해당 특정 사용자 지정 리소스에 대한 권한이 필요함 \$1 일부 ResourceGraphDefinitions는 새 리소스를 생성하지 않고 기존 리소스만 읽을 수 있음

ResourceGraphDefinitions에서 관리할 리소스에 따라 kro에 필요한 권한을 명시적으로 구성해야 합니다.

### 빠른 설정
<a name="_quick_setup"></a>

빠르게 시작하는 경우와 테스트 또는 개발 환경에서는 `AmazonEKSClusterAdminPolicy`를 사용합니다.

기능 역할 ARN을 가져옵니다.

```
CAPABILITY_ROLE_ARN=$(aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro \
  --query 'capability.roleArn' \
  --output text)
```

클러스터 관리 정책을 연결합니다.

```
aws eks associate-access-policy \
  --region region-code \
  --cluster-name my-cluster \
  --principal-arn $CAPABILITY_ROLE_ARN \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
  --access-scope type=cluster
```

**중요**  
`AmazonEKSClusterAdminPolicy`는 모든 네임스페이스에서 모든 리소스 유형을 생성하는 기능을 포함하여 모든 Kubernetes 리소스를 생성 및 관리하는 광범위한 권한을 부여합니다. 이는 개발 및 POC에 편리하지만 프로덕션에서 사용해서는 안 됩니다. 프로덕션의 경우 ResourceGraphDefinitions에서 관리할 특정 리소스에 필요한 권한만 부여하는 사용자 지정 RBAC 정책을 생성합니다. 최소 권한 구성에 대한 지침은 [kro 권한 구성](kro-permissions.md) 및 [EKS 기능에 대한 보안 고려 사항](capabilities-security.md) 섹션을 참조하세요.

## 5단계: 사용자 지정 리소스를 사용할 수 있는지 확인
<a name="_step_5_verify_custom_resources_are_available"></a>

기능이 활성 상태가 되면 클러스터에서 kro 사용자 지정 리소스를 사용할 수 있는지 확인합니다.

```
kubectl api-resources | grep kro.run
```

`ResourceGraphDefinition` 리소스 유형이 나열됩니다.

## 다음 단계
<a name="_next_steps"></a>
+  [kro 개념](kro-concepts.md) - kro 개념 및 리소스 구성 이해
+  [kro 개념](kro-concepts.md) - SimpleSchema, CEL 표현식 및 구성 패턴에 대해 알아보기
+  [기능 리소스 작업](working-with-capabilities.md) - kro 기능 리소스 관리

# eksctl을 사용하여 kro 기능 생성
<a name="kro-create-eksctl"></a>

이 주제에서는 eksctl을 사용하여 Kube Resource Orchestrator(kro) 기능을 생성하는 방법을 설명합니다.

**참고**  
다음 단계에서는 eksctl 버전 `0.220.0` 이상이 필요합니다. 버전을 확인하려면 `eksctl version`을 실행합니다.

## 1단계: IAM 기능 역할 생성
<a name="_step_1_create_an_iam_capability_role"></a>

신뢰 정책 파일을 생성합니다.

```
cat > kro-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}
EOF
```

IAM 역할을 생성합니다.

```
aws iam create-role \
  --role-name KROCapabilityRole \
  --assume-role-policy-document file://kro-trust-policy.json
```

**참고**  
ACK 및 Argo CD와 달리 kro에는 신뢰 정책 이외의 추가 IAM 권한이 필요하지 않습니다. kro는 전적으로 클러스터 내에서 작동하며 AWS API 직접 호출을 수행하지 않습니다.

## 2단계: kro 기능 생성
<a name="_step_2_create_the_kro_capability"></a>

eksctl을 사용하여 kro 기능을 생성합니다. *region-code*를 클러스터를 생성한 AWS 리전으로 바꾸고 *my-cluster*를 클러스터 이름으로 바꿉니다.

```
eksctl create capability \
  --region region-code \
  --cluster my-cluster \
  --name my-kro \
  --type KRO \
  --role-arn arn:aws:iam::[.replaceable]111122223333:role/KROCapabilityRole
```

명령은 즉시 반환되지만 기능이 활성 상태가 되려면 다소 시간이 걸립니다.

## 3단계: 기능이 활성 상태인지 확인
<a name="_step_3_verify_the_capability_is_active"></a>

기능 상태를 확인합니다. *region-code*를 클러스터를 생성한 AWS 리전으로 바꾸고 *my-cluster*를 클러스터 이름으로 바꿉니다.

```
eksctl get capability \
  --region region-code \
  --cluster my-cluster \
  --name my-kro
```

상태가 `ACTIVE`로 표시되면 기능이 준비된 것입니다.

## 4단계: Kubernetes 리소스를 관리할 권한 부여
<a name="_step_4_grant_permissions_to_manage_kubernetes_resources"></a>

기본적으로 kro는 ResourceGraphDefinitions 및 해당 인스턴스만 생성하고 관리할 수 있습니다. kro가 ResourceGraphDefinitions에 정의된 기본 Kubernetes 리소스를 생성하고 관리할 수 있도록 하려면 `AmazonEKSClusterAdminPolicy` 액세스 정책을 기능의 액세스 항목에 연결합니다.

기능 역할 ARN을 가져옵니다.

```
CAPABILITY_ROLE_ARN=$(aws eks describe-capability \
  --region region-code \
  --cluster my-cluster \
  --name my-kro \
  --query 'capability.roleArn' \
  --output text)
```

클러스터 관리 정책을 연결합니다.

```
aws eks associate-access-policy \
  --region region-code \
  --cluster my-cluster \
  --principal-arn $CAPABILITY_ROLE_ARN \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
  --access-scope type=cluster
```

**중요**  
`AmazonEKSClusterAdminPolicy`는 모든 Kubernetes 리소스를 생성하고 관리할 수 있는 광범위한 권한을 부여하며 시작을 간소화하기 위해 제공됩니다. 프로덕션 사용 시 ResourceGraphDefinitions에서 관리할 특정 리소스에 필요한 권한만 부여하는 보다 제한적인 RBAC 정책을 생성합니다. 최소 권한 구성에 대한 지침은 [kro 권한 구성](kro-permissions.md) 및 [EKS 기능에 대한 보안 고려 사항](capabilities-security.md) 섹션을 참조하세요.

## 5단계: 사용자 지정 리소스를 사용할 수 있는지 확인
<a name="_step_5_verify_custom_resources_are_available"></a>

기능이 활성 상태가 되면 클러스터에서 kro 사용자 지정 리소스를 사용할 수 있는지 확인합니다.

```
kubectl api-resources | grep kro.run
```

`ResourceGraphDefinition` 리소스 유형이 나열됩니다.

## 다음 단계
<a name="_next_steps"></a>
+  [kro 개념](kro-concepts.md) - kro 개념 및 리소스 구성 이해
+  [kro 개념](kro-concepts.md) - SimpleSchema, CEL 표현식 및 구성 패턴에 대해 알아보기
+  [기능 리소스 작업](working-with-capabilities.md) - kro 기능 리소스 관리