

 **Ajudar a melhorar esta página** 

Para contribuir com este guia de usuário, escolha o link **Editar esta página no GitHub**, disponível no painel direito de cada página.

# Criação de uma funcionalidade do kro
<a name="create-kro-capability"></a>

Este tópico explica como criar uma funcionalidade do kro no cluster do Amazon EKS.

## Pré-requisitos
<a name="_prerequisites"></a>

Antes de criar uma funcionalidade do kro, certifique-se de ter:
+ Um cluster do Amazon EKS existente executando uma versão compatível do Kubernetes (há suporte para todas as versões nos períodos de suporte padrão e estendido)
+ Permissões do IAM suficientes para criar recursos de funcionalidades em clusters de EKS
+ (Para a CLI ou o eksctl) A ferramenta de CLI apropriada instalada e configurada

**nota**  
Ao contrário do ACK e do Argo CD, o kro não requer permissões do IAM adicionais além da política de confiança. O kro opera inteiramente no cluster e não faz chamadas de API da AWS. Contudo, ainda é necessário fornecer um perfil do IAM para a funcionalidade com a política de confiança apropriada. Para obter informações sobre como configurar as permissões de RBAC do Kubernetes para o kro, consulte [Configuração de permissões do kro](kro-permissions.md).

## Escolha da ferramenta
<a name="_choose_your_tool"></a>

É possível criar uma funcionalidade do kro por meio do Console de gerenciamento da AWS, da AWS CLI ou do eksctl:
+  [Criação de uma funcionalidade do kro por meio do Console](kro-create-console.md): use o Console para obter uma experiência guiada
+  [Criação de uma funcionalidade do kro por meio da AWS CLI](kro-create-cli.md): use a AWS CLI para obter scripts e automação
+  [Criação de uma funcionalidade do kro por meio do eksctl](kro-create-eksctl.md): use o eksctl para obter uma experiência nativa do Kubernetes

## O que ocorre durante a criação de uma funcionalidade do kro
<a name="_what_happens_when_you_create_a_kro_capability"></a>

Ao criar uma funcionalidade do kro:

1. O EKS cria o serviço da funcionalidade do kro e o configura para monitorar e gerenciar recursos no cluster

1. As definições de recursos personalizados (CRDs, na sigla em inglês) são instaladas no cluster

1. Uma entrada de acesso é criada automaticamente para seu perfil de funcionalidade do IAM com a `AmazonEKSKROPolicy`, que concede permissões para gerenciar ResourceGraphDefinitions e suas instâncias (consulte [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md))

1. A funcionalidade assume o perfil do IAM para a funcionalidade, que foi fornecido por você (e é usado somente para a relação de confiança)

1. O kro começa a monitorar recursos da `ResourceGraphDefinition` e as respectivas instâncias

1. O status da funcionalidade é alterado de `CREATING` para `ACTIVE` 

Uma vez ativa, é possível criar ResourceGraphDefinitions para definir APIs personalizadas e criar instâncias dessas APIs.

**nota**  
A entrada de acesso criada automaticamente inclui a `AmazonEKSKROPolicy`, que concede permissões do kro para gerenciar ResourceGraphDefinitions e suas instâncias. Para permitir que o kro crie os recursos subjacentes do Kubernetes definidos em suas ResourceGraphDefinitions (como Deployments, Services ou recursos do ACK), é necessário configurar políticas de entrada de acesso adicionais. Para saber mais sobre entradas de acesso e como configurar permissões adicionais, consulte [Configuração de permissões do kro](kro-permissions.md) e [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md).

## Próximas etapas
<a name="_next_steps"></a>

Após criar a funcionalidade do kro:
+  [Conceitos do kro](kro-concepts.md): compreenda os conceitos do kro e a composição de recursos
+  [Conceitos do kro](kro-concepts.md): saiba mais sobre o SimpleSchema, expressões CEL e padrões de composição de recursos

# Criação de uma funcionalidade do kro por meio do Console
<a name="kro-create-console"></a>

Este tópico descreve como criar uma funcionalidade do kro (Kube Resource Orchestrator) usando o Console de gerenciamento da AWS.

## Criação da funcionalidade do kro
<a name="_create_the_kro_capability"></a>

1. Abra o console do Amazon EKS em https://console.aws.amazon.com/eks/home\$1/clusters.

1. Selecione o nome do cluster para abrir a página de detalhes do cluster.

1. Escolha a guia **Funcionalidades**.

1. No painel de navegação à esquerda, escolha **kro (Kube Resource Orchestrator)**.

1. Selecione **Criar funcionalidade do kro**.

1. No **perfil da funcionalidade do IAM**:
   + Se você já tiver um perfil da funcionalidade do IAM, selecione-o no menu suspenso
   + Se a criação de um perfil for necessária, escolha **Criar perfil do kro** 

     Isso abre o console do IAM em uma nova guia com a política de confiança preenchida previamente. O perfil não requer permissões do IAM adicionais, uma vez que o kro opera inteiramente no cluster.

     Após criar o perfil, retorne ao console do EKS e o perfil será selecionado automaticamente.
**nota**  
Ao contrário do ACK e do Argo CD, o kro não requer permissões do IAM adicionais além da política de confiança. O kro opera inteiramente no cluster e não faz chamadas de API da AWS.

1. Escolha **Criar**.

O processo de criação da funcionalidade é iniciado.

## Verificação da ativação da funcionalidade
<a name="_verify_the_capability_is_active"></a>

1. Na guia **Funcionalidades**, visualize o status da funcionalidade do kro.

1. Aguarde até que o status mude de `CREATING` para `ACTIVE`.

1. Assim que estiver com o status ativo, a funcionalidade estará pronta para uso.

Para obter informações sobre os status das funcionalidades e sobre a solução de problemas, consulte [Como trabalhar com recursos de funcionalidade](working-with-capabilities.md).

## Concessão de permissões para o gerenciamento de recursos do Kubernetes
<a name="_grant_permissions_to_manage_kubernetes_resources"></a>

Quando você cria um recurso kro, uma entrada de acesso do EKS é criada automaticamente com a `AmazonEKSKROPolicy`, o que permite que o kro gerencie ResourceGraphDefinitions e suas instâncias. Contudo, nenhuma permissão é concedida por padrão para criar os recursos subjacentes do Kubernetes (como implantações, serviços, ConfigMaps etc.) definidos em suas ResourceGraphDefinitions.

Esse design intencional segue o princípio de privilégio mínimo, em que definições de gráficos de recursos diferentes exigem permissões diferentes. É necessário configurar explicitamente as permissões de que o kro precisa com base nos recursos que suas ResourceGraphDefinitions gerenciarão.

Para começar rapidamente, testar ou desenvolver ambientes, use a `AmazonEKSClusterAdminPolicy`:

1. No console do EKS, acesse a guia **Acesso** do cluster.

1. Em **Entradas de acesso**, localize a entrada referente ao perfil da funcionalidade para o kro (ela terá o ARN do perfil que você criou anteriormente).

1. Selecione a entrada de acesso para visualizar os detalhes.

1. Na seção **Políticas de acesso**, escolha **Associar política de acesso**.

1. Selecione `AmazonEKSClusterAdminPolicy` na lista de políticas.

1. Em **Escopo de acesso**, selecione **Cluster**.

1. Selecione **Associar**.

**Importante**  
A `AmazonEKSClusterAdminPolicy` concede permissões abrangentes para criar e gerenciar todos os recursos do Kubernetes, incluindo a capacidade de criar qualquer tipo de recurso em todos os namespaces. Isso é conveniente para desenvolvimento e POCs, mas não deve ser usado em ambientes de produção. Para ambientes de produção, crie políticas de RBAC personalizadas que concedam somente as permissões necessárias para os recursos específicos que as ResourceGraphDefinitions gerenciarão. Para obter orientações sobre como configurar permissões de privilégio mínimo, consulte [Configuração de permissões do kro](kro-permissions.md) e [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md).

## Verificação da disponibilidade de recursos personalizados
<a name="_verify_custom_resources_are_available"></a>

Após a funcionalidade estar ativa, verifique se os recursos personalizados do kro estão disponíveis no cluster.

 **Utilizar o console** 

1. Navegue até o cluster no console do Amazon EKS

1. Escolha a guia **Recursos**

1. Escolha **Extensões** 

1. Escolha **CustomResourceDefinitions** 

O tipo de recurso `ResourceGraphDefinition` deve aparecer na lista apresentada.

 **Uso do kubectl** 

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

O tipo de recurso `ResourceGraphDefinition` deve aparecer na lista apresentada.

## Próximas etapas
<a name="_next_steps"></a>
+  [Conceitos do kro](kro-concepts.md): compreenda os conceitos do kro e a composição de recursos
+  [Conceitos do kro](kro-concepts.md): saiba mais sobre o SimpleSchema, expressões CEL e padrões de composição
+  [Como trabalhar com recursos de funcionalidade](working-with-capabilities.md): gerencie os recursos da funcionalidade do kro

# Criação de uma funcionalidade do kro por meio da AWS CLI
<a name="kro-create-cli"></a>

Este tópico descreve como criar uma funcionalidade do kro (Kube Resource Orchestrator) usando a AWS CLI.

## Pré-requisitos
<a name="_prerequisites"></a>
+  **AWS CLI**: versão `2.12.3` ou em versões posteriores. Para verificar a versão, execute `aws --version`. Para obter mais informações, consulte [Instalação](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) no Guia do Usuário da Interface de Linha de Comando AWS.
+  ** `kubectl` ** – uma ferramenta de linha de comando para trabalhar com clusters do Kubernetes. Para obter mais informações, consulte [Configurar o `kubectl` e o `eksctl`](install-kubectl.md).

## Etapa 1: criação de um perfil da funcionalidade do IAM
<a name="_step_1_create_an_iam_capability_role"></a>

Crie um arquivo de política de confianç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
```

Crie o perfil do IAM:

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

**nota**  
Ao contrário do ACK e do Argo CD, o kro não requer permissões do IAM adicionais. O kro opera inteiramente no cluster e não faz chamadas de API da AWS. O perfil é exigido exclusivamente para configurar a relação de confiança com o serviço de funcionalidades do EKS.

## Etapa 2: criação da funcionalidade do kro
<a name="_step_2_create_the_kro_capability"></a>

Crie o recurso da funcionalidade do kro no cluster. Substitua *region-cod*e pela região da AWS em que seu cluster está localizado (por exemplo, `us-west-2`) e *my-cluster* pelo nome do seu 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
```

O comando é concluído de imediato, mas a funcionalidade demora algum tempo para se tornar ativa, conforme o EKS cria a infraestrutura e os componentes necessários para a funcionalidade. O EKS instalará as definições de recursos personalizados do Kubernetes relacionadas a essa funcionalidade no cluster durante o processo de criação.

**nota**  
Caso ocorra um erro indicando a inexistência do cluster ou falta de permissões, verifique o seguinte:  
Se o nome do cluster está correto
Se a AWS CLI está configurada para a região correta
Se você tem as permissões do IAM obrigatórias

## Etapa 3: verificação da ativação da funcionalidade
<a name="_step_3_verify_the_capability_is_active"></a>

Aguarde até que a funcionalidade se torne ativa. Substitua *region-code* pela região AWS em que seu cluster se encontra e substitua *my-cluster* pelo nome do seu cluster.

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

A funcionalidade estará pronta assim que o status mostrar `ACTIVE`.

Também é possível visualizar os detalhes completos da funcionalidade:

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

## Etapa 4: concessão de permissões para o gerenciamento de recursos do Kubernetes
<a name="_step_4_grant_permissions_to_manage_kubernetes_resources"></a>

Quando você cria um recurso kro, uma entrada de acesso do EKS é criada automaticamente com a `AmazonEKSKROPolicy`, o que permite que o kro gerencie ResourceGraphDefinitions e suas instâncias. Contudo, nenhuma permissão é concedida por padrão para criar os recursos subjacentes do Kubernetes (como implantações, serviços, ConfigMaps etc.) definidos em suas ResourceGraphDefinitions.

Esse design intencional segue o princípio de privilégio mínimo, em que definições de gráficos de recursos diferentes exigem permissões diferentes. Por exemplo: \$1 Uma ResourceGraphDefinition que crie somente ConfigMaps e Segredos precisa de permissões diferentes daquela que cria Implantações e Serviços \$1 Uma ResourceGraphDefinition que cria recursos de ACK precisa de permissões para esses recursos personalizados específicos \$1 Algumas ResourceGraphDefinitions só podem ler recursos existentes sem criar novos

É necessário configurar explicitamente as permissões de que o kro precisa com base nos recursos que suas ResourceGraphDefinitions gerenciarão.

### Configuração rápida
<a name="_quick_setup"></a>

Para começar rapidamente, testar ou desenvolver ambientes, use a `AmazonEKSClusterAdminPolicy`:

Obtenha o ARN do perfil da funcionalidade:

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

Associe a política de administrador do cluster:

```
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
```

**Importante**  
A `AmazonEKSClusterAdminPolicy` concede permissões abrangentes para criar e gerenciar todos os recursos do Kubernetes, incluindo a capacidade de criar qualquer tipo de recurso em todos os namespaces. Isso é conveniente para desenvolvimento e POCs, mas não deve ser usado em ambientes de produção. Para ambientes de produção, crie políticas de RBAC personalizadas que concedam somente as permissões necessárias para os recursos específicos que as ResourceGraphDefinitions gerenciarão. Para obter orientações sobre como configurar permissões de privilégio mínimo, consulte [Configuração de permissões do kro](kro-permissions.md) e [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md).

## Etapa 5: verificação da disponibilidade de recursos personalizados
<a name="_step_5_verify_custom_resources_are_available"></a>

Após a funcionalidade estar ativa, verifique se os recursos personalizados do kro estão disponíveis no cluster:

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

O tipo de recurso `ResourceGraphDefinition` deve aparecer na lista apresentada.

## Próximas etapas
<a name="_next_steps"></a>
+  [Conceitos do kro](kro-concepts.md): compreenda os conceitos do kro e a composição de recursos
+  [Conceitos do kro](kro-concepts.md): saiba mais sobre o SimpleSchema, expressões CEL e padrões de composição
+  [Como trabalhar com recursos de funcionalidade](working-with-capabilities.md): gerencie os recursos da funcionalidade do kro

# Criação de uma funcionalidade do kro por meio do eksctl
<a name="kro-create-eksctl"></a>

Este tópico descreve como criar uma funcionalidade do kro (Kube Resource Orchestrator) usando o eksctl.

**nota**  
Para realizar as etapas seguintes, você deve estar utilizando o eksctl na versão `0.220.0` ou em versões posteriores. Para verificar a versão, execute `eksctl version`.

## Etapa 1: criação de um perfil da funcionalidade do IAM
<a name="_step_1_create_an_iam_capability_role"></a>

Crie um arquivo de política de confianç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
```

Crie o perfil do IAM:

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

**nota**  
Ao contrário do ACK e do Argo CD, o kro não requer permissões do IAM adicionais além da política de confiança. O kro opera inteiramente no cluster e não faz chamadas de API da AWS.

## Etapa 2: criação da funcionalidade do kro
<a name="_step_2_create_the_kro_capability"></a>

Crie a funcionalidade do kro por meio do eksctl. Substitua *region-code* pela região AWS em que seu cluster se encontra e substitua *my-cluster* pelo nome do seu cluster.

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

O comando é executado de forma imediata, mas a funcionalidade demora algum tempo para se tornar ativa.

## Etapa 3: verificação da ativação da funcionalidade
<a name="_step_3_verify_the_capability_is_active"></a>

Verifique o status da funcionalidade. Substitua *region-code* pela região AWS em que seu cluster se encontra e substitua *my-cluster* pelo nome do seu cluster.

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

A funcionalidade estará pronta assim que o status mostrar `ACTIVE`.

## Etapa 4: concessão de permissões para o gerenciamento de recursos do Kubernetes
<a name="_step_4_grant_permissions_to_manage_kubernetes_resources"></a>

Por padrão, o kro pode apenas criar e gerenciar ResourceGraphDefinitions e suas respectivas instâncias. Para permitir que o kro crie e gerencie os recursos subjacentes do Kubernetes definidos em suas ResourceGraphDefinitions, associe a política de acesso `AmazonEKSClusterAdminPolicy` à entrada de acesso da funcionalidade.

Obtenha o ARN do perfil da funcionalidade:

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

Associe a política de administrador do cluster:

```
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
```

**Importante**  
A política `AmazonEKSClusterAdminPolicy` concede permissões abrangentes para criar e gerenciar todos os recursos do Kubernetes e tem como objetivo agilizar os primeiros passos. Para uso em ambientes de produção, crie políticas de RBAC mais restritivas que concedam somente as permissões necessárias para os recursos específicos que as ResourceGraphDefinitions gerenciarão. Para obter orientações sobre como configurar permissões de privilégio mínimo, consulte [Configuração de permissões do kro](kro-permissions.md) e [Considerações sobre segurança para funcionalidades do EKS](capabilities-security.md).

## Etapa 5: verificação da disponibilidade de recursos personalizados
<a name="_step_5_verify_custom_resources_are_available"></a>

Após a funcionalidade estar ativa, verifique se os recursos personalizados do kro estão disponíveis no cluster:

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

O tipo de recurso `ResourceGraphDefinition` deve aparecer na lista apresentada.

## Próximas etapas
<a name="_next_steps"></a>
+  [Conceitos do kro](kro-concepts.md): compreenda os conceitos do kro e a composição de recursos
+  [Conceitos do kro](kro-concepts.md): saiba mais sobre o SimpleSchema, expressões CEL e padrões de composição
+  [Como trabalhar com recursos de funcionalidade](working-with-capabilities.md): gerencie os recursos da funcionalidade do kro