

 **Ayude a mejorar esta página** 

Para contribuir a esta guía del usuario, elija el enlace **Edit this page on GitHub** que se encuentra en el panel derecho de cada página.

# Capacidades de EKS
<a name="capabilities"></a>

**sugerencia**  
Introducción: [Creación de una capacidad de ACK](create-ack-capability.md) \$1 [Creación de una capacidad de Argo CD](create-argocd-capability.md) \$1 [Creación de una capacidad de kro](create-kro-capability.md) 

Las capacidades de Amazon EKS son un conjunto en capas de características de clúster completamente administradas que ayudan a acelerar la velocidad de los desarrolladores y reducir la complejidad de la creación y el escalado con Kubernetes. Las capacidades de EKS son características nativas de Kubernetes para la implementación continua declarativa, la administración de recursos de AWS y la creación y orquestación de recursos de Kubernetes, todo ello completamente administrado por AWS. Con las capacidades de EKS, puede centrarse más en crear y escalar sus cargas de trabajo, lo que lo libera de la carga operativa que suponen estos servicios fundamentales de la plataforma y que asumirá AWS. Estas capacidades se ejecutan dentro de EKS y no en los clústeres, lo que elimina la necesidad de instalar, mantener y escalar los componentes críticos de la plataforma en los nodos de trabajo.

Para comenzar, puede crear una o más capacidades de EKS en un clúster de EKS nuevo o existente. Para ello, puede utilizar la AWS CLI, la Consola de administración de AWS, las API de EKS, eksctl o las herramientas de infraestructura como código que prefiera. Si bien las capacidades de EKS están diseñadas para funcionar en conjunto, son recursos de nube independientes que puede elegir en función de su caso de uso y sus requisitos.

Todas las versiones de Kubernetes compatibles con EKS son compatibles con las capacidades de EKS.

**nota**  
Las capacidades de EKS están disponibles en todas las regiones comerciales de AWS en las que Amazon EKS esté disponible. Para ver una lista de las regiones admitidas, consulte [Puntos de conexión y cuotas de Amazon EKS](https://docs.aws.amazon.com/general/latest/gr/eks.html) en la referencia general de AWS.

## Capacidades disponibles
<a name="_available_capabilities"></a>

### Controladores para Kubernetes (ACK) de AWS
<a name="shared_aws_controllers_for_kubernetes_ack"></a>

ACK permite administrar los recursos de AWS mediante las API de Kubernetes, lo que le permite crear y administrar buckets de S3, bases de datos de RDS, roles de IAM y otros recursos de AWS mediante los recursos personalizados de Kubernetes. ACK concilia continuamente el estado deseado con el estado real en AWS, lo que corrige cualquier desviación a lo largo del tiempo para mantener el sistema en buen estado y los recursos configurados según lo especificado. Puede administrar los recursos de AWS junto con sus cargas de trabajo de Kubernetes con las mismas herramientas y flujos de trabajo, con soporte para más de 50 servicios de AWS, como S3, RDS, DynamoDB y Lambda. ACK admite la administración de recursos entre cuentas y regiones, lo que permite arquitecturas complejas de administración de sistemas de varias cuentas y varios clústeres. ACK admite recursos de solo lectura y adopción de solo lectura, lo que facilita la migración de otras herramientas de infraestructura como código a sus sistemas basados en Kubernetes.

 [Más información sobre ACK →](ack.md) 

### Argo CD
<a name="_argo_cd"></a>

Argo CD implementa la implementación continua basado en GitOps para sus aplicaciones, con los repositorios de Git como origen de información verdadera para sus cargas de trabajo y el estado del sistema. Argo CD sincroniza automáticamente los recursos de las aplicaciones con sus clústeres desde los repositorios de Git mediante la detección y la corrección de las desviaciones para garantizar que las aplicaciones implementadas coincidan con el estado deseado. Puede implementar y administrar aplicaciones en varios clústeres desde una sola instancia de Argo CD, con una implementación automatizada desde los repositorios de Git siempre que se hagan cambios. El uso conjunto de Argo CD y ACK proporciona un sistema de GitOps fundamental, que simplifica la administración de las dependencias de la carga de trabajo y permite diseñar todo el sistema, lo que incluye la administración de clústeres e infraestructuras a escala. Argo CD se integra con AWS Identity Center para la autenticación y la autorización, y proporciona una interfaz de usuario de Argo alojada para visualizar el estado de la aplicación y de implementación.

 [Más información sobre Argo CD →](argocd.md) 

### kro (Kube Resource Orchestrator)
<a name="_kro_kube_resource_orchestrator"></a>

kro le permite crear API de Kubernetes personalizadas que agrupan varios recursos en abstracciones de nivel superior, lo que permite a los equipos de plataformas definir patrones reutilizables para componentes de la nube de combinaciones de recursos comunes. Con kro, puede agrupar recursos de AWS y Kubernetes en abstracciones unificadas mediante una sintaxis simple para permitir configuraciones dinámicas y lógica condicional. kro permite a los equipos de plataformas proporcionar capacidades de autoservicio con las barreras de protección adecuadas, lo que permite a los desarrolladores aprovisionar infraestructuras complejas mediante API simples y personalizadas mientras cumplen con los estándares organizativos y las prácticas recomendadas. Los recursos de kro son simplemente recursos de Kubernetes y se especifica en los manifiestos de Kubernetes cuáles se pueden almacenar en Git o insertar en registros compatibles con OCI como Amazon ECR para una amplia distribución organizativa.

 [Más información sobre kro →](kro.md) 

## Ventajas de las capacidades de EKS
<a name="_benefits_of_eks_capabilities"></a>

AWS administra completamente las capacidades de EKS, lo que elimina la necesidad de instalar, mantener y escalar los servicios de clúster fundamentales. AWS gestiona los parches de seguridad, las actualizaciones y la administración operativa, lo que permite a sus equipos centrarse en crear con AWS en lugar de operaciones del clúster. A diferencia de los complementos tradicionales de Kubernetes que consumen recursos del clúster, las capacidades se ejecutan en EKS y no en los nodos de trabajo. De este modo, se liberan recursos del clúster y capacidad para las cargas de trabajo y, al mismo tiempo, se minimiza la carga operativa que supone administrar los controladores integrados en el clúster y otros componentes de la plataforma.

Con las capacidades de EKS, puede administrar las implementaciones, los recursos de AWS, los recursos personalizados de Kubernetes y las composiciones mediante herramientas y API de Kubernetes nativas, como `kubectl`. Todas las capacidades operan en el contexto de sus clústeres, lo que hace que se detecten y se corrijan automáticamente las desviaciones de configuración en los recursos de la infraestructura en la nube y de las aplicaciones. Puede implementar y administrar los recursos en varios clústeres, cuentas de AWS y regiones desde un único punto de control, lo que simplifica las operaciones en entornos complejos y distribuidos.

Las capacidades de EKS están diseñadas para los flujos de trabajo de GitOps, lo que proporciona una administración de aplicaciones e infraestructuras declarativa y controlada por versiones. Los cambios fluyen desde Git a través del sistema y proporcionan registros de auditoría, capacidades de reversión y flujos de trabajo de colaboración que se integran con las prácticas de desarrollo existentes. Gracias a este enfoque nativo de Kubernetes, no es necesario utilizar varias herramientas ni administrar sistemas de infraestructura como código externos a los clústeres y, además, hay un único origen de información verdadera al que acudir. El estado deseado, definido en la configuración declarativa de Kubernetes con control de versiones, se aplica continuamente en todo el entorno.

## Precios
<a name="_pricing"></a>

Con las capacidades de EKS, no hay cuotas de pago iniciales ni compromisos. Se le cobrará por cada hora que esté activo cada recurso de capacidad en su clúster de Amazon EKS. Los recursos específicos de Kubernetes administrados por las capacidades de EKS también se facturan con una tarifa por hora.

Para obtener información actual acerca de los precios, consulte la [página de precios de Amazon EKS](https://aws.amazon.com/eks/pricing/).

**sugerencia**  
Puede usar el Informe de costos y usos y el Explorador de costos de AWS para hacer un seguimiento de los costos de la capacidad por separado en relación con otros cargos de EKS. Puede etiquetar las capacidades con el nombre del clúster, el tipo de capacidad y otros detalles para poder asignar los costos.

## Cómo funcionan las capacidades de EKS
<a name="_how_eks_capabilities_work"></a>

Cada capacidad es un recurso de AWS que se crea en el clúster de EKS. Una vez creada, la capacidad se ejecuta en EKS y AWS la administra completamente.

**nota**  
Puede crear un recurso de capacidad de cada tipo (Argo CD, ACK y kro) para un clúster determinado. No puede crear varios recursos de capacidad del mismo tipo en el mismo clúster.

Interactuará con las capacidades del clúster mediante las API y herramientas estándar de Kubernetes:
+ Utilice `kubectl` para aplicar los recursos personalizados de Kubernetes.
+ Utilice los repositorios de Git como origen de información verdadera para los flujos de trabajo de GitOps.

Algunas capacidades incluyen herramientas adicionales compatibles. Por ejemplo:
+ Utilice la CLI de Argo CD para configurar y administrar repositorios y clústeres en la capacidad de Argo CD.
+ Utilice la interfaz de usuario de Argo CD para ver y administrar las aplicaciones administradas por la capacidad de Argo CD.

Las capacidades están diseñadas para funcionar en conjunto, pero son independientes y completamente opcionales. Puede habilitar una, dos o las tres capacidades en función de sus necesidades y actualizar la configuración a medida que evolucionen sus requisitos.

Se admiten todos los tipos de computación de EKS para su uso con las capacidades de EKS. Para obtener más información, consulte [Administración de los recursos de computación mediante nodos](eks-compute.md).

Para obtener información sobre la configuración de seguridad y los detalles sobre los roles de IAM, consulte [Consideraciones sobre la seguridad para las capacidades de EKS](capabilities-security.md). Para conocer los patrones de arquitectura de varios clústeres, consulte [Consideraciones sobre las capacidades de EKS](capabilities-considerations.md)-

## Casos de uso común
<a name="_common_use_cases"></a>

 **GitOps para aplicaciones e infraestructura** 

Use Argo CD para implementar aplicaciones y componentes operativos y ACK para administrar las configuraciones de los clústeres y aprovisionar la infraestructura, ambos desde los repositorios de Git. Toda la pila (aplicaciones, bases de datos, almacenamiento y redes) se define como código y se implementa automáticamente.

Ejemplo: un equipo de desarrollo hace cambios en Git. Argo CD implementa la aplicación actualizada y ACK aprovisiona una nueva base de datos de RDS con la configuración correcta. Todos los cambios son auditables, reversibles y coherentes en todos los entornos.

 **Ingeniería de plataformas con autoservicio** 

Utilice kro para crear API personalizadas que compongan los recursos de ACK y Kubernetes. Los equipos de plataformas definen los patrones aprobados con barreras de protección. Los equipos de aplicaciones utilizan API sencillas y de alto nivel para aprovisionar pilas completas.

Ejemplo: un equipo de plataformas crea una API “WebApplication” que aprovisiona una implementación, un servicio, una entrada y un bucket de S3. Los desarrolladores utilizan esta API sin necesidad de comprender la complejidad subyacente ni los permisos de AWS.

 **Administración de aplicaciones de varios clústeres** 

Utilice Argo CD para implementar aplicaciones en varios clústeres de EKS en diferentes regiones o cuentas. Administre todas las implementaciones desde una única instancia de Argo CD con políticas y flujos de trabajo coherentes.

Ejemplo: implemente la misma aplicación en clústeres de desarrollo, almacenamiento y producción en varias regiones. Argo CD garantiza que cada entorno se mantenga sincronizado con su rama de Git correspondiente.

 **Administración de varios clústeres** 

Utilice ACK para definir y aprovisionar los clústeres de EKS, kro para personalizar las configuraciones de los clústeres con los estándares organizativos y Argo CD para administrar el ciclo de vida y la configuración de los clústeres. De este modo, se proporciona una administración integral de los clústeres, desde su creación hasta las operaciones continuas.

Ejemplo: defina los clústeres de EKS mediante ACK y kro para aprovisionar y aprovisionar la infraestructura de los clústeres, lo que define los estándares organizativos para las redes, las políticas de seguridad, los complementos y otras configuraciones. Utilice Argo CD para crear y administrar de forma continua los clústeres, la configuración y las actualizaciones de las versiones de Kubernetes en toda su flota, de modo que aproveche los estándares uniformes y la administración automatizada del ciclo de vida.

 **Migraciones y modernización** 

Simplifique la migración a EKS con el aprovisionamiento nativo de recursos en la nube y los flujos de trabajo de GitOps. Utilice ACK para adoptar los recursos de AWS existentes sin volver a crearlos y Argo CD para poner en marcha las implementaciones de cargas de trabajo desde Git.

Ejemplo: un equipo que migra de EC2 a EKS adopta sus bases de datos de RDS y buckets de S3 existentes mediante ACK y, a continuación, utiliza Argo CD para implementar aplicaciones en contenedores desde Git. La ruta de migración es clara y las operaciones se estandarizan desde el primer día.

 **Arranque de cuentas y regiones** 

Automatice la implementación de la infraestructura en todas las cuentas y regiones con Argo CD y ACK a la vez. Defina su infraestructura como código en Git y deje que las capacidades se ocupen de la implementación y la administración.

Ejemplo: un equipo de plataformas mantiene los repositorios de Git que definen las configuraciones de cuentas estándar: VPC, roles de IAM, instancias de RDS y pilas de supervisión. Argo CD implementa estas configuraciones automáticamente en nuevas cuentas y regiones, lo que garantiza la coherencia y reduce el tiempo de configuración manual de días a minutos.

# Uso de recursos de capacidades
<a name="working-with-capabilities"></a>

En este tema, se describen las operaciones comunes para administrar los recursos de capacidades en todos los tipos de capacidades.

## Recursos de capacidades de EKS
<a name="_eks_capability_resources"></a>

Las capacidades de EKS son recursos de AWS que permiten la funcionalidad administrada de su clúster de Amazon EKS. Las capacidades se ejecutan en EKS, lo que elimina la necesidad de instalar y mantener controladores y otros componentes operativos en los nodos de trabajo. Las capacidades se crean para un clúster de EKS específico y permanecen asociadas a ese clúster durante todo su ciclo de vida.

Cada recurso de capacidad tiene lo siguiente:
+ Un nombre único dentro de su clúster
+ Un tipo de capacidad (ACK, ARGOCD o KRO)
+ Un nombre de recurso de Amazon (ARN), que especifica tanto el nombre como el tipo
+ Un rol de IAM de capacidad
+ Un estado que indica su estado actual
+ Configuración, tanto genérica como específica del tipo de capacidad

## Descripción de los estados de las capacidades
<a name="_understanding_capability_status"></a>

Los recursos de las capacidades tienen un estado que indica su estado actual. Puede ver el estado de la capacidad en la consola de EKS o mediante la AWS CLI.

 **Consola**:

1. Abra la consola de Amazon EKS en https://console.aws.amazon.com/eks/home\$1/clusters.

1. Seleccione el nombre del clúster.

1. Seleccione la pestaña **Capacidades** para ver el estado de todas las capacidades.

1. Para obtener información detallada sobre el estado, seleccione la pestaña **Observabilidad**, luego **Supervisar clúster** y, por último, la pestaña **Capacidades**.

 ** AWS CLI**:

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

### Estados de las capacidades
<a name="_capability_statuses"></a>

 **CREANDO**: Se está configurando la capacidad. Puede salir de la consola, ya que la capacidad se continuará creando en segundo plano.

 **ACTIVA**: la capacidad está en ejecución y lista para usarse. Si los recursos no funcionan según lo esperado, compruebe el estado de los recursos y los permisos de IAM. Para obtener orientación, consulte [Solución de problemas de capacidades de EKS](capabilities-troubleshooting.md).

 **ACTUALIZANDO**: se están aplicando cambios en la configuración. Espere a que el estado vuelva a ser `ACTIVE`.

 **ELIMINANDO**: se está eliminando la capacidad del clúster.

 **CREATE\$1FAILED**: la configuración detectó un error. Entre las causas comunes, se incluyen las siguientes:
+ Falta la política de confianza del rol de IAM o no se encuentra
+ El rol de IAM no existe o no se puede acceder a él
+ Problemas de acceso al clúster
+ Parámetros de configuración no válidos

Consulte la sección de estado de la capacidad para obtener detalles específicos sobre los errores.

 **UPDATE\$1FAILED**: no se pudo actualizar la configuración. Consulte la sección de estado de la capacidad para obtener más información y compruebe los permisos de IAM.

**sugerencia**  
Para obtener ayuda sobre la solución de problemas, consulte:  
 [Solución de problemas de capacidades de EKS](capabilities-troubleshooting.md): solución de problemas general de la capacidad
 [Solución de problemas con capacidades de ACK](ack-troubleshooting.md): problemas específicos de ACK
 [Solución de problemas con capacidades de Argo CD](argocd-troubleshooting.md): problemas específicos de Argo CD
 [Solución de problemas con capacidades de kro](kro-troubleshooting.md): problemas específicos de kro

## Creación de capacidades
<a name="_create_capabilities"></a>

Para crear una capacidad en el clúster, consulte los temas siguientes:
+  [Creación de una capacidad de ACK](create-ack-capability.md): creación de una capacidad de ACK para administrar los recursos de AWS mediante las API de Kubernetes
+  [Creación de una capacidad de Argo CD](create-argocd-capability.md): creación de una capacidad de Argo CD para la entrega continua de GitOps
+  [Creación de una capacidad de kro](create-kro-capability.md): creación de una capacidad de kro para la composición y orquestación de los recursos

## Enumeración de capacidades
<a name="_list_capabilities"></a>

Puede enumerar todos los recursos de capacidades de un clúster.

### Consola
<a name="_console"></a>

1. Abra la consola de Amazon EKS en https://console.aws.amazon.com/eks/home\$1/clusters.

1. Seleccione el nombre del clúster para abrir la página de detalles del clúster.

1. Elija la pestaña **Capacidades**.

1. Consulte los recursos de capacidades en **Capacidades administradas**.

### AWS CLI
<a name="shared_aws_cli"></a>

Use el comando `list-capabilities` para ver todas las capacidades del clúster. Reemplace *region-code* por la región de AWS donde creó el clúster y *my-cluster* por el nombre de su clúster.

```
aws eks list-capabilities \
  --region region-code \
  --cluster-name my-cluster
```

```
{
    "capabilities": [
        {
            "capabilityName": "my-ack",
            "arn": "arn:aws:eks:us-west-2:111122223333:capability/my-cluster/ack/my-ack/abc123",
            "type": "ACK",
            "status": "ACTIVE",
            "createdAt": "2025-11-02T10:30:00.000000-07:00",
            "modifiedAt": "2025-11-02T10:32:15.000000-07:00",
        },
        {
            "capabilityName": "my-kro",
            "arn": "arn:aws:eks:us-west-2:111122223333:capability/my-cluster/kro/my-kro/abc123",
            "type": "KRO",
            "status": "ACTIVE",
            "version": "v0.6.3",
            "createdAt": "2025-11-02T10:30:00.000000-07:00",
            "modifiedAt": "2025-11-02T10:32:15.000000-07:00",
        },
        {
            "capabilityName": "my-argocd",
            "arn": "arn:aws:eks:us-west-2:111122223333:capability/my-cluster/argocd/my-argocd/abc123",
            "type": "ARGOCD",
            "status": "ACTIVE",
            "version": "3.1.8-eks-1",
            "createdAt": "2025-11-21T08:22:28.486000-05:00",
            "modifiedAt": "2025-11-21T08:22:28.486000-05:00"
        }
    ]
}
```

## Descripción de una capacidad
<a name="_describe_a_capability"></a>

Obtenga información detallada sobre una capacidad específica, lo que incluye su configuración y estado.

### Consola
<a name="_console_2"></a>

1. Abra la consola de Amazon EKS en https://console.aws.amazon.com/eks/home\$1/clusters.

1. Seleccione el nombre del clúster para abrir la página de detalles del clúster.

1. Elija la pestaña **Capacidades**.

1. Elija la capacidad que desee ver en **Capacidades administradas**.

1. Vea los detalles de la capacidad, lo que incluye el estado, la configuración y la hora de creación.

### AWS CLI
<a name="shared_aws_cli"></a>

Utilice el comando `describe-capability` para ver información detallada. Sustituya *region-code* por la región de AWS en la que se encuentra el clúster, *my-cluster* por el nombre del clúster y *capability-name* por el nombre de la capacidad (ack, argocd o kro).

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

 **Ejemplo de código de salida:** 

```
{
  "capability": {
    "capabilityName": "my-ack",
    "capabilityArn": "arn:aws:eks:us-west-2:111122223333:capability/my-cluster/ack/my-ack/abc123",
    "clusterName": "my-cluster",
    "type": "ACK",
    "roleArn": "arn:aws:iam::111122223333:role/AmazonEKSCapabilityACKRole",
    "status": "ACTIVE",
    "configuration": {},
    "tags": {},
    "health": {
      "issues": []
    },
    "createdAt": "2025-11-19T17:11:30.242000-05:00",
    "modifiedAt": "2025-11-19T17:11:30.242000-05:00",
    "deletePropagationPolicy": "RETAIN"
  }
}
```

## Actualización de la configuración de una capacidad
<a name="_update_the_configuration_of_a_capability"></a>

Puede actualizar ciertos aspectos de la configuración de una capacidad después de su creación. Las opciones de configuración específicas varían según el tipo de capacidad.

**nota**  
Los recursos de capacidades de EKS se administran completamente, lo que incluye las actualizaciones de versiones y los parches. Al actualizar una capacidad, se actualizará la configuración de los recursos y no se actualizarán las versiones de los componentes de la capacidad administrada.

### AWS CLI
<a name="shared_aws_cli"></a>

Utilice el comando `update-capability` para modificar una capacidad:

```
aws eks update-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name capability-name \
  --role-arn arn:aws:iam::[.replaceable]111122223333:role/NewCapabilityRole
```

**nota**  
No todas las propiedades de capacidades se pueden actualizar después de su creación. Consulte la documentación específica de la capacidad para obtener detalles sobre lo que se puede modificar.

## Eliminación de una capacidad
<a name="_delete_a_capability"></a>

Cuando ya no necesite una capacidad del clúster, puede eliminar el recurso de la capacidad.

**importante**  
 **Elimine los recursos del clúster antes de eliminar la capacidad.**   
La eliminación de un recurso de la capacidad no elimina automáticamente los recursos creados a través de esa capacidad:  
Todas las definiciones de recursos personalizados (CRD) de Kubernetes permanecen instaladas en el clúster.
Los recursos de ACK permanecen en el clúster, mientras que los recursos de AWS correspondientes permanecen en la cuenta.
Las aplicaciones de Argo CD y sus recursos de Kubernetes permanecen en el clúster.
Las instancias y ResourceGraphDefinitions de kro permanecen en el clúster.
Debe eliminar estos recursos antes de eliminar la capacidad para evitar recursos huérfanos.  
Si lo desea, puede optar por retener los recursos de AWS asociados a los recursos de Kubernetes de ACK. Consulte [Consideraciones sobre ACK](ack-considerations.md). 

### Consola
<a name="_console_3"></a>

1. Abra la consola de Amazon EKS en https://console.aws.amazon.com/eks/home\$1/clusters.

1. Seleccione el nombre del clúster para abrir la página de detalles del clúster.

1. Elija la pestaña **Capacidades**.

1. Seleccione en la lista **Capacidades administradas** la capacidad que desea eliminar.

1. Elija **Eliminar capacidad**.

1. En el cuadro de diálogo de confirmación, ingrese el nombre de la capacidad para confirmar la eliminación.

1. Elija **Eliminar**.

### AWS CLI
<a name="shared_aws_cli"></a>

Utilice el comando `delete-capability` para eliminar un recurso de la capacidad:

Sustituya *region-code* por la región de AWS en la que se encuentra el clúster, *my-cluster* por el nombre del clúster y *capability-name* por el nombre de la capacidad que desea eliminar.

```
aws eks delete-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name capability-name
```

## Siguientes pasos
<a name="_next_steps"></a>
+  [Recursos de Kubernetes de las capacidades](capability-kubernetes-resources.md): más información sobre los recursos de Kubernetes que proporciona cada tipo de capacidad
+  [Conceptos de ACK](ack-concepts.md): descripción de los conceptos de ACK y el ciclo de vida de los recursos
+  [Uso de Argo CD](working-with-argocd.md): uso de las capacidades de Argo CD para flujos de trabajo de GitOps
+  [Conceptos de kro](kro-concepts.md): descripción de los conceptos de kro y la composición de recursos

# Recursos de Kubernetes de las capacidades
<a name="capability-kubernetes-resources"></a>

Una vez que active una capacidad en el clúster, por lo general, interactuará con ella mediante la creación y administración de los recursos personalizados de Kubernetes en el clúster. Cada capacidad proporciona su propio conjunto de definiciones de recursos personalizados (CRD) que amplían la API de Kubernetes con funcionalidades específicas de cada capacidad.

## Recursos de Argo CD
<a name="_argo_cd_resources"></a>

Al activar la capacidad de Argo CD, puede crear y administrar los siguientes recursos de Kubernetes:

 **Aplicación**   
Define una implementación desde un repositorio de Git a un clúster de destino. Los recursos de `Application` especifican el repositorio de origen, el espacio de nombres de destino y la política de sincronización. Puede crear hasta 1000 recursos de `Application` por instancia de capacidad de Argo CD.

 **ApplicationSet**   
Genera varios recursos de `Application` a partir de plantillas, lo que permite implementaciones en varios clústeres y entornos. Los recursos de `ApplicationSet` utilizan generadores para crear recursos de `Application` de forma dinámica en función de listas de clústeres, directorios de Git u otros orígenes.

 **AppProject**   
Proporciona agrupamiento lógico y control de acceso a los recursos de `Application`. Los recursos de `AppProject` definen qué repositorios, clústeres y espacios de nombres pueden usar los recursos de `Application`, lo que permite establecer límites de seguridad y de tenencia múltiple.

Ejemplo de recurso de `Application`:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/org/repo
    targetRevision: main
    path: manifests
  destination:
    server: https://kubernetes.default.svc
    namespace: production
```

Para obtener más información sobre los conceptos y recursos de Argo CD, consulte [Conceptos de Argo CD](argocd-concepts.md).

## Recursos de kro
<a name="_kro_resources"></a>

Al activar la capacidad de kro, puede crear y administrar los siguientes recursos de Kubernetes:

 **ResourceGraphDefinition (RGD)**   
Define una API personalizada que compone varios Kubernetes y recursos de AWS en una abstracción de nivel superior. Los equipos de plataformas crean recursos de `ResourceGraphDefinition` para proporcionar patrones reutilizables con barreras de protección.

 **Instancias de recursos personalizados**   
Tras crear un recurso de `ResourceGraphDefinition`, puede crear instancias de la API personalizada definida por la `ResourceGraphDefinition`. kro crea y administra automáticamente los recursos especificados en la `ResourceGraphDefinition`.

Ejemplo de recurso de `ResourceGraphDefinition`:

```
apiVersion: kro.run/v1alpha1
kind: ResourceGraphDefinition
metadata:
  name: web-application
spec:
  schema:
    apiVersion: v1alpha1
    kind: WebApplication
    spec:
      name: string
      replicas: integer
  resources:
    - id: deployment
      template:
        apiVersion: apps/v1
        kind: Deployment
        # ... deployment spec
    - id: service
      template:
        apiVersion: v1
        kind: Service
        # ... service spec
```

Ejemplo de instancia de `WebApplication`:

```
apiVersion: v1alpha1
kind: WebApplication
metadata:
  name: my-web-app
  namespace: default
spec:
  name: my-web-app
  replicas: 3
```

Al aplicar esta instancia, kro crea automáticamente los recursos de `Deployment` y `Service` definidos en la `ResourceGraphDefinition`.

Para obtener más información sobre los conceptos y recursos de kro, consulte [Conceptos de kro](kro-concepts.md).

## Recursos de ACK
<a name="_ack_resources"></a>

Al activar la capacidad de ACK, puede crear y administrar los recursos de AWS mediante los recursos personalizados de Kubernetes. ACK proporciona más de 200 CRD para más de 50 servicios de AWS, lo que le permite definir los recursos de AWS junto con sus cargas de trabajo de Kubernetes y administrar los recursos de infraestructura de AWS dedicados con Kubernetes.

Ejemplos de recursos de ACK:

 **Bucket de S3**   
 Los recursos de `Bucket` crean y administran buckets de Amazon S3 con políticas de control de versiones, cifrado y ciclo de vida.

 **DBInstance de RDS**   
 Los recursos de `DBInstance` aprovisionan y administran las instancias de bases de datos de Amazon RDS con copias de seguridad automatizadas y plazos de mantenimiento.

 **Tabla de DynamoDB**   
 Los recursos de `Table` crean y administran tablas de DynamoDB con capacidad aprovisionada o bajo demanda.

 **Rol de IAM**   
 Los recursos de `Role` definen los roles de IAM con políticas de confianza y políticas de permisos para el acceso a los servicios de AWS.

 **Función Lambda**   
 Los recursos de `Function` crean y administran funciones de Lambda con configuración de código, tiempo de ejecución y rol de ejecución.

Ejemplo de especificación de un recurso de `Bucket`:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: my-app-bucket
spec:
  name: my-unique-bucket-name-12345
  versioning:
    status: Enabled
  encryption:
    rules:
      - applyServerSideEncryptionByDefault:
          sseAlgorithm: AES256
```

Para obtener más información sobre los conceptos y recursos de ACK, consulte [Conceptos de ACK](ack-concepts.md).

## Límites de recursos
<a name="_resource_limits"></a>

Las capacidades de EKS tienen los siguientes límites de recursos:

 **Límites de uso de Argo CD**:
+ Máximo de 1000 recursos de `Application` por instancia de capacidad de Argo CD
+ Máximo de 100 clústeres remotos configurados por instancia de capacidad de Argo CD

 **Límites de configuración de recursos**:
+ Máximo 150 recursos de Kubernetes por recurso de `Application` en Argo CD
+ Máximo 64 recursos de Kubernetes por `ResourceGraphDefinition` en kro

**nota**  
Estos límites se aplican a la cantidad de recursos administrados por cada instancia de capacidad. Si necesita límites más elevados, puede implementar capacidades en varios clústeres.

## Siguientes pasos
<a name="_next_steps"></a>

Para obtener información sobre tareas específicas de las capacidades y configuración avanzada, consulte los siguientes temas:
+  [Conceptos de ACK](ack-concepts.md): descripción de los conceptos de ACK y el ciclo de vida de los recursos
+  [Uso de Argo CD](working-with-argocd.md): uso de las capacidades de Argo CD para flujos de trabajo de GitOps
+  [Conceptos de kro](kro-concepts.md): descripción de los conceptos de kro y la composición de recursos

# Consideraciones sobre las capacidades de EKS
<a name="capabilities-considerations"></a>

En este tema, se tratan aspectos importantes a la hora de utilizar las capacidades de EKS, como el diseño del control de acceso, la elección entre las capacidades de EKS y las soluciones autoadministradas, los patrones de arquitectura para las implementaciones de varios clústeres y las prácticas recomendadas operativas.

## RBAC de Kubernetes y roles de IAM de la capacidad
<a name="_capability_iam_roles_and_kubernetes_rbac"></a>

Cada recurso de la capacidad de EKS tiene un rol de IAM de capacidad configurado. El rol de capacidad se utiliza para otorgar permisos del servicio de AWS para que las capacidades de EKS actúen en su nombre. Por ejemplo, para utilizar la capacidad de EKS para ACK con el fin de administrar buckets de Amazon S3, debe otorgar permisos administrativos al bucket de S3 para la capacidad, lo que le permitirá crear y administrar buckets.

Una vez configurada la capacidad, los recursos de S3 en AWS se pueden crear y administrar con los recursos personalizados de Kubernetes en el clúster. El RBAC de Kubernetes es el mecanismo de control de acceso integrado en el clúster para determinar qué usuarios y grupos pueden crear y administrar esos recursos personalizados. Por ejemplo, otorga permisos específicos a usuarios y grupos del RBAC de Kubernetes para crear y administrar los recursos de `Bucket` en los espacios de nombres que elija.

De este modo, IAM y el RBAC de Kubernetes son dos mitades del sistema de control de acceso integral que regula los permisos relacionados con los recursos y las capacidades de EKS. Es importante diseñar la combinación adecuada de políticas de acceso de RBAC y permisos de IAM para su caso de uso.

Para obtener información adicional sobre los permisos de Kubernetes y los roles de IAM de la capacidad, consulte [Consideraciones sobre la seguridad para las capacidades de EKS](capabilities-security.md).

## Patrones de arquitectura de varios clústeres
<a name="_multi_cluster_architecture_patterns"></a>

Al implementar capacidades en varios clústeres, tenga en cuenta estos patrones arquitectónicos comunes:

 **Radial con administración centralizada** 

Ejecute las tres capacidades en un clúster administrado de forma centralizada para organizar las cargas de trabajo y administrar la infraestructura en la nube en varios clústeres de cargas de trabajo.
+ Argo CD en el clúster de administración implementa aplicaciones en clústeres de cargas de trabajo de distintas regiones o cuentas
+ ACK en el clúster de administración aprovisiona los recursos de AWS (RDS, S3, IAM) para todos los clústeres
+ kro en el clúster de administración crea abstracciones de plataforma portátiles que funcionan en todos los clústeres

Este patrón centraliza la administración de la carga de trabajo y la infraestructura en la nube, y puede simplificar las operaciones de las organizaciones que administran muchos clústeres.

 **GitOps descentralizadas** 

Las cargas de trabajo y la infraestructura en la nube se administran mediante capacidades del mismo clúster en el que se ejecutan las cargas de trabajo.
+ Argo CD administra los recursos de las aplicaciones en el clúster local.
+ Los recursos de ACK se utilizan para las necesidades de los clústeres y las cargas de trabajo.
+ Las abstracciones de la plataforma de kro se instalan y orquestan los recursos locales.

Este patrón descentraliza las operaciones, ya que los equipos administran sus propios servicios dedicados de la plataforma en uno o más clústeres.

 **Radial con implementación híbrida de ACK** 

Combine modelos centralizados y descentralizados, con implementaciones de aplicaciones centralizadas y administración de recursos en función del ámbito y la propiedad.
+ Clúster de concentrador:
  + Argo CD administra las implementaciones de GitOps en el clúster local y en todos los clústeres de cargas de trabajo remotos.
  + ACK se utiliza en el clúster de administración para los recursos del ámbito administrativo (bases de datos de producción, roles de IAM, VPC).
  + kro se usa en el clúster de administración para abstracciones de plataforma reutilizables.
+ Clúster de radio:
  + Las cargas de trabajo se administran mediante Argo CD en el clúster de concentrador centralizado.
  + ACK se usa localmente para los recursos del ámbito de la carga de trabajo (buckets de S3, instancias de ElastiCache, colas de SQS).
  + kro se usa localmente para la composición de recursos y los patrones de componentes

Este patrón separa las preocupaciones: los equipos de plataformas administran la infraestructura crítica de forma centralizada en clústeres de administración, lo que incluye opcionalmente los clústeres de cargas de trabajo, mientras que los equipos de aplicaciones especifican y administran los recursos de la nube junto con las cargas de trabajo.

 **Elección de un patrón** 

Tenga en cuenta estos factores al seleccionar una arquitectura:
+  **Estructura organizativa**: los equipos de plataformas centralizadas prefieren los patrones de concentrador, mientras que los equipos descentralizados pueden preferir las capacidades por clúster.
+  **Ámbito de los recursos**: los recursos de ámbito administrativo (bases de datos, IAM) suelen beneficiarse de la administración central, mientras que los recursos de cargas de trabajo (buckets, colas) se pueden administrar de forma local.
+  **Autoservicio**: los equipos de plataformas centralizadas pueden crear y distribuir recursos personalizados prescriptivos para permitir el autoservicio seguro de los recursos de la nube para las necesidades de carga de trabajo comunes.
+  **Administración de flotas del clúster**: los clústeres de administración centralizada proporcionan un plano de control que es propiedad del cliente para la administración de flotas en clústeres de EKS, junto con otros recursos del ámbito administrativo.
+  **Requisitos de cumplimiento**: algunas organizaciones requieren un control centralizado para la auditoría y la gobernanza.
+  **Complejidad operativa**: un número menor de instancias de capacidad simplifica las operaciones, pero puede crear cuellos de botella.

**nota**  
Puede comenzar con un patrón y evolucionar hacia otro a medida que la plataforma vaya madurando. Las capacidades son independientes: puede implementarlas de forma diferente en los clústeres en función de sus necesidades.

## Comparación de las capacidades de EKS con las soluciones autoadministradas
<a name="_comparing_eks_capabilities_to_self_managed_solutions"></a>

Las capacidades de EKS proporcionan experiencias completamente administradas para las herramientas y controladores populares de Kubernetes que se ejecutan en EKS. Difieren de las soluciones auto administradas, que se instalan y se utilizan en el clúster.

### Diferencias clave
<a name="_key_differences"></a>

 **Implementación y administración** 

 AWS administra completamente las capacidades de EKS sin necesidad de instalar, configurar ni mantener el software de los componentes. AWS instala y administra automáticamente todas las definiciones de recursos personalizados (CRD) de Kubernetes necesarias en el clúster.

Con las soluciones autoadministradas, puede instalar y configurar el software de clústeres mediante gráficos de Helm, kubectl u otros operadores. Tiene el control total sobre el ciclo de vida del software y la configuración del tiempo de ejecución de las soluciones autoadministradas, lo que permite personalizar cualquier capa de la solución.

 **Operaciones y mantenimiento** 

 AWS administra la aplicación de parches y otras operaciones del ciclo de vida del software para las capacidades de EKS, con actualizaciones automáticas y parches de seguridad. Las capacidades de EKS se integran con características de AWS que permiten simplificar las configuraciones, ofrecen alta disponibilidad y tolerancia a errores integradas, y eliminan la solución de problemas de las cargas de trabajo de los controladores dentro del clúster.

Las soluciones autoadministradas requieren que supervise el estado y los registros de los componentes, aplique parches de seguridad y actualizaciones de versiones, configure la alta disponibilidad con varias réplicas y presupuestos para interrupciones de pods, solucione y corrija los problemas de cargas de trabajo de los controladores y administre los lanzamientos y las versiones. Tiene el control total sobre las implementaciones, pero esto suele requerir soluciones personalizadas para el acceso a clústeres privados y otras integraciones que deben ajustarse a los estándares de la organización y a los requisitos de cumplimiento en materia de seguridad.

 **Consumo de recursos** 

Las capacidades de EKS se ejecutan en EKS y fuera de los clústeres, lo que libera recursos de nodos y clústeres. Las capacidades no utilizan los recursos de cargas de trabajo de clústeres, no consumen CPU ni memoria en los nodos de trabajo, se escalan automáticamente y tienen un impacto mínimo en la planificación de la capacidad del clúster.

Las soluciones autoadministradas ejecutan controladores y otros componentes en los nodos de trabajo, lo que consume directamente los recursos de los nodos de trabajo, las direcciones IP del clúster y otros recursos del clúster. La administración de los servicios del clúster requiere planificar la capacidad de las cargas de trabajo, así como planificar y configurar las solicitudes y los límites de los recursos para administrar los requisitos de escalabilidad y alta disponibilidad.

 **Compatibilidad de características** 

Al tratarse de características del servicio completamente administradas, las capacidades de EKS son, por naturaleza, obstinadas en comparación con las soluciones autoadministradas. Si bien las capacidades admiten la mayoría de las características y los casos de uso, habrá una diferencia en la cobertura en comparación con las soluciones autoadministradas.

Con las soluciones autoadministradas, controla completamente la configuración, las características opcionales y otros aspectos de la funcionalidad del software. Puede optar por ejecutar sus propias imágenes personalizadas, personalizar todos los aspectos de la configuración y controlar completamente la funcionalidad de la solución autoadministrada.

 **Consideraciones sobre costos** 

Cada recurso de capacidad de EKS tiene un costo por hora relacionado, que varía según el tipo de capacidad. Los recursos del clúster administrados por la capacidad también tienen un costo por hora asociado con sus propios precios. Para obtener más información, consulte los [precios de Amazon EKS](https://aws.amazon.com/eks/pricing/).

Las soluciones autoadministradas no tienen costos directos relacionados con los cargos de AWS, pero paga por los recursos de computación en clústeres que utilizan los controladores y las cargas de trabajo relacionadas. Además del consumo de recursos de nodos y clústeres, el costo total de la propiedad de las soluciones autoadministradas incluye los gastos operativos y los gastos de mantenimiento, solución de problemas y soporte.

### Elección entre las capacidades de EKS y las soluciones autoadministradas
<a name="_choosing_between_eks_capabilities_and_self_managed_solutions"></a>

 **Capacidades de EKS**: tenga en cuenta esta opción si desea reducir los gastos operativos y centrarse en el valor diferenciado de su software y sus sistemas, en lugar de centrarse en las operaciones de plataformas del clúster para cumplir con los requisitos fundamentales. Utilice las capacidades de EKS cuando desee minimizar la carga operativa que suponen los parches de seguridad y la administración del ciclo de vida del software, liberar recursos de nodos y clústeres para las cargas de trabajo de las aplicaciones, simplificar la administración de la configuración y la seguridad y beneficiarse de la cobertura de AWS Support. Las capacidades de EKS son ideales para la mayoría de los casos de uso de producción y son el enfoque recomendado para las nuevas implementaciones.

 **Soluciones autoadministradas**: tenga en cuenta esta opción cuando necesite versiones específicas de la API de recursos de Kubernetes, personalice compilaciones de controladores, tenga la automatización y las herramientas existentes basadas en implementaciones autoadministradas o necesite una personalización profunda de las configuraciones de tiempo de ejecución de los controladores. Las soluciones autoadministradas ofrecen flexibilidad para casos de uso especializados y tiene el control total sobre la configuración de implementación y tiempo de ejecución.

**nota**  
Las capacidades de EKS pueden coexistir en el clúster con soluciones autoadministradas, y es posible llevar a cabo migraciones escalonadas.

### Comparaciones específicas de la capacidad
<a name="_capability_specific_comparisons"></a>

Para obtener comparaciones detalladas, incluidas las características específicas de la capacidad, las diferencias ascendentes y las rutas de migración, consulte:
+  [Comparación de la capacidad de EKS para ACK con ACK autoadministrados](ack-comparison.md) 
+  [Comparación de la capacidad de EKS para Argo CD con Argo CD autoadministrado](argocd-comparison.md) 
+  [Comparación de la capacidad de EKS para kro con kro autoadministrado](kro-comparison.md) 

# Implementación de recursos de AWS de Kubernetes con Controladores de AWS para Kubernetes (ACK)
<a name="ack"></a>

 Controladores de AWS para Kubernetes (ACK) le permite definir y administrar los recursos de servicios de AWS directamente desde Kubernetes. Con Controladores de AWS para Kubernetes (ACK), puede administrar los recursos de cargas de trabajo y la infraestructura en la nube mediante los recursos personalizados de Kubernetes, junto con las cargas de trabajo de sus aplicaciones, a través de las API y herramientas de Kubernetes que ya conoce.

Con las capacidades de EKS, AWS administra ACK completamente, lo que elimina la necesidad de instalar, mantener y escalar los controladores de ACK en sus clústeres.

## Cómo funciona ACK
<a name="_how_ack_works"></a>

ACK traduce las especificaciones de recursos personalizadas de Kubernetes a llamadas a la API de AWS. Cuando crea, actualiza o elimina un recurso personalizado de Kubernetes que represente un recurso de servicio de AWS, ACK hace las llamadas a la API de AWS necesarias para crear, actualizar o eliminar el recurso de AWS.

Cada recurso de AWS compatible con ACK tiene su propia definición de recursos personalizados (CRD) que define el esquema de la API de Kubernetes para especificar su configuración. Por ejemplo, ACK proporciona las CRD para S3, lo que incluye los buckets, las políticas de bucket y otros recursos de S3.

ACK concilia continuamente el estado de sus recursos de AWS con el estado deseado definido en sus recursos personalizados de Kubernetes. Si un recurso se desvía del estado deseado, ACK lo detecta y toma medidas correctivas para volver a alinearlo. Los cambios en los recursos de Kubernetes se reflejan inmediatamente en el estado de los recursos de AWS, mientras que la detección pasiva de las desviaciones y la corrección de los cambios iniciales en los recursos de AWS pueden tardar hasta 10 horas (el periodo de resincronización), pero se suelen producir mucho antes.

 **Ejemplo de manifiesto de recursos de buckets de S3** 

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: my-ack-bucket
spec:
  name: my-unique-bucket-name
```

Cuando aplique este recurso personalizado a su clúster, ACK crea un bucket de Amazon S3 en su cuenta si aún no existe. Los cambios posteriores en este recurso, como especificar un nivel de almacenamiento no predeterminado o agregar una política, se aplicarán al recurso de S3 en AWS. Cuando se elimina este recurso del clúster, el bucket de S3 de AWS se elimina de forma predeterminada.

## Beneficios de ACK
<a name="_benefits_of_ack"></a>

ACK proporciona una administración de recursos de AWS nativa de Kubernetes, lo que le permite administrar los recursos de AWS con las mismas API y herramientas de Kubernetes que usa para sus aplicaciones. Este enfoque unificado simplifica el flujo de trabajo de administración de infraestructuras al eliminar la necesidad de cambiar de una herramienta a otra o aprender a utilizar sistemas independientes de infraestructura como código. Definirá los recursos de AWS de forma declarativa en los manifiestos de Kubernetes, lo que permite que los flujos de trabajo de GitOps y las prácticas de infraestructura como código se integren sin problemas con los procesos de desarrollo existentes.

ACK concilia continuamente el estado deseado de sus recursos de AWS con su estado real, lo que corrige la desviación y garantiza la coherencia en toda la infraestructura. Esta conciliación continua significa que los cambios imperativos en los recursos de AWS sin conexión se revierten automáticamente para que coincidan con la configuración declarada, lo que mantiene la integridad de su infraestructura como código. Puede configurar ACK para administrar los recursos en varias regiones y cuentas de AWS, lo que permite arquitecturas complejas de varias cuentas sin herramientas adicionales.

Para las organizaciones que migran desde otras herramientas de administración de infraestructura, ACK admite la adopción de recursos, lo que le permite administrar los recursos de AWS existentes sin tener que volver a crearlos. ACK también proporciona recursos de solo lectura para la observación de los recursos de AWS sin acceso a modificaciones, y anotaciones para retener los recursos de AWS de forma opcional, incluso cuando el recurso de Kubernetes se elimina del clúster.

Para obtener más información y comenzar a utilizar la capacidad de EKS para ACK, consulte [Conceptos de ACK](ack-concepts.md) y [Consideraciones sobre ACK para EKS](ack-considerations.md).

## Servicios de AWS compatibles
<a name="supported_shared_aws_services"></a>

ACK admite una amplia gama de servicios de AWS, que incluyen, entre otros, los siguientes:
+ Amazon EC2
+ Amazon S3
+ Amazon RDS
+ Amazon DynamoDB
+ Amazon ElastiCache
+ Amazon EKS
+ Amazon SQS
+ Amazon SNS
+  AWS Lambda
+  AWS IAM

Todos los servicios de AWS que figuran como de disponibilidad general ascendente son compatibles con la capacidad de EKS para ACK. Consulte la [lista completa de servicios de AWS compatibles](https://aws-controllers-k8s.github.io/community/docs/community/services/) para obtener más información.

## Integración con otras capacidades administradas de EKS
<a name="_integration_with_other_eks_managed_capabilities"></a>

ACK se integra con otras capacidades administradas de EKS.
+  **Argo CD**: utilice Argo CD para administrar la implementación de los recursos de ACK en varios clústeres, lo que activa los flujos de trabajo de GitOps para su infraestructura de AWS.
  + ACK amplía los beneficios de GitOps cuando se combina con ArgoCD, pero ACK no requiere la integración con git.
+  **kro (Kube Resource Orchestrator)**: utilice kro para componer recursos complejos a partir de recursos de ACK, lo que crea abstracciones de alto nivel que simplifican la administración de recursos.
  + Puede crear recursos personalizados compuestos con kro que definan tanto los recursos como los de Kubernetes como los de AWS. Los miembros del equipo pueden usar estos recursos personalizados para implementar rápidamente aplicaciones complejas.

## Introducción a ACK
<a name="_getting_started_with_ack"></a>

Para comenzar a utilizar la capacidad de EKS para ACK:

1. Cree y configure un rol de capacidad de IAM con los permisos necesarios para que ACK administre los recursos de AWS en su nombre.

1.  [Cree un recurso de capacidad de ACK](create-ack-capability.md) en su clúster de EKS a través de la consola de AWS, la AWS CLI o su infraestructura preferida como herramienta de código.

1. Aplique los recursos personalizados de Kubernetes al clúster para comenzar a administrar sus recursos de AWS en Kubernetes.

# Creación de una capacidad de ACK
<a name="create-ack-capability"></a>

En este capítulo, se explica cómo crear una capacidad de ACK en un clúster de Amazon EKS.

## Requisitos previos
<a name="_prerequisites"></a>

Antes de crear una capacidad de ACK, asegúrese de que disponga de lo siguiente:
+ Un clúster de Amazon EKS
+ Un rol de capacidad de IAM con permisos para que ACK administre los recursos de AWS
+ Permisos de IAM suficientes para crear recursos de capacidad en los clústeres de EKS
+ La herramienta de la CLI adecuada instalada y configurada o el acceso a la consola de EKS

Para obtener instrucciones sobre cómo crear el rol de capacidad de IAM, consulte [Rol de IAM de capacidad de Amazon EKS](capability-role.md).

**importante**  
ACK es una capacidad de administración de infraestructuras que permite crear, modificar y eliminar recursos de AWS. Se trata de una capacidad de ámbito administrativo que debe controlarse cuidadosamente. Cualquier persona que tenga permiso para crear recursos de Kubernetes en el clúster puede crear recursos de AWS de forma eficaz mediante ACK, siempre que se cumplan los permisos del rol de capacidad de IAM. El rol de capacidad de IAM que proporcione determina qué recursos de AWS puede crear y administrar ACK. Para obtener orientación sobre cómo crear un rol adecuado con los permisos de privilegio mínimo, consulte [Rol de IAM de capacidad de Amazon EKS](capability-role.md) y [Consideraciones sobre la seguridad para las capacidades de EKS](capabilities-security.md).

## Elección de la herramienta
<a name="_choose_your_tool"></a>

Puede crear una capacidad de ACK mediante la Consola de administración de AWS, la AWS CLI o eksctl:
+  [Creación de una capacidad de ACK mediante la consola](ack-create-console.md): uso de la consola para una experiencia guiada
+  [Creación de una capacidad de ACK mediante la AWS CLI](ack-create-cli.md): uso de la AWS CLI para scripts y automatización
+  [Creación de una capacidad de ACK mediante eksctl](ack-create-eksctl.md): uso de eksctl para una experiencia nativa de Kubernetes

## Qué ocurre cuando se crea una capacidad de ACK
<a name="_what_happens_when_you_create_an_ack_capability"></a>

Al crear una capacidad de ACK:

1. EKS crea el servicio de capacidad de ACK y lo configura para supervisar y administrar los recursos del clúster.

1. Las definiciones de recursos personalizados (CRD) de Kubernetes se instalan en el clúster.

1. Se crea automáticamente una entrada de acceso para el rol de capacidad de IAM, con políticas de entrada de acceso específicas de la capacidad que conceden permisos básicos de Kubernetes (consulte [Consideraciones sobre la seguridad para las capacidades de EKS](capabilities-security.md)).

1. La capacidad asume el rol de capacidad de IAM que proporcione.

1. ACK comienza a supervisar sus recursos personalizados en el clúster.

1. El estado de la capacidad cambia de `CREATING` a `ACTIVE`. 

Una vez activos, puede crear recursos personalizados de ACK en el clúster para administrar recursos de AWS.

**nota**  
La entrada de acceso creada automáticamente incluye la `AmazonEKSACKPolicy`, que concede a ACK permisos para administrar recursos de AWS. Algunos recursos de ACK que hacen referencia a secretos de Kubernetes (como bases de datos RDS con contraseñas) requieren políticas adicionales de entrada de acceso. Para obtener más información sobre las entradas de acceso y cómo configurar permisos adicionales, consulte [Consideraciones sobre la seguridad para las capacidades de EKS](capabilities-security.md).

## Siguientes pasos
<a name="_next_steps"></a>

Después de crear la capacidad de ACK:
+  [Conceptos de ACK](ack-concepts.md): descripción de los conceptos de ACK e introducción a los recursos de AWS
+  [Conceptos de ACK](ack-concepts.md): más información sobre la conciliación, las exportaciones de campos y los patrones de adopción de recursos
+  [Configuración de los permisos de ACK](ack-permissions.md): configuración de los permisos de IAM y los patrones de varias cuentas

# Creación de una capacidad de ACK mediante la consola
<a name="ack-create-console"></a>

En este tema, se describe cómo crear una capacidad de Controladores de AWS para Kubernetes (ACK) mediante la Consola de administración de AWS.

## Creación de la capacidad de ACK
<a name="_create_the_ack_capability"></a>

1. Abra la consola de Amazon EKS en https://console.aws.amazon.com/eks/home\$1/clusters.

1. Seleccione el nombre del clúster para abrir la página de detalles del clúster.

1. Elija la pestaña **Capacidades**.

1. En el menú de navegación de la izquierda, elija **Controladores de AWS para Kubernetes (ACK)**.

1. Elija **Crear capacidad de Controladores de AWS para Kubernetes**.

1. Para el **rol de capacidad de IAM**:
   + Si ya tiene un rol de capacidad de IAM, selecciónelo en el menú desplegable.
   + Si necesita crear un rol, elija **Crear rol de administrador**. 

     De este modo, se abre la consola de IAM en una nueva pestaña con la política de confianza rellenada previamente y la política administrada de `AdministratorAccess`. Si lo prefiere, puede anular la selección de esta política y agregar otros permisos.

     Después de crear el rol, regrese a la consola de EKS y el rol se seleccionará automáticamente.
**importante**  
La política `AdministratorAccess` sugerida otorga amplios permisos y tiene por objeto simplificar el inicio. Para uso en producción, reemplácela por una política personalizada que otorgue solo los permisos necesarios para los servicios de AWS específicos que tiene previsto administrar con ACK. Para obtener orientación sobre la creación de políticas de privilegio mínimo, consulte [Configuración de los permisos de ACK](ack-permissions.md) y [Consideraciones sobre la seguridad para las capacidades de EKS](capabilities-security.md).

1. Seleccione **Crear**.

Comenzará el proceso de creación de la capacidad.

## Comprobación de la activación de la capacidad
<a name="_verify_the_capability_is_active"></a>

1. En la pestaña **Capacidades**, consulte el estado de la capacidad de ACK.

1. Espere a que el estado cambie de `CREATING` a `ACTIVE`.

1. Una vez activa, la capacidad está lista para usarse.

Para obtener información sobre los estados de la capacidad y la solución de problemas, consulte [Uso de recursos de capacidades](working-with-capabilities.md).

## Comprobación de la disponibilidad de los recursos personalizados
<a name="_verify_custom_resources_are_available"></a>

Una vez que la capacidad esté activa, compruebe que los recursos personalizados de ACK estén disponibles en el clúster.

 **Uso de la consola** 

1. Vaya a su clúster en la consola de Amazon EKS.

1. Elija la pestaña **Recursos**.

1. Elija **Extensiones**. 

1. Elija **CustomResourceDefinitions**. 

Deberías ver varias CRD en la lista de recursos de AWS.

 **Uso de kubectl** 

```
kubectl api-resources | grep services.k8s.aws
```

Deberías ver varias API en la lista de recursos de AWS.

**nota**  
La capacidad de Controladores de AWS para Kubernetes permite instalar varios CRD para distintos recursos de AWS.

## Siguientes pasos
<a name="_next_steps"></a>
+  [Conceptos de ACK](ack-concepts.md): descripción de los conceptos de ACK e introducción
+  [Configuración de los permisos de ACK](ack-permissions.md): configuración de los permisos de IAM para otros servicios de AWS
+  [Uso de recursos de capacidades](working-with-capabilities.md): administración del recurso de la capacidad de ACK

# Creación de una capacidad de ACK mediante la AWS CLI
<a name="ack-create-cli"></a>

En este tema, se describe cómo crear una capacidad de Controladores de AWS para Kubernetes (ACK) mediante la AWS CLI.

## Requisitos previos
<a name="_prerequisites"></a>
+  **AWS CLI**: versión `2.12.3` o posterior. Para comprobar la versión, ejecute `aws --version`. Para obtener más información, consulte [Instalación](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) en la Guía del usuario de la interfaz de la línea de comandos de AWS.
+  ** `kubectl` ** – una herramienta de línea de comandos para trabajar con clústeres de Kubernetes. Para obtener más información, consulte [Configuración de `kubectl` y `eksctl`](install-kubectl.md).

## Paso 1: creación de un rol de capacidad de IAM
<a name="_step_1_create_an_iam_capability_role"></a>

Cree un archivo de política de confianza:

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

Cree el rol de IAM:

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

Adjunte la política administrada de `AdministratorAccess` al rol:

```
aws iam attach-role-policy \
  --role-name ACKCapabilityRole \
  --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
```

**importante**  
La política `AdministratorAccess` sugerida otorga amplios permisos y tiene por objeto simplificar el inicio. Para uso en producción, reemplácela por una política personalizada que otorgue solo los permisos necesarios para los servicios de AWS específicos que tiene previsto administrar con ACK. Para obtener orientación sobre la creación de políticas de privilegio mínimo, consulte [Configuración de los permisos de ACK](ack-permissions.md) y [Consideraciones sobre la seguridad para las capacidades de EKS](capabilities-security.md).

## Paso 2: creación de la capacidad de ACK
<a name="_step_2_create_the_ack_capability"></a>

Cree el recurso de la capacidad de ACK en su clúster. Reemplace *region-code* por la región de AWS donde creó el clúster y *my-cluster* por el nombre de su clúster.

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

El comando devuelve una respuesta inmediatamente, pero la capacidad tarda algún tiempo en activarse mientras EKS crea la infraestructura y los componentes de la capacidad necesarios. EKS instalará las definiciones de recursos personalizados de Kubernetes relacionadas con esta capacidad en el clúster según se vaya creando.

**nota**  
Si recibe un error que indica que el clúster no existe o que no tiene permisos, compruebe lo siguiente:  
El nombre del clúster es correcto
La AWS CLI está configurada para la región correcta
Dispone de los permisos de IAM necesarios

## Paso 3: comprobación de la activación de la capacidad
<a name="_step_3_verify_the_capability_is_active"></a>

Espere a que se active la capacidad. Reemplace *region-code* por la región de AWS donde creó el clúster y *my-cluster* por el nombre de su clúster.

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

La capacidad estará lista cuando aparezca el estado `ACTIVE`. No continúe con el paso siguiente hasta que el estado sea `ACTIVE`.

También puede ver todos los detalles de la capacidad:

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

## Paso 4: comprobación de la disponibilidad de los recursos personalizados
<a name="_step_4_verify_custom_resources_are_available"></a>

Una vez que la capacidad esté activa, compruebe que los recursos personalizados de ACK estén disponibles en el clúster:

```
kubectl api-resources | grep services.k8s.aws
```

Deberías ver varias API en la lista de recursos de AWS.

**nota**  
La capacidad de Controladores de AWS para Kubernetes permite instalar varios CRD para distintos recursos de AWS.

## Siguientes pasos
<a name="_next_steps"></a>
+  [Conceptos de ACK](ack-concepts.md): descripción de los conceptos de ACK e introducción
+  [Configuración de los permisos de ACK](ack-permissions.md): configuración de los permisos de IAM para otros servicios de AWS
+  [Uso de recursos de capacidades](working-with-capabilities.md): administración del recurso de la capacidad de ACK

# Creación de una capacidad de ACK mediante eksctl
<a name="ack-create-eksctl"></a>

En este tema, se describe cómo crear una capacidad de Controladores de AWS para Kubernetes (ACK) mediante eksctl.

**nota**  
Los siguientes pasos requieren la versión `0.220.0` o posterior de eksctl. Para comprobar la versión, ejecute `eksctl version`.

## Paso 1: creación de un rol de capacidad de IAM
<a name="_step_1_create_an_iam_capability_role"></a>

Cree un archivo de política de confianza:

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

Cree el rol de IAM:

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

Adjunte la política administrada de `AdministratorAccess` al rol:

```
aws iam attach-role-policy \
  --role-name ACKCapabilityRole \
  --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
```

**importante**  
La política `AdministratorAccess` sugerida otorga amplios permisos y tiene por objeto simplificar el inicio. Para uso en producción, reemplácela por una política personalizada que otorgue solo los permisos necesarios para los servicios de AWS específicos que tiene previsto administrar con ACK. Para obtener orientación sobre la creación de políticas de privilegio mínimo, consulte [Configuración de los permisos de ACK](ack-permissions.md) y [Consideraciones sobre la seguridad para las capacidades de EKS](capabilities-security.md).

**importante**  
Esta política otorga permisos para la administración de buckets de S3 con `"Resource": "*"`, lo que permite llevar a cabo operaciones en todos los buckets de S3.  
Para uso en producción: \$1 Restrinja el campo `Resource` a patrones de nombres o ARN de buckets específicos. \$1 Use claves de condición de IAM para limitar el acceso por etiquetas de recursos. \$1 Otorgue solo los permisos mínimos necesarios para su caso de uso.  
Para otros servicios de AWS, consulte [Configuración de los permisos de ACK](ack-permissions.md).

Asocie la política al rol:

```
aws iam attach-role-policy \
  --role-name ACKCapabilityRole \
  --policy-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):policy/ACKS3Policy
```

## Paso 2: creación de la capacidad de ACK
<a name="_step_2_create_the_ack_capability"></a>

Cree la capacidad de ACK mediante eksctl Reemplace *region-code* por la región de AWS donde creó el clúster y *my-cluster* por el nombre de su clúster.

```
eksctl create capability \
  --cluster [.replaceable]`my-cluster` \
  --region [.replaceable]`region-code` \
  --name ack \
  --type ACK \
  --role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/ACKCapabilityRole \
  --ack-service-controllers s3
```

**nota**  
La etiqueta `--ack-service-controllers` es opcional. Si se omite, ACK activa todos los controladores disponibles. Para mejorar el rendimiento y la seguridad, considere la posibilidad de activar solo los controladores que necesite. Puede especificar varios controladores: `--ack-service-controllers s3,rds,dynamodb` 

El comando vuelve inmediatamente, pero la capacidad tarda algún tiempo en activarse.

## Paso 3: comprobación de la activación de la capacidad
<a name="_step_3_verify_the_capability_is_active"></a>

Compruebe el estado de la capacidad:

```
eksctl get capability \
  --cluster [.replaceable]`my-cluster` \
  --region [.replaceable]`region-code` \
  --name ack
```

La capacidad estará lista cuando aparezca el estado `ACTIVE`.

## Paso 4: comprobación de la disponibilidad de los recursos personalizados
<a name="_step_4_verify_custom_resources_are_available"></a>

Una vez que la capacidad esté activa, compruebe que los recursos personalizados de ACK estén disponibles en el clúster:

```
kubectl api-resources | grep services.k8s.aws
```

Deberías ver varias API en la lista de recursos de AWS.

**nota**  
La capacidad de Controladores de AWS para Kubernetes permite instalar varios CRD para distintos recursos de AWS.

## Siguientes pasos
<a name="_next_steps"></a>
+  [Conceptos de ACK](ack-concepts.md): descripción de los conceptos de ACK e introducción
+  [Configuración de los permisos de ACK](ack-permissions.md): configuración de los permisos de IAM para otros servicios de AWS
+  [Uso de recursos de capacidades](working-with-capabilities.md): administración del recurso de la capacidad de ACK

# Conceptos de ACK
<a name="ack-concepts"></a>

ACK administra los recursos de AWS a través de las API de Kubernetes mediante la conciliación continua del estado deseado de los manifiestos con el estado real en AWS. Al crear o actualizar un recurso personalizado de Kubernetes, ACK hace las llamadas a la API de AWS necesarias para crear o modificar el recurso de AWS correspondiente, lo supervisa para detectar posibles desviaciones y actualiza el estado de Kubernetes para reflejar el estado actual. Este enfoque le permite administrar la infraestructura con herramientas y flujos de trabajo de Kubernetes que ya conoce y, al mismo tiempo, mantener la coherencia entre el clúster y AWS.

En este tema se explican los conceptos fundamentales de cómo ACK administra los recursos de AWS a través de las API de Kubernetes.

## Introducción a ACK
<a name="_getting_started_with_ack"></a>

Tras crear la capacidad de ACK (consulte [Creación de una capacidad de ACK](create-ack-capability.md)), puede comenzar a administrar los recursos de AWS mediante los manifiestos de Kubernetes en su clúster.

Por ejemplo, cree este manifiesto de bucket de S3 en `bucket.yaml` y elija su propio nombre de bucket exclusivo.

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: my-test-bucket
  namespace: default
spec:
  name: my-unique-bucket-name-12345
```

Aplique el manifiesto:

```
kubectl apply -f bucket.yaml
```

Compruebe el estado:

```
kubectl get bucket my-test-bucket
kubectl describe bucket my-test-bucket
```

Verifique que el bucket se haya creado en AWS:

```
aws s3 ls | grep my-unique-bucket-name-12345
```

Elimine el recurso de Kubernetes:

```
kubectl delete bucket my-test-bucket
```

Compruebe que el bucket se haya eliminado de AWS:

```
aws s3 ls | grep my-unique-bucket-name-12345
```

El bucket ya no debería aparecer en la lista, lo que demuestra que ACK administra todo el ciclo de vida de los recursos de AWS.

Para obtener más información sobre cómo comenzar a utilizar Athena, consulte [Introducción a ACK](https://aws-controllers-k8s.github.io/community/docs/user-docs/getting-started/).

## Ciclo de vida de los recursos y conciliación
<a name="_resource_lifecycle_and_reconciliation"></a>

ACK utiliza un ciclo de conciliación continuo para garantizar que sus recursos de AWS coincidan con el estado deseado definido en los manifiestos de Kubernetes.

 **Cómo funciona la conciliación**:

1. Cree o actualice un recurso personalizado de Kubernetes (por ejemplo, un bucket de S3).

1. ACK detecta el cambio y compara el estado deseado con el estado real en AWS. 

1. Si son diferentes, ACK hace llamadas a la API de AWS para conciliar la diferencia.

1. ACK actualiza el estado del recurso en Kubernetes para reflejar el estado actual.

1. El ciclo se repite de forma continua, normalmente cada pocas horas.

La conciliación se activa cuando se crea un nuevo recurso de Kubernetes, se actualiza la `spec` de un recurso existente o cuando ACK detecta una desviación en AWS debido a cambios manuales hechos fuera de ACK. Además, ACK lleva a cabo una conciliación periódica con un periodo de resincronización de 10 horas. Los cambios en los recursos de Kubernetes activan una conciliación inmediata, mientras que la detección pasiva de los cambios en los recursos de AWS ascendentes se produce durante la resincronización periódica.

Al trabajar en el ejemplo de introducción anterior, ACK lleva a cabo los siguientes pasos:

1. Comprueba si el bucket existe en AWS. 

1. Si no, llama a `s3:CreateBucket`. 

1. Actualiza el estado de Kubernetes con el ARN y el estado del bucket.

1. Continúa supervisando para detectar desviaciones.

Para obtener más información sobre cómo funciona ACK, consulte [ACK Reconciliation](https://aws-controllers-k8s.github.io/community/docs/user-docs/reconciliation/).

## Condiciones de estado
<a name="_status_conditions"></a>

Los recursos de ACK utilizan las condiciones de estado para comunicar su estado. Comprender estas condiciones lo ayuda a solucionar problemas y entender el estado de los recursos.
+  **Listo**: indica que el recurso está listo para consumirse (condición estandarizada de Kubernetes).
+  **ACK.ResourceSynced**: indica que la especificación del recurso coincide con el estado del recurso de AWS.
+  **ACK.Terminal**: indica que se ha producido un error irrecuperable.
+  **ACK.Adopted**: indica que el recurso se adoptó de un recurso de AWS existente en lugar de crearse.
+  **ACK.Recoverable**: indica un error recuperable que puede resolverse sin actualizar la especificación.
+  **ACK.Advisory**: proporciona información de asesoramiento sobre el recurso.
+  **ACK.LateInitialized**: indica si se ha completado la inicialización tardía de los campos.
+  **ACK.ReferencesResolved**: indica si se han resuelto todos los campos `AWSResourceReference`.
+  **ACK.IAMRoleSelected**: indica si se ha seleccionado un IAMRoleSelector para administrar este recurso.

Compruebe el estado del recurso:

```
# Check if resource is ready
kubectl get bucket my-bucket -o jsonpath='{.status.conditions[?(@.type=="Ready")].status}'

# Check for terminal errors
kubectl get bucket my-bucket -o jsonpath='{.status.conditions[?(@.type=="ACK.Terminal")]}'
```

Ejemplo de estado:

```
status:
  conditions:
  - type: Ready
    status: "True"
    lastTransitionTime: "2024-01-15T10:30:00Z"
  - type: ACK.ResourceSynced
    status: "True"
    lastTransitionTime: "2024-01-15T10:30:00Z"
  - type: ACK.Terminal
    status: "True"
  ackResourceMetadata:
    arn: arn:aws:s3:::my-unique-bucket-name
    ownerAccountID: "111122223333"
    region: us-west-2
```

Para obtener más información sobre los estados y las condiciones de ACK, consulte [ACK Conditions](https://aws-controllers-k8s.github.io/community/docs/user-docs/conditions/).

## Políticas de eliminación
<a name="_deletion_policies"></a>

La política de eliminación de ACK controla lo que ocurre con los recursos de AWS cuando se elimina el recurso de Kubernetes.

 **Eliminación (opción predeterminada)** 

El recurso de AWS se elimina al eliminar el recurso de Kubernetes: este es el comportamiento predeterminado.

```
# No annotation needed - this is the default
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: temp-bucket
spec:
  name: temporary-bucket
```

Al eliminar este recurso, se elimina el bucket de S3 en AWS.

 **Retain** 

El recurso de AWS se conserva al eliminar el recurso de Kubernetes:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: important-bucket
  annotations:
    services.k8s.aws/deletion-policy: "retain"
spec:
  name: production-data-bucket
```

Al eliminar este recurso, se elimina de Kubernetes, pero se deja el bucket de S3 en AWS.

La política `retain` es útil para las bases de datos de producción que deberían durar más tiempo que el recurso de Kubernetes, los recursos compartidos utilizados por varias aplicaciones, los recursos con datos importantes que no deberían eliminarse accidentalmente o la administración temporal de ACK donde se adopta un recurso, se configura y, a continuación, se vuelve a administrar manualmente.

Para obtener más información sobre la política de eliminación de ACK, consulte [ACK Deletion Policy](https://aws-controllers-k8s.github.io/community/docs/user-docs/deletion-policy/).

## Adopción de recursos
<a name="_resource_adoption"></a>

La adopción le permite administrar los recursos de AWS existentes sin necesidad de volver a crearlos.

Cuándo se utiliza la adopción:
+ Para la migración de la infraestructura existente a la administración de ACK
+ Para la recuperación de recursos de AWS huérfanos en caso de eliminación accidental de recursos en Kubernetes
+ Para la importación de recursos creados por otras herramientas (CloudFormation, Terraform)

Cómo funciona la adopción:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: existing-bucket
  annotations:
    services.k8s.aws/adoption-policy: "adopt-or-create"
spec:
  name: my-existing-bucket-name
```

Al crear este recurso:

1. ACK comprueba si existe un bucket con ese nombre en AWS. 

1. Si lo encuentra, ACK lo adopta (no es necesario crear llamadas a la API).

1. ACK lee la configuración actual de AWS. 

1. ACK actualiza el estado de Kubernetes para reflejar el estado actual,

1. Las actualizaciones futuras concilian el recurso con normalidad.

Una vez adoptados, los recursos se administran como cualquier otro recurso de ACK y, al eliminar el recurso de Kubernetes, se eliminará el recurso de AWS, a menos que utilice la política de eliminación `retain`.

Al adoptar un recurso, el recurso de AWS debe existir previamente y ACK necesita permisos de lectura para detectarlo. La política `adopt-or-create` adopta el recurso si existe o lo crea si no existe. Esto resulta útil cuando se desea un flujo de trabajo declarativo que funcione independientemente de si el recurso existe o no.

Para obtener más información sobre la adopción de recursos de ACK, consulte [ACK Resource Adoption](https://aws-controllers-k8s.github.io/community/docs/user-docs/adopted-resource/).

## Recursos entre cuentas y regiones
<a name="_cross_account_and_cross_region_resources"></a>

ACK puede administrar los recursos en diferentes cuentas y regiones de AWS desde un solo clúster.

 **Anotaciones de recursos entre regiones** 

Puede especificar la región de un recurso de AWS mediante una anotación:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: eu-bucket
  annotations:
    services.k8s.aws/region: eu-west-1
spec:
  name: my-eu-bucket
```

También puede especificar la región de todos los recursos de AWS creados en un espacio de nombres determinado:

 **Anotaciones de espacios de nombres** 

Establezca una región predeterminada para todos los recursos de un espacio de nombres:

```
apiVersion: v1
kind: Namespace
metadata:
  name: production
  annotations:
    services.k8s.aws/default-region: us-west-2
```

Los recursos creados en este espacio de nombres utilizan esta región a menos que se sustituya por una anotación de recurso.

 **Entre cuentas** 

Utilice los selectores de roles de IAM para asignar roles de IAM específicos a espacios de nombres:

```
apiVersion: services.k8s.aws/v1alpha1
kind: IAMRoleSelector
metadata:
  name: target-account-config
spec:
  arn: arn:aws:iam::444455556666:role/ACKTargetAccountRole
  namespaceSelector:
    names:
      - production
```

Los recursos creados en el espacio de nombres asignado utilizan automáticamente el rol especificado.

Para obtener más información sobre los selectores de roles de IAM, consulte [ACK Cross-Account Resource Management](https://aws-controllers-k8s.github.io/docs/guides/cross-account). Para obtener información sobre la configuración entre cuentas, consulte [Configuración de los permisos de ACK](ack-permissions.md).

## Gestión de errores y comportamiento de los reintentos
<a name="_error_handling_and_retry_behavior"></a>

ACK gestiona automáticamente los errores transitorios y reintenta las operaciones fallidas.

Estrategia de reintento:
+ Los errores transitorios (limitación de velocidad, problemas temporales del servicio, permisos insuficientes) provocan reintentos automáticos.
+ El retroceso exponencial evita que las API de AWS se sobrecarguen.
+ El número máximo de reintentos varía según el tipo de error.
+ Los errores permanentes (parámetros no válidos, conflictos en el nombre del recurso) no se vuelven a intentar.

Compruebe el estado del recurso para ver los detalles del error mediante `kubectl describe`:

```
kubectl describe bucket my-bucket
```

Busque las condiciones de estado con mensajes de error, los eventos que muestren los intentos de conciliación recientes y el campo `message` en las condiciones de estado que explique los errores. Los errores más comunes son la insuficiencia de permisos de IAM, los conflictos en los nombres de los recursos en AWS, los valores de configuración no válidos en la `spec` y la superación de AWS Service Quotas.

Para solucionar errores comunes, consulte [Solución de problemas con capacidades de ACK](ack-troubleshooting.md).

## Composición de recursos con kro
<a name="_resource_composition_with_kro"></a>

Para componer y conectar varios recursos de ACK entre sí, utilice la capacidad de EKS para kro (Kube Resource Orchestrator). kro proporciona una forma declarativa de definir grupos de recursos, lo que transfiere la configuración entre recursos para administrar patrones de infraestructura complejos de forma sencilla.

Para ver ejemplos detallados de cómo crear composiciones de recursos personalizados con recursos de ACK, consulte [Conceptos de kro](kro-concepts.md). 

## Siguientes pasos
<a name="_next_steps"></a>
+  [Consideraciones sobre ACK para EKS](ack-considerations.md): patrones y estrategias de integración específicos de EKS

# Configuración de los permisos de ACK
<a name="ack-permissions"></a>

ACK necesita permisos de IAM para crear y administrar recursos de AWS en su nombre. En este tema, se explica cómo funciona IAM con ACK y se proporciona orientación sobre la configuración de los permisos para distintos casos de uso.

## Cómo funciona IAM con ACK
<a name="_how_iam_works_with_ack"></a>

ACK usa roles de IAM para autenticarse con AWS y llevar a cabo acciones en los recursos. Hay dos formas de proporcionar permisos a ACK:

 **Rol de capacidad**: el rol de IAM que proporciona al crear la capacidad de ACK. Este rol se utiliza de forma predeterminada para todas las operaciones de ACK.

 **Selectores de roles de IAM**: roles de IAM adicionales que se pueden asignar a espacios de nombres o recursos específicos. Estos roles anulan el rol de capacidad para los recursos de su ámbito.

Cuando ACK necesita crear o administrar un recurso, determina qué rol de IAM se utiliza:

1. Compruebe si un IAMRoleSelector coincide con el espacio de nombres del recurso.

1. Si hay una coincidencia, asuma el rol de IAM.

1. De lo contrario, use el rol de capacidad.

Este enfoque permite una administración flexible de los permisos, desde configuraciones simples de un solo rol hasta configuraciones complejas de varias cuentas y varios equipos.

## Introducción: configuración sencilla de permisos
<a name="_getting_started_simple_permission_setup"></a>

Para el desarrollo, las pruebas o los casos de uso sencillos, puede agregar todos los permisos del servicio necesarios directamente al rol de capacidad.

Este enfoque funciona bien cuando:
+ Comienza a usar ACK.
+ Todos los recursos están en la misma cuenta de AWS.
+ Un solo equipo administra todos los recursos de ACK.
+ Confía en que todos los usuarios de ACK tengan los mismos permisos.

## Práctica recomendada de producción: selectores de roles de IAM
<a name="_production_best_practice_iam_role_selectors"></a>

Para los entornos de producción, utilice los selectores de roles de IAM para implementar el acceso con privilegio mínimo y el aislamiento de espacios de nombres.

Al utilizar selectores de roles de IAM, el rol de la capacidad solo necesita los permisos `sts:AssumeRole` y `sts:TagSession` para asumir los roles específicos del servicio. No es necesario agregar ningún permiso de servicio de AWS (como S3 o RDS) al propio rol de capacidad, ya que esos permisos se conceden a los roles de IAM individuales que asume el rol de capacidad.

 **Cómo elegir entre los modelos de permisos**:

Utilice los **permisos directos** (adición de permisos de servicio al rol de capacidad) cuando:
+ Esté comenzando y desee la configuración más sencilla.
+ Todos los recursos estén en la misma cuenta que el clúster.
+ Tenga requisitos de permisos administrativos para todo el clúster.
+ Todos los equipos puedan compartir los mismos permisos.

Utilice los **selectores de roles de IAM** cuando:
+ Administre recursos en varias cuentas de AWS.
+ Los diferentes equipos o espacios de nombres necesiten permisos diferentes.
+ Necesite un control de acceso detallado por espacio de nombres.
+ Desee seguir las prácticas de seguridad de privilegio mínimo.

Puede comenzar con permisos directos y migrar a los selectores de roles de IAM más adelante, a medida que aumenten sus necesidades.

 **Por qué debería utilizar los selectores de roles de IAM en producción:** 
+  **Privilegio mínimo**: cada espacio de nombres obtiene solo los permisos que necesita.
+  **Aislamiento del equipo**: el equipo A no puede usar los permisos del equipo B accidentalmente.
+  **Auditoría más sencilla**: se asigna claramente el espacio de nombres que utiliza cada rol.
+  **Compatibilidad entre cuentas**: es necesario para administrar los recursos en varias cuentas.
+  **Separación de preocupaciones**: los diferentes servicios o entornos utilizan roles diferentes.

### Configuración básica del selector de roles de IAM
<a name="_basic_iam_role_selector_setup"></a>

 **Paso 1: creación de un rol de IAM específico del servicio** 

Cree un rol de IAM con permisos para servicios de AWS específicos:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": "*"
    }
  ]
}
```

Configure la política de confianza para permitir que el rol de capacidad la asuma:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/ACKCapabilityRole"
      },
      "Action": ["sts:AssumeRole", "sts:TagSession"]
    }
  ]
}
```

 **Paso 2: concesión del permiso AssumeRole al rol de capacidad** 

Agregue el permiso al rol de capacidad para asumir el rol específico del servicio:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["sts:AssumeRole", "sts:TagSession"],
      "Resource": "arn:aws:iam::111122223333:role/ACK-S3-Role"
    }
  ]
}
```

 **Paso 3: creación de IAMRoleSelector** 

Asigne el rol de IAM a un espacio de nombres:

```
apiVersion: services.k8s.aws/v1alpha1
kind: IAMRoleSelector
metadata:
  name: s3-namespace-config
spec:
  arn: arn:aws:iam::111122223333:role/ACK-S3-Role
  namespaceSelector:
    names:
      - s3-resources
```

 **Paso 4: creación de recursos en el espacio de nombres asignado** 

Los recursos del espacio de nombres `s3-resources` utilizan automáticamente el rol especificado:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: my-bucket
  namespace: s3-resources
spec:
  name: my-production-bucket
```

## Administración multicuenta
<a name="_multi_account_management"></a>

Utilice los selectores de roles de IAM para administrar los recursos de varias cuentas de AWS.

 **Paso 1: creación de un rol de IAM entre cuentas** 

En la cuenta de destino (444455556666), cree un rol que confíe en el rol de capacidad de la cuenta de origen:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/ACKCapabilityRole"
      },
      "Action": ["sts:AssumeRole", "sts:TagSession"]
    }
  ]
}
```

Adjunte permisos específicos del servicio a este rol.

 **Paso 2: concesión del permiso AssumeRole** 

En la cuenta de origen (111122223333), permita que el rol de capacidad asuma el rol de cuenta de destino:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["sts:AssumeRole", "sts:TagSession"],
      "Resource": "arn:aws:iam::444455556666:role/ACKTargetAccountRole"
    }
  ]
}
```

 **Paso 3: creación de IAMRoleSelector** 

Asigne el rol de acceso entre cuentas a un espacio de nombres:

```
apiVersion: services.k8s.aws/v1alpha1
kind: IAMRoleSelector
metadata:
  name: production-account-config
spec:
  arn: arn:aws:iam::444455556666:role/ACKTargetAccountRole
  namespaceSelector:
    names:
      - production
```

 **Paso 4: creación de recursos** 

Los recursos del espacio de nombres `production` se crean en la cuenta de destino:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: my-bucket
  namespace: production
spec:
  name: my-cross-account-bucket
```

## Etiquetas de sesión
<a name="_session_tags"></a>

La capacidad ACK de EKS establece automáticamente etiquetas de sesión en todas las solicitudes de la API de AWS. Estas etiquetas permiten un control de acceso detallado y auditoría al identificar el origen de cada solicitud.

### Etiquetas de sesión disponibles
<a name="_available_session_tags"></a>

Las siguientes etiquetas de sesión se incluyen en cada llamada a la API de AWS que realiza ACK:


| Clave de etiqueta | Descripción | 
| --- | --- | 
|   `eks:eks-capability-arn`   |  El ARN de la capacidad de EKS que realiza la solicitud  | 
|   `eks:kubernetes-namespace`   |  El espacio de nombres de Kubernetes del recurso que se administra  | 
|   `eks:kubernetes-api-group`   |  El grupo de API de Kubernetes del recurso (por ejemplo, `s3.services.k8s.aws`)  | 

### Uso de etiquetas de sesión para el control de acceso
<a name="_using_session_tags_for_access_control"></a>

Puede utilizar estas etiquetas de sesión en las condiciones de las políticas de IAM para restringir qué recursos puede administrar ACK. Esto proporciona una capa adicional de seguridad más allá de los selectores de roles de IAM basados en el espacio de nombres.

 **Ejemplo: restringir por espacio de nombres** 

Permita que ACK cree buckets de S3 solo cuando la solicitud se origine en el espacio de nombres `production`:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:CreateBucket",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalTag/eks:kubernetes-namespace": "production"
        }
      }
    }
  ]
}
```

 **Ejemplo: restringir por capacidad** 

Permita acciones solo desde una capacidad ACK específica:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalTag/eks:eks-capability-arn": "arn:aws:eks:us-west-2:111122223333:capability/my-cluster/ack/my-ack"
        }
      }
    }
  ]
}
```

**nota**  
Las etiquetas de sesión constituyen una diferencia con respecto a ACK autoadministrado, que no establece estas etiquetas de forma predeterminada. Esto permite un control de acceso más detallado con la capacidad administrada.

## Patrones avanzados del selector de roles de IAM
<a name="_advanced_iam_role_selector_patterns"></a>

Para obtener la configuración avanzada, que incluye selectores de roles, asignación de roles específica del recurso y ejemplos adicionales, consulte la [documentación sobre IRSA de ACK](https://aws-controllers-k8s.github.io/community/docs/user-docs/irsa/).

## Siguientes pasos
<a name="_next_steps"></a>
+  [Conceptos de ACK](ack-concepts.md): descripción de los conceptos de ACK y el ciclo de vida de los recursos
+  [Conceptos de ACK](ack-concepts.md): información sobre las políticas de adopción y eliminación de recursos
+  [Consideraciones sobre la seguridad para las capacidades de EKS](capabilities-security.md): descripción de las prácticas recomendadas de seguridad para capacidades

# Consideraciones sobre ACK para EKS
<a name="ack-considerations"></a>

En este tema, se tratan aspectos importantes al utilizar la capacidad de EKS para ACK, como la configuración de IAM, los patrones de varias cuentas y la integración con otras capacidades de EKS.

## Patrones de configuración de IAM
<a name="_iam_configuration_patterns"></a>

La capacidad de ACK utiliza un rol de capacidad de IAM para autenticarse con AWS. Elija el patrón de IAM adecuado en función de sus requisitos.

### Sencillo: rol de capacidad único
<a name="_simple_single_capability_role"></a>

Para el desarrollo, las pruebas o los casos de uso sencillos, conceda todos los permisos necesarios directamente al rol de capacidad.

 **Cuándo se debe usar**:
+ Introducción a ACK
+ Implementaciones de una sola cuenta
+ Todos los recursos administrados por un equipo
+ Entornos de desarrollo y pruebas

 **Ejemplo**: agregue permisos de S3 y RDS al rol de capacidad con las condiciones de etiquetado de recursos.

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:*"],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:RequestedRegion": ["us-west-2", "us-east-1"]
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": ["rds:*"],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:RequestedRegion": ["us-west-2", "us-east-1"]
        },
      }
    }
  ]
}
```

Este ejemplo limita las operaciones de S3 y RDS a regiones específicas y requiere que los recursos de RDS tengan una etiqueta `ManagedBy: ACK`.

### Producción: selectores de roles de IAM
<a name="_production_iam_role_selectors"></a>

Para los entornos de producción, utilice los selectores de roles de IAM para implementar el acceso con privilegio mínimo y el aislamiento de espacios de nombres.

 **Cuándo se debe usar**:
+ Entornos de producción
+ Clústeres de varios equipos
+ Administración de recursos con varias cuentas
+ Requisitos de seguridad de privilegio mínimo
+ Diferentes servicios que necesitan diferentes permisos

 **Ventajas**:
+ Cada espacio de nombres obtiene solo los permisos que necesita.
+ Aislamiento del equipo: el equipo A no puede usar los permisos del equipo B
+ Auditoría y conformidad más fáciles
+ Necesario para la administración de recursos entre cuentas

Para obtener información sobre la configuración de selectores de roles de IAM, consulte [Configuración de los permisos de ACK](ack-permissions.md).

## Integración con otras capacidades de EKS
<a name="_integration_with_other_eks_capabilities"></a>

### GitOps con Argo CD
<a name="_gitops_with_argo_cd"></a>

Utilice la capacidad de EKS para Argo CD para implementar recursos de ACK desde repositorios de Git, lo que permite usar los flujos de trabajo de GitOps para la administración de infraestructuras.

 **Consideraciones**:
+ Almacene recursos de ACK junto con manifiestos de aplicaciones para GitOps integrales.
+ Organice por entorno, servicio o tipo de recurso según la estructura de su equipo.
+ Utilice la sincronización automática de Argo CD para una conciliación continua.
+ Active la poda para eliminar automáticamente los recursos eliminados.
+ Tenga en cuenta los patrones radiales para la administración de infraestructuras de varios clústeres.

GitOps proporciona registros de auditoría, capacidades de reversión y administración declarativa de infraestructuras. Para obtener más información sobre Argo CD, consulte [Uso de Argo CD](working-with-argocd.md).

### Composición de recursos con kro
<a name="_resource_composition_with_kro"></a>

Utilice la capacidad de EKS para kro (Kube Resource Orchestrator) para componer varios recursos de ACK en abstracciones de nivel superior y API personalizadas.

 **Cuándo se usa kro con ACK**:
+ Para la creación de patrones reutilizables para pilas de infraestructura comunes (base de datos \$1 copias de seguridad \$1 supervisión)
+ Para la creación de plataformas de autoservicio con API simplificadas para los equipos de aplicaciones
+ Para la administración de dependencias de los recursos y para la transferencia de valores entre recursos (de ARN de bucket de S3 a función de Lambda)
+ Para la estandarización de las configuraciones de la infraestructura en todos los equipos
+ Para la reducción de la complejidad mediante la ocultación de los detalles de la implementación detrás de recursos personalizados

 **Ejemplos de patrones**:
+ Pila de la aplicación: bucket de S3 \$1 cola de SQS \$1 configuración de notificaciones
+ Configuración de la base de datos: instancia de RDS \$1 grupo de parámetros \$1 grupo de seguridad \$1 secretos
+ Redes: VPC \$1 subredes \$1 tablas de enrutamiento \$1 grupos de seguridad

kro gestiona el orden de las dependencias, la propagación de estados y la administración del ciclo de vida de los recursos compuestos. Para obtener más información sobre kro, consulte [Conceptos de kro](kro-concepts.md).

## Organización de los recursos
<a name="_organizing_your_resources"></a>

Organice los recursos de ACK mediante espacios de nombres de Kubernetes y etiquetas de recursos de AWS para mejorar la administración, el control de acceso y el seguimiento de los costos.

### Organización de espacios de nombres
<a name="_namespace_organization"></a>

Utilice los espacios de nombres de Kubernetes para separar de forma lógica los recursos de ACK por entorno (producción, prueba, desarrollo), equipo (plataforma, datos, ML) o aplicación.

 **Ventajas**:
+ RBAC con ámbito de espacio de nombres para el control de acceso
+ Establecimiento de regiones predeterminadas por espacio de nombres mediante anotaciones
+ Administración y limpieza de recursos más sencillas
+ Separación lógica alineada con la estructura organizativa

### Etiquetado de recursos
<a name="_resource_tagging"></a>

La capacidad ACK de EKS aplica automáticamente etiquetas predeterminadas a todos los recursos de AWS que crea. Estas etiquetas difieren de las de ACK autoadministrado y proporcionan una trazabilidad mejorada.

 **Etiquetas predeterminadas que aplica la capacidad**:


| Clave de etiqueta | Descripción | 
| --- | --- | 
|   `eks:controller-version`   |  La versión del controlador de ACK  | 
|   `eks:kubernetes-namespace`   |  El espacio de nombres de Kubernetes del recurso de ACK  | 
|   `eks:kubernetes-resource-name`   |  El nombre del recurso de Kubernetes  | 
|   `eks:kubernetes-api-group`   |  El grupo de API de Kubernetes (por ejemplo, `s3.services.k8s.aws`)  | 
|   `eks:eks-capability-arn`   |  El ARN de la capacidad ACK de EKS  | 

**nota**  
ACK autoadministrado utiliza etiquetas predeterminadas diferentes: `services.k8s.aws/controller-version` y `services.k8s.aws/namespace`. Las etiquetas de la capacidad utilizan el prefijo `eks:` para mantener la coherencia con otras características de EKS.

 **Etiquetas adicionales recomendadas**:

Agregue etiquetas personalizadas para la asignación de costos, el seguimiento de la propiedad y fines organizativos:
+ Entorno (producción, prueba, desarrollo)
+ Propiedad del equipo o departamento
+ Centro de costos para la asignación de la facturación
+ Nombre de la aplicación o del servicio

## Migración desde otras herramientas de infraestructura como código
<a name="_migration_from_other_infrastructure_as_code_tools"></a>

Muchas organizaciones encuentran valor al estandarizar en Kubernetes más allá de la orquestación de sus cargas de trabajo. Al migrar la administración de la infraestructura y los recursos de AWS a ACK, puede estandarizar la administración de la infraestructura mediante las API de Kubernetes junto con las cargas de trabajo de aplicaciones.

 **Ventajas de estandarizar en Kubernetes para la infraestructura**:
+  **Único origen de información verdadera**: administre las aplicaciones y la infraestructura en Kubernetes, lo que posibilita una práctica de GitOps de extremo a extremo.
+  **Herramientas unificadas**: los equipos utilizan los recursos y las herramientas de Kubernetes en lugar de aprender múltiples herramientas y marcos.
+  **Conciliación coherente**: ACK concilia continuamente los recursos de AWS como lo hace Kubernetes con las cargas de trabajo, mediante la detección y la corrección de las desviaciones en comparación con las herramientas imperativas.
+  **Composiciones nativas**: con kro y ACK juntos, hace referencia a los recursos de AWS directamente en los manifiestos de aplicaciones y recursos, al pasar las cadenas de conexión y los ARN entre los recursos.
+  **Operaciones simplificadas**: dispone de un plano de control para las implementaciones, las reversiones y la observabilidad en todo el sistema.

ACK permite adoptar los recursos de AWS existentes sin volver a crearlos, lo que permite una migración sin tiempo de inactividad desde CloudFormation, Terraform o recursos externos al clúster.

 **Adopte un recurso existente**:

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: existing-bucket
  annotations:
    services.k8s.aws/adoption-policy: "adopt-or-create"
spec:
  name: my-existing-bucket-name
```

Una vez adoptado, ACK administra el recurso y lo puede actualizar mediante los manifiestos de Kubernetes. Puede migrar de forma gradual: se adoptan los recursos según sea necesario y, al mismo tiempo, se mantienen las herramientas de IaC existentes para otros recursos.

ACK también admite recursos de solo lectura. En el caso de los recursos administrados por otros equipos o herramientas a los que quiera hacer referencia, pero no modificar, combine la adopción con la política de eliminación `retain` y otorgue permisos de IAM de solo lectura. De este modo, las aplicaciones pueden detectar la infraestructura compartida (VPC, roles de IAM, claves de KMS) a través de las API de Kubernetes sin correr el riesgo de sufrir modificaciones.

Para obtener más información sobre la adopción de recursos, consulte [Conceptos de ACK](ack-concepts.md).

## Políticas de eliminación
<a name="_deletion_policies"></a>

Las políticas de eliminación controlan lo que ocurre con los recursos de AWS cuando se elimina el recurso de Kubernetes correspondiente. Elija la política adecuada en función del ciclo de vida de los recursos y sus requisitos operativos.

### Eliminación (opción predeterminada)
<a name="_delete_default"></a>

El recurso de AWS se elimina al eliminar el recurso de Kubernetes. De este modo, se mantiene la coherencia entre el clúster y AWS, lo que garantiza que los recursos no se acumulen.

 **Cuándo se usa la eliminación**:
+ Entornos de desarrollo y prueba en los que la limpieza es importante
+ Recursos efímeros vinculados al ciclo de vida de la aplicación (bases de datos de prueba, buckets temporales)
+ Recursos que no deberían durar más que la aplicación (colas de SQS, clústeres de ElastiCache)
+ Optimización de costos: limpieza automática de los recursos no utilizados
+ Entornos administrados con GitOps en los que la eliminación de recursos de Git debería eliminar la infraestructura

La política de eliminación predeterminada se ajusta al modelo declarativo de Kubernetes: lo que hay en el clúster coincide con lo que hay en AWS.

### Retener
<a name="_retain"></a>

El recurso de AWS se conserva al eliminar el recurso de Kubernetes. De este modo, se protegen los datos críticos y se permite que los recursos sobrepasen su tiempo de representación de Kubernetes.

 **Cuándo se usa la retención**:
+ Bases de datos de producción con datos críticos que deben sobrevivir a los cambios del clúster
+ Buckets de almacenamiento a largo plazo con requisitos de conformidad o auditoría
+ Recursos compartidos que utilizan múltiples aplicaciones o equipos
+ Recursos que se están migrando a diferentes herramientas de administración
+ Escenarios de recuperación ante desastres en los que se desea preservar la infraestructura
+ Recursos con dependencias complejas que requieren un desmantelamiento cuidadoso

```
apiVersion: rds.services.k8s.aws/v1alpha1
kind: DBInstance
metadata:
  name: production-db
  annotations:
    services.k8s.aws/deletion-policy: "retain"
spec:
  dbInstanceIdentifier: prod-db
  # ... configuration
```

**importante**  
Los recursos retenidos siguen generando costos de AWS y se deben eliminar manualmente de AWS cuando ya no se necesiten. Utilice el etiquetado de recursos a fin de hacer un seguimiento de los recursos retenidos para su limpieza.

Para obtener más información sobre las políticas de eliminación, consulte [Conceptos de ACK](ack-concepts.md).

## Documentación ascendente
<a name="_upstream_documentation"></a>

Para obtener información detallada sobre el uso de ACK:
+  [Guía de uso de ACK](https://aws-controllers-k8s.github.io/community/docs/user-docs/usage/): creación y administración de recursos
+  [Referencia sobre la API de ACK](https://aws-controllers-k8s.github.io/community/reference/): documentación completa sobre la API para todos los servicios
+  [Documentación de ACK](https://aws-controllers-k8s.github.io/community/docs/): documentación completa para el usuario

## Siguientes pasos
<a name="_next_steps"></a>
+  [Configuración de los permisos de ACK](ack-permissions.md): configuración de los permisos de IAM y los patrones de varias cuentas
+  [Conceptos de ACK](ack-concepts.md): descripción de los conceptos de ACK y el ciclo de vida de los recursos
+  [Solución de problemas con capacidades de ACK](ack-troubleshooting.md): solución de problemas de ACK
+  [Uso de Argo CD](working-with-argocd.md): implementación de recursos de ACK con GitOps
+  [Conceptos de kro](kro-concepts.md): composición de recursos de ACK en abstracciones de nivel superior

# Solución de problemas con capacidades de ACK
<a name="ack-troubleshooting"></a>

En este tema se proporcionan instrucciones para la solución de problemas de la capacidad de EKS para ACK, como las comprobaciones de estado de la capacidad, la verificación del estado de los recursos y los problemas de permisos de IAM.

**nota**  
Las capacidades de EKS son completamente administradas y se ejecutan fuera del clúster. No tiene acceso a los registros ni a los espacios de nombres de los controladores. La solución de problemas se centra en el estado de la capacidad, el estado de los recursos y la configuración de IAM.

## La capacidad está ACTIVA, pero no se crean recursos
<a name="_capability_is_active_but_resources_arent_being_created"></a>

Si la capacidad de ACK muestra el estado `ACTIVE`, pero no se están creando recursos en AWS, compruebe el estado de la capacidad, el estado de los recursos y los permisos de IAM.

 **Compruebe el estado de la capacidad**:

Puede ver los problemas de estado de la capacidad en la consola de EKS o mediante la AWS CLI.

 **Consola**:

1. Abra la consola de Amazon EKS en https://console.aws.amazon.com/eks/home\$1/clusters.

1. Seleccione el nombre del clúster.

1. Seleccione la pestaña **Observabilidad**.

1. Elija **Supervisar clúster**.

1. Seleccione la pestaña **Capacidades** para ver el estado de todas las capacidades.

 ** AWS CLI**:

```
# View capability status and health
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-ack

# Look for issues in the health section
```

 **Causas habituales**:
+  **Faltan permisos de IAM**: el rol de capacidad no tiene permisos para el servicio de AWS.
+  **Espacio de nombres incorrecto**: los recursos se crearon en un espacio de nombres sin el IAMRoleSelector adecuado.
+  **Especificación de recurso no válida**: compruebe las condiciones del estado del recurso para ver si hay errores de validación.
+  **Limitación de la API**: se están alcanzando los límites de velocidad de la API de AWS.
+  **Webhooks de admisión**: los webhooks de admisión impiden que el controlador corrija el estado de los recursos.

 **Compruebe el estado del recurso**:

```
# Describe the resource to see conditions and events
kubectl describe bucket my-bucket -n default

# Look for status conditions
kubectl get bucket my-bucket -n default -o jsonpath='{.status.conditions}'

# View resource events
kubectl get events --field-selector involvedObject.name=my-bucket -n default
```

 **Verifique los permisos de IAM**:

```
# View the Capability Role's policies
aws iam list-attached-role-policies --role-name my-ack-capability-role
aws iam list-role-policies --role-name my-ack-capability-role

# Get specific policy details
aws iam get-role-policy --role-name my-ack-capability-role --policy-name policy-name
```

## Recursos creados en AWS que no se muestran en Kubernetes
<a name="resources_created_in_shared_aws_but_not_showing_in_kubernetes"></a>

ACK solo hace el seguimiento de los recursos que crea a través de los manifiestos de Kubernetes. Para administrar los recursos de AWS existentes con ACK, use la característica de adopción.

```
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: existing-bucket
  annotations:
    services.k8s.aws/adoption-policy: "adopt-or-create"
spec:
  name: my-existing-bucket-name
```

Para obtener más información sobre la adopción de recursos, consulte [Conceptos de ACK](ack-concepts.md).

## No se están creando recursos entre cuentas
<a name="_cross_account_resources_not_being_created"></a>

Si los recursos no se crean en una cuenta de AWS de destino al utilizar los selectores de roles de IAM, compruebe la relación de confianza y la configuración de IAMRoleSelector.

 **Verifique la relación de confianza**:

```
# Check the trust policy in the target account role
aws iam get-role --role-name cross-account-ack-role --query 'Role.AssumeRolePolicyDocument'
```

La política de confianza debe permitir que el rol de capacidad de la cuenta de origen la asuma.

 **Confirme la configuración de IAMRoleSelector**:

```
# List IAMRoleSelectors (cluster-scoped)
kubectl get iamroleselector

# Describe specific selector
kubectl describe iamroleselector my-selector
```

 **Compruebe la alineación del espacio de nombres**:

Los IAMRoleSelectors son recursos de ámbito del clúster, pero tienen como destino espacios de nombres específicos. Asegúrese de que sus recursos de ACK estén en un espacio de nombres que coincida con el selector de espacios de nombres de IAMRoleSelector:

```
# Check resource namespace
kubectl get bucket my-cross-account-bucket -n production

# List all IAMRoleSelectors (cluster-scoped)
kubectl get iamroleselector

# Check which namespace the selector targets
kubectl get iamroleselector my-selector -o jsonpath='{.spec.namespaceSelector}'
```

 **Compruebe la condición de IAMRoleSelected**:

Para comprobar que el IAMRoleSelector haya coincidido correctamente con su recurso, compruebe la condición `ACK.IAMRoleSelected`:

```
# Check if IAMRoleSelector was matched
kubectl get bucket my-cross-account-bucket -n production -o jsonpath='{.status.conditions[?(@.type=="ACK.IAMRoleSelected")]}'
```

Si la condición es `False` o falta, el selector de espacios de nombres de IAMRoleSelector no coincide con el espacio de nombres del recurso. Compruebe que el `namespaceSelector` del selector coincida con las etiquetas del espacio de nombres del recurso.

 **Compruebe los permisos del rol de capacidad**:

El rol de la capacidad necesita los permisos `sts:AssumeRole` y `sts:TagSession` para el rol de la cuenta de destino:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["sts:AssumeRole", "sts:TagSession"],
      "Resource": "arn:aws:iam::[.replaceable]`444455556666`:role/[.replaceable]`cross-account-ack-role`"
    }
  ]
}
```

Para obtener información detallada sobre la configuración entre cuentas, consulte [Configuración de los permisos de ACK](ack-permissions.md).

## Siguientes pasos
<a name="_next_steps"></a>
+  [Consideraciones sobre ACK para EKS](ack-considerations.md): consideraciones y prácticas recomendadas
+  [Configuración de los permisos de ACK](ack-permissions.md): configuración de los permisos de IAM y los patrones de varias cuentas
+  [Conceptos de ACK](ack-concepts.md): descripción de los conceptos de ACK y el ciclo de vida de los recursos
+  [Solución de problemas de capacidades de EKS](capabilities-troubleshooting.md): orientación general de solución de problemas de la capacidad

# Comparación de la capacidad de EKS para ACK con ACK autoadministrados
<a name="ack-comparison"></a>

La capacidad de EKS para ACK proporciona la misma funcionalidad que los controladores ACK autoadministrados, pero con importantes ventajas operativas. Para obtener una comparación general entre las capacidades de EKS y las soluciones autoadministradas, consulte [Consideraciones sobre las capacidades de EKS](capabilities-considerations.md). Este tema se centra en las diferencias específicas de ACK.

## Diferencias con respecto a ACK ascendentes
<a name="_differences_from_upstream_ack"></a>

La capacidad de EKS para ACK se basa en los controladores ACK ascendentes, pero difiere en la integración de IAM.

 **Rol de capacidad de IAM**: la capacidad utiliza un rol de IAM dedicado con una política de confianza que permite la entidad principal del servicio de `capabilities.eks.amazonaws.com`, pero no IRSA (roles de IAM para cuentas de servicio). Puede adjuntar las políticas de IAM directamente al rol de capacidad sin necesidad de crear ni anotar cuentas de servicio de Kubernetes ni configurar los proveedores de OIDC. Una práctica recomendada para los casos de uso de producción es configurar los permisos del servicio mediante `IAMRoleSelector`. Consulte [Configuración de los permisos de ACK](ack-permissions.md) para obtener más detalles.

 **Etiquetas de sesión**: la capacidad administrada establece automáticamente etiquetas de sesión en todas las solicitudes de API de AWS, lo que permite un control de acceso detallado y auditoría. Las etiquetas incluyen `eks:eks-capability-arn`, `eks:kubernetes-namespace` y `eks:kubernetes-api-group`. Esto difiere de ACK autoadministrado, que no establece estas etiquetas de forma predeterminada. Consulte [Configuración de los permisos de ACK](ack-permissions.md) para obtener más información sobre el uso de etiquetas de sesión en las políticas de IAM.

 **Etiquetas de recursos**: la capacidad aplica etiquetas predeterminadas diferentes a los recursos de AWS en comparación con ACK autoadministrado. La capacidad utiliza etiquetas con prefijo `eks:` (como `eks:kubernetes-namespace`, `eks:eks-capability-arn`) en lugar de las etiquetas `services.k8s.aws/` utilizadas por ACK autoadministrado. Consulte [Consideraciones sobre ACK para EKS](ack-considerations.md) para ver la lista completa de etiquetas de recursos predeterminadas.

 **Compatibilidad de recursos**: los recursos personalizados de ACK funcionan de forma idéntica a los ACK ascendentes sin que se produzcan cambios en los archivos YAML de los recursos de ACK. La capacidad utiliza las mismas API y CRD de Kubernetes, por lo que herramientas como `kubectl` funcionan de la misma manera. Se admiten todos los controladores y recursos de GA de ACK ascendentes.

Para obtener la documentación completa de ACK y las guías específicas del servicio, consulte la [documentación de ACK.](https://aws-controllers-k8s.github.io/community/)

## Ruta de migración
<a name="_migration_path"></a>

Puede migrar de ACK autoadministrados a la capacidad administrada sin tiempo de inactividad:

1. Actualice el controlador de ACK autoadministrados para utilizar `kube-system` en las asignaciones de elección de líderes, por ejemplo:

   ```
   helm upgrade --install ack-s3-controller \
     oci://public.ecr.aws/aws-controllers-k8s/s3-chart \
     --namespace ack-system \
     --set leaderElection.namespace=kube-system
   ```

   De este modo, se traslada la asignación del controlador a `kube-system`, lo que permite que la capacidad administrada se coordine con él.

1. Cree la capacidad ACK en el clúster (consulte [Creación de una capacidad de ACK](create-ack-capability.md)).

1. La capacidad administrada reconoce los recursos de AWS administrados por ACK existentes y se encarga de la conciliación.

1. Reduzca verticalmente o elimine de forma gradual las implementaciones de controladores autoadministrados:

   ```
   helm uninstall ack-s3-controller --namespace ack-system
   ```

Este enfoque permite que ambos controladores coexistan de forma segura durante la migración. La capacidad administrada adopta automáticamente los recursos que antes administraban los controladores autoadministrados, lo que garantiza una conciliación continua sin conflictos.

## Siguientes pasos
<a name="_next_steps"></a>
+  [Creación de una capacidad de ACK](create-ack-capability.md): creación de un recurso con la capacidad de ACK
+  [Conceptos de ACK](ack-concepts.md): descripción de los conceptos de ACK y el ciclo de vida de los recursos
+  [Configuración de los permisos de ACK](ack-permissions.md): configuración de IAM y permisos

# Implementación continua con Argo CD
<a name="argocd"></a>

Argo CD es una herramienta declarativa de entrega continua de GitOps para Kubernetes. Con Argo CD, puede automatizar la implementación y la administración del ciclo de vida de sus aplicaciones en múltiples clústeres y entornos. Argo CD admite varios tipos de orígenes, como los repositorios de Git, los registros de Helm (HTTP y OCI) y las imágenes de OCI, lo que proporciona flexibilidad a las organizaciones con diferentes requisitos de seguridad y cumplimiento.

Con las capacidades de EKS, AWS administra Argo CD completamente, lo que elimina la necesidad de instalar, mantener y escalar los controladores de Argo CD y sus dependencias en sus clústeres.

## Cómo funciona Argo CD
<a name="_how_argo_cd_works"></a>

Argo CD sigue el patrón de GitOps, donde el origen de la aplicación (repositorio de Git, registro de Helm o imagen de OCI) es el origen de información verdadera para definir el estado de la aplicación deseado. Al crear un recurso `Application` de Argo CD, especifique un origen que contenga los manifiestos de la aplicación y un espacio de nombres y un clúster de Kubernetes de destino. Argo CD supervisa de forma continua tanto el origen como el estado activo del clúster y sincroniza automáticamente cualquier cambio para garantizar que el estado del clúster coincida con el estado deseado.

**nota**  
Con la capacidad de EKS para Argo CD, el software de Argo CD se ejecuta en el plano de control de AWS, no en los nodos de trabajo. Esto significa que sus nodos de trabajo no necesitan acceso directo a los repositorios de Git o a los registros de Helm, ya que la capacidad gestiona el acceso al origen desde la cuenta de AWS.

Argo CD proporciona tres tipos de recursos principales:
+  **Aplicación**: define una implementación desde un repositorio de Git a un clúster de destino.
+  **ApplicationSet**: genera múltiples aplicaciones a partir de plantillas para implementaciones de varios clústeres.
+  **AppProject**: proporciona agrupamiento lógico y control de acceso para las aplicaciones.

 **Ejemplo: creación de una aplicación de Argo CD** 

En el ejemplo siguiente, se muestra cómo crear un recurso `Application` de Argo CD:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/argoproj/argocd-example-apps.git
    targetRevision: HEAD
    path: guestbook
  destination:
    name: in-cluster
    namespace: guestbook
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
```

**nota**  
Utilice `destination.name` con el nombre del clúster que utilizó al registrar el clúster (como `in-cluster` para el clúster local). El campo `destination.server` también funciona con los ARN de clústeres de EKS, pero se recomienda utilizar los nombres de los clústeres para una mejor legibilidad.

## Ventajas de Argo CD
<a name="_benefits_of_argo_cd"></a>

Argo CD implementa un flujo de trabajo de GitOps en el que define las configuraciones de las aplicaciones en los repositorios de Git y Argo CD sincroniza automáticamente las aplicaciones para que coincidan con el estado deseado. Este enfoque centrado en Git proporciona un registro de auditoría completo de todos los cambios, permite revertirlos fácilmente y se integra de forma natural con sus procesos de revisión y aprobación de código existentes. Argo CD detecta y concilia automáticamente la diferencia entre el estado deseado en Git y el estado real de los clústeres, lo que garantiza que las implementaciones se mantengan coherentes con la configuración declarada.

Con Argo CD, puede implementar y administrar aplicaciones en varios clústeres desde una única instancia de Argo CD, lo que simplifica las operaciones en entornos de varios clústeres y regiones. La interfaz de usuario de Argo CD ofrece capacidades de visualización y supervisión, lo que le permite ver el estado de la implementación, el estado y el historial de sus aplicaciones. La interfaz de usuario se integra con AWS Identity Center (anteriormente AWS SSO) para una autenticación y autorización fluidas, lo que le permite controlar el acceso mediante su infraestructura de administración de identidades existente.

Como parte de las capacidades administradas de EKS, AWS administra completamente Argo CD, lo que elimina la necesidad de instalar, configurar y mantener la infraestructura de Argo CD. AWS administra el escalado, la aplicación de parches y la administración operativa, lo que permite a sus equipos centrarse en la entrega de la aplicación y no en el mantenimiento de la herramienta.

## Integración con AWS Identity Center
<a name="integration_with_shared_aws_identity_center"></a>

Las capacidades administradas de EKS proporcionan una integración directa entre Argo CD y AWS Identity Center, lo que permite una autenticación y autorización fluidas para sus usuarios. Al activar la capacidad de Argo CD, puede configurar la integración de AWS Identity Center para asignar los grupos y usuarios de Identity Center a los roles de RBAC de Argo CD, lo que le permite controlar quién puede acceder a las aplicaciones de Argo CD y administrarlas.

## Integración con otras capacidades administradas de EKS
<a name="_integration_with_other_eks_managed_capabilities"></a>

Argo CD se integra con otras capacidades administradas de EKS.
+  **Controladores de AWS para Kubernetes (ACK)**: utilice Argo CD para administrar la implementación de los recursos de ACK en varios clústeres, lo que activa los flujos de trabajo de GitOps para su infraestructura de AWS.
+  **kro (Kube Resource Orchestrator)**: utilice Argo CD para implementar composiciones de kro en varios clústeres, lo que permite una composición uniforme de los recursos en todo el entorno de Kubernetes.

## Introducción a Argo CD
<a name="_getting_started_with_argo_cd"></a>

Para comenzar a utilizar la capacidad de EKS para Argo CD:

1. Cree y configure un rol de capacidad de IAM con los permisos necesarios para que Argo CD acceda a los orígenes y administre aplicaciones.

1.  [Cree un recurso de capacidad de Argo CD](create-argocd-capability.md) en su clúster de EKS a través de la consola de AWS, la AWS CLI o su infraestructura preferida como herramienta de código.

1. Configure el acceso al repositorio y registre los clústeres para la implementación de aplicaciones.

1. Cree recursos de aplicación para implementar las aplicaciones desde los orígenes declarativos.

# Creación de una capacidad de Argo CD
<a name="create-argocd-capability"></a>

En este tema, se explica cómo crear una capacidad de Argo CD en un clúster de Amazon EKS.

## Requisitos previos
<a name="_prerequisites"></a>

Antes de crear una capacidad de Argo CD, asegúrese de que disponga de lo siguiente:
+ Un clúster de Amazon EKS existente que ejecute una versión de Kubernetes compatible (se admiten todas las versiones con soporte estándar y ampliado)
+  **AWS Identity Center configurado**: necesario para la autenticación de Argo CD (no se admiten los usuarios locales)
+ Un rol de capacidad de IAM con permisos para Argo CD
+ Permisos de IAM suficientes para crear recursos de capacidad en los clústeres de EKS
+  `kubectl` configurado para comunicarse con el clúster
+ (Opcional) La CLI de Argo CD instalada para facilitar la administración de clústeres y repositorios
+ (Para la CLI o eksctl) La herramienta de la CLI adecuada instalada y configurada

Para obtener instrucciones sobre cómo crear el rol de capacidad de IAM, consulte [Rol de IAM de capacidad de Amazon EKS](capability-role.md). Para obtener la configuración de Identity Center, consulte [Introducción a AWS Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html).

**importante**  
El rol de capacidad de IAM que proporcione determina a qué recursos de AWS puede acceder Argo CD. Esto incluye el acceso al repositorio de Git a través de CodeConnections y los secretos en Secrets Manager. Para obtener orientación sobre cómo crear un rol adecuado con los permisos de privilegio mínimo, consulte [Rol de IAM de capacidad de Amazon EKS](capability-role.md) y [Consideraciones sobre la seguridad para las capacidades de EKS](capabilities-security.md).

## Elección de la herramienta
<a name="_choose_your_tool"></a>

Puede crear una capacidad de Argo CD mediante la Consola de administración de AWS, la AWS CLI o eksctl:
+  [Creación de una capacidad de Argo CD mediante la consola](argocd-create-console.md): uso de la consola para una experiencia guiada
+  [Creación de una capacidad de Argo CD mediante la AWS CLI](argocd-create-cli.md): uso de la AWS CLI para scripts y automatización
+  [Creación de una capacidad de Argo CD mediante eksctl](argocd-create-eksctl.md): uso de eksctl para una experiencia nativa de Kubernetes

## Qué ocurre cuando se crea una capacidad de Argo CD
<a name="_what_happens_when_you_create_an_argo_cd_capability"></a>

Cuando crea una capacidad de Argo CD:

1. EKS crea el servicio de capacidad de Argo CD en el plano de control de AWS.

1. Las definiciones de recursos personalizados (CRD) de Kubernetes se instalan en el clúster.

1. Se crea automáticamente una entrada de acceso para el rol de capacidad de IAM, con políticas de entrada de acceso específicas de la capacidad que conceden permisos básicos de Kubernetes (consulte [Consideraciones sobre la seguridad para las capacidades de EKS](capabilities-security.md)).

1. Argo CD comienza a supervisar sus recursos personalizados (Aplicaciones, ApplicationSets, AppProjects)

1. El estado de la capacidad cambia de `CREATING` a `ACTIVE`. 

1. La interfaz de usuario de Argo CD pasa a estar accesible a través de su URL

Una vez activa, puede crear Aplicaciones de Argo CD en el clúster para implementar desde los orígenes declarativos.

**nota**  
La entrada de acceso creada automáticamente no concede permisos para implementar aplicaciones en clústeres. Para implementar aplicaciones, debe configurar permisos adicionales de control de acceso basado en roles de Kubernetes para cada clúster de destino. Consulte [Registro de clústeres de destino](argocd-register-clusters.md) para obtener detalles sobre cómo registrar clústeres y configurar el acceso.

## Siguientes pasos
<a name="_next_steps"></a>

Después de crear la capacidad de Argo CD:
+  [Conceptos de Argo CD](argocd-concepts.md): más información sobre los principios de GitOps, las políticas de sincronización y los patrones de varios clústeres
+  [Uso de Argo CD](working-with-argocd.md): configuración del acceso a repositorios, registro de clústeres de destino y creación de aplicaciones
+  [Consideraciones sobre Argo CD](argocd-considerations.md): exploración de los patrones de arquitectura de varios clústeres y configuración avanzada

# Creación de una capacidad de Argo CD mediante la consola
<a name="argocd-create-console"></a>

En este tema, se describe cómo crear una capacidad de Argo CD mediante la Consola de administración de AWS.

## Requisitos previos
<a name="_prerequisites"></a>
+  ** AWS Identity Center configurado**: Argo CD requiere AWS Identity Center para la autenticación. No se admiten usuarios locales. Si no ha configurado AWS Identity Center, consulte [Introducción a AWS Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html) para crear una instancia de Identity Center y [Adición de usuarios](https://docs.aws.amazon.com/singlesignon/latest/userguide/addusers.html) y [Adición de grupos](https://docs.aws.amazon.com/singlesignon/latest/userguide/addgroups.html) para crear usuarios y grupos a fin de acceder a Argo CD.

## Creación de la capacidad de Argo CD
<a name="_create_the_argo_cd_capability"></a>

1. Abra la consola de Amazon EKS en https://console.aws.amazon.com/eks/home\$1/clusters.

1. Seleccione el nombre del clúster para abrir la página de detalles del clúster.

1. Elija la pestaña **Capacidades**.

1. En el panel de navegación izquierdo, elija **Argo CD**.

1. Elija **Crear capacidad de Argo CD**.

1. Para el **rol de capacidad de IAM**:
   + Si ya tiene un rol de capacidad de IAM, selecciónelo en el menú desplegable.
   + Si necesita crear un rol, elija **Crear rol de Argo CD**. 

     De este modo, se abre la consola de IAM en una nueva pestaña con la política de confianza rellenada previamente y el acceso completo de lectura a Secrets Manager. No se agrega ningún otro permiso de forma predeterminada, pero puede agregarlos si es necesario. Si tiene previsto usar los repositorios de CodeCommit u otros servicios de AWS, agregue los permisos adecuados antes de crear el rol.

     Después de crear el rol, regrese a la consola de EKS y el rol se seleccionará automáticamente.
**nota**  
Si tiene previsto usar las integraciones opcionales con AWS Secrets Manager o AWS CodeConnections, tendrá que agregar permisos al rol. Para ver ejemplos de políticas de IAM y guías de configuración, consulte [Administración de secretos de aplicaciones con AWS Secrets Manager](integration-secrets-manager.md) y [Conexión a los repositorios de Git con AWS CodeConnections](integration-codeconnections.md).

1. Configure la integración de AWS Identity Center:

   1. Seleccione **Habilitar la integración de AWS Identity Center**.

   1. Elija su instancia de Identity Center en el menú desplegable.

   1. Para configurar las asignaciones de roles para RBAC, asigne usuarios o grupos a los roles de Argo CD (ADMIN, EDITOR o VIEWER)

1. Seleccione **Crear**.

Comenzará el proceso de creación de la capacidad.

## Comprobación de la activación de la capacidad
<a name="_verify_the_capability_is_active"></a>

1. En la pestaña **Capacidades**, consulte el estado de la capacidad de Argo CD.

1. Espere a que el estado cambie de `CREATING` a `ACTIVE`.

1. Una vez activa, la capacidad está lista para usarse.

Para obtener información sobre los estados de la capacidad y la solución de problemas, consulte [Uso de recursos de capacidades](working-with-capabilities.md).

## Acceso a la interfaz de usuario de Argo CD
<a name="_access_the_argo_cd_ui"></a>

Después de que la capacidad esté activa, puede acceder a la interfaz de usuario de Argo CD:

1. En la página de la capacidad de Argo CD, seleccione **Abrir la interfaz de usuario de Argo CD**.

1. La interfaz de usuario de Argo CD se abre en una nueva pestaña del navegador.

1. Ahora puede crear aplicaciones y administrar las implementaciones a través de la interfaz de usuario.

## Siguientes pasos
<a name="_next_steps"></a>
+  [Uso de Argo CD](working-with-argocd.md): configuración de repositorios, registro de clústeres y creación de aplicaciones
+  [Consideraciones sobre Argo CD](argocd-considerations.md): arquitectura de varios clústeres y configuración avanzada
+  [Uso de recursos de capacidades](working-with-capabilities.md): administración del recurso de la capacidad de Argo CD

# Creación de una capacidad de Argo CD mediante la AWS CLI
<a name="argocd-create-cli"></a>

En este tema, se describe cómo crear una capacidad de Argo CD mediante la AWS CLI.

## Requisitos previos
<a name="_prerequisites"></a>
+  **AWS CLI**: versión `2.12.3` o posterior. Para comprobar la versión, ejecute `aws --version`. Para obtener más información, consulte [Instalación](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) en la Guía del usuario de la interfaz de la línea de comandos de AWS.
+  ** `kubectl` ** – una herramienta de línea de comandos para trabajar con clústeres de Kubernetes. Para obtener más información, consulte [Configuración de `kubectl` y `eksctl`](install-kubectl.md).
+  ** AWS Identity Center configurado**: Argo CD requiere AWS Identity Center para la autenticación. No se admiten usuarios locales. Si no ha configurado AWS Identity Center, consulte [Introducción a AWS Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html) para crear una instancia de Identity Center y [Adición de usuarios](https://docs.aws.amazon.com/singlesignon/latest/userguide/addusers.html) y [Adición de grupos](https://docs.aws.amazon.com/singlesignon/latest/userguide/addgroups.html) para crear usuarios y grupos a fin de acceder a Argo CD.

## Paso 1: creación de un rol de capacidad de IAM
<a name="_step_1_create_an_iam_capability_role"></a>

Cree un archivo de política de confianza:

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

Cree el rol de IAM:

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

**nota**  
Si tiene previsto usar las integraciones opcionales con AWS Secrets Manager o AWS CodeConnections, tendrá que agregar permisos al rol. Para ver ejemplos de políticas de IAM y guías de configuración, consulte [Administración de secretos de aplicaciones con AWS Secrets Manager](integration-secrets-manager.md) y [Conexión a los repositorios de Git con AWS CodeConnections](integration-codeconnections.md).

## Paso 2: creación de la capacidad de Argo CD
<a name="_step_2_create_the_argo_cd_capability"></a>

Cree el recurso de la capacidad de Argo CD en su clúster.

En primer lugar, defina las variables de entorno para la configuración de Identity Center:

```
# Get your Identity Center instance ARN (replace region if your IDC instance is in a different region)
export IDC_INSTANCE_ARN=$(aws sso-admin list-instances --region [.replaceable]`region` --query 'Instances[0].InstanceArn' --output text)

# Get a user ID for RBAC mapping (replace with your username and region if needed)
export IDC_USER_ID=$(aws identitystore list-users \
  --region [.replaceable]`region` \
  --identity-store-id $(aws sso-admin list-instances --region [.replaceable]`region` --query 'Instances[0].IdentityStoreId' --output text) \
  --query 'Users[?UserName==`your-username`].UserId' --output text)

echo "IDC_INSTANCE_ARN=$IDC_INSTANCE_ARN"
echo "IDC_USER_ID=$IDC_USER_ID"
```

Cree la capacidad con la integración de Identity Center. Sustituya *region-code* por la región de AWS donde se encuentra el clúster, *my-cluster* por el nombre del clúster e *idc-region-code* por el código de la región donde se ha configurado el IAM Identity Center:

```
aws eks create-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-argocd \
  --type ARGOCD \
  --role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/ArgoCDCapabilityRole \
  --delete-propagation-policy RETAIN \
  --configuration '{
    "argoCd": {
      "awsIdc": {
        "idcInstanceArn": "'$IDC_INSTANCE_ARN'",
        "idcRegion": "'[.replaceable]`idc-region-code`'"
      },
      "rbacRoleMappings": [{
        "role": "ADMIN",
        "identities": [{
          "id": "'$IDC_USER_ID'",
          "type": "SSO_USER"
        }]
      }]
    }
  }'
```

El comando devuelve una respuesta inmediatamente, pero la capacidad tarda algún tiempo en activarse mientras EKS crea la infraestructura y los componentes de la capacidad necesarios. EKS instalará las definiciones de recursos personalizados de Kubernetes relacionadas con esta capacidad en el clúster según se vaya creando.

**nota**  
Si recibe un error que indica que el clúster no existe o que no tiene permisos, compruebe lo siguiente:  
El nombre del clúster es correcto
La AWS CLI está configurada para la región correcta
Dispone de los permisos de IAM necesarios

## Paso 3: comprobación de la activación de la capacidad
<a name="_step_3_verify_the_capability_is_active"></a>

Espere a que se active la capacidad. Reemplace *region-code* por la región de AWS en la que se encuentra el clúster y *my-cluster* por el nombre del clúster.

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

La capacidad estará lista cuando aparezca el estado `ACTIVE`. No continúe con el paso siguiente hasta que el estado sea `ACTIVE`.

También puede ver todos los detalles de la capacidad:

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

## Paso 4: comprobación de la disponibilidad de los recursos personalizados
<a name="_step_4_verify_custom_resources_are_available"></a>

Una vez que la capacidad esté activa, compruebe que los recursos personalizados de Argo CD estén disponibles en el clúster:

```
kubectl api-resources | grep argoproj.io
```

Debería ver todos los tipos de recursos `Application` y `ApplicationSet` en la lista.

## Siguientes pasos
<a name="_next_steps"></a>
+  [Uso de Argo CD](working-with-argocd.md): configuración de repositorios, registro de clústeres y creación de aplicaciones
+  [Consideraciones sobre Argo CD](argocd-considerations.md): arquitectura de varios clústeres y configuración avanzada
+  [Uso de recursos de capacidades](working-with-capabilities.md): administración del recurso de la capacidad de Argo CD

# Creación de una capacidad de Argo CD mediante eksctl
<a name="argocd-create-eksctl"></a>

En este tema, se describe cómo crear una capacidad de Argo CD mediante eksctl.

**nota**  
Los siguientes pasos requieren la versión `0.220.0` o posterior de eksctl. Para comprobar la versión, ejecute `eksctl version`.

## Paso 1: creación de un rol de capacidad de IAM
<a name="_step_1_create_an_iam_capability_role"></a>

Cree un archivo de política de confianza:

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

Cree el rol de IAM:

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

**nota**  
Para esta configuración básica, no se necesitan políticas de IAM adicionales. Si tiene previsto usar Secrets Manager para las credenciales del repositorio o CodeConnections, tendrá que agregar permisos al rol. Para ver ejemplos de políticas de IAM y guías de configuración, consulte [Administración de secretos de aplicaciones con AWS Secrets Manager](integration-secrets-manager.md) y [Conexión a los repositorios de Git con AWS CodeConnections](integration-codeconnections.md).

## Paso 2: obtención de la configuración de AWS Identity Center
<a name="step_2_get_your_shared_aws_identity_center_configuration"></a>

Obtenga el ARN y el ID de usuario de su instancia de Identity Center para la configuración de RBAC:

```
# Get your Identity Center instance ARN
aws sso-admin list-instances --query 'Instances[0].InstanceArn' --output text

# Get a user ID for admin access (replace 'your-username' with your Identity Center username)
aws identitystore list-users \
  --identity-store-id $(aws sso-admin list-instances --query 'Instances[0].IdentityStoreId' --output text) \
  --query 'Users[?UserName==`your-username`].UserId' --output text
```

Anote estos valores, ya que los necesitará en el siguiente paso.

## Paso 3: creación de un archivo de configuración de eksctl
<a name="_step_3_create_an_eksctl_configuration_file"></a>

Cree un archivo llamado `argocd-capability.yaml` con el siguiente contenido. Sustituya los valores de marcador de posición por el nombre del clúster, la región del clúster, el ARN del rol de IAM, el ARN de la instancia de Identity Center, la región de Identity Center y el ID de usuario:

```
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: my-cluster
  region: cluster-region-code

capabilities:
  - name: my-argocd
    type: ARGOCD
    roleArn: arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole
    deletePropagationPolicy: RETAIN
    configuration:
      argocd:
        awsIdc:
          idcInstanceArn: arn:aws:sso:::instance/ssoins-123abc
          idcRegion: idc-region-code
        rbacRoleMappings:
          - role: ADMIN
            identities:
              - id: 38414300-1041-708a-01af-5422d6091e34
                type: SSO_USER
```

**nota**  
Puede agregar varios usuarios o grupos a las asignaciones de RBAC. Para los grupos, utilice `type: SSO_GROUP` y proporcione el ID del grupo. Los roles disponibles son `ADMIN`, `EDITOR` y `VIEWER`.

## Paso 4: creación de la capacidad de Argo CD
<a name="_step_4_create_the_argo_cd_capability"></a>

Aplique el archivo de configuración:

```
eksctl create capability -f argocd-capability.yaml
```

El comando vuelve inmediatamente, pero la capacidad tarda algún tiempo en activarse.

## Paso 5: comprobación de la activación de la capacidad
<a name="_step_5_verify_the_capability_is_active"></a>

Compruebe el estado de la capacidad. Reemplace *region-code* por la región de AWS donde creó el clúster y *my-cluster* por el nombre de su clúster.

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

La capacidad estará lista cuando aparezca el estado `ACTIVE`.

## Paso 6: comprobación de la disponibilidad de los recursos personalizados
<a name="_step_6_verify_custom_resources_are_available"></a>

Una vez que la capacidad esté activa, compruebe que los recursos personalizados de Argo CD estén disponibles en el clúster:

```
kubectl api-resources | grep argoproj.io
```

Debería ver todos los tipos de recursos `Application` y `ApplicationSet` en la lista.

## Siguientes pasos
<a name="_next_steps"></a>
+  [Uso de Argo CD](working-with-argocd.md): más información sobre cómo crear y administrar aplicaciones de Argo CD
+  [Consideraciones sobre Argo CD](argocd-considerations.md): configuración del SSO y el acceso a varios clústeres
+  [Uso de recursos de capacidades](working-with-capabilities.md): administración del recurso de la capacidad de Argo CD

# Conceptos de Argo CD
<a name="argocd-concepts"></a>

Para implementar GitOps, Argo CD trata a Git como el único origen de información para las implementaciones de aplicaciones. En este tema, se muestra un ejemplo práctico y, a continuación, se explican los conceptos básicos que debe comprender al trabajar con la capacidad de EKS para Argo CD.

## Introducción a Argo CD
<a name="_getting_started_with_argo_cd"></a>

Después de crear la capacidad de Argo CD (consulte [Creación de una capacidad de Argo CD](create-argocd-capability.md)), puede comenzar a implementar aplicaciones. En este ejemplo, se explica el registro de un clúster y la creación de una aplicación.

### Paso 1: Configurar
<a name="_step_1_set_up"></a>

 **Registro del clúster** (obligatorio)

Registre el clúster en el que desea implementar las aplicaciones. En este ejemplo, registraremos el mismo clúster en el que se ejecuta Argo CD (puede usar el nombre `in-cluster` por motivos de compatibilidad con la mayoría de los ejemplos de Argo CD):

```
# Get your cluster ARN
CLUSTER_ARN=$(aws eks describe-cluster \
  --name my-cluster \
  --query 'cluster.arn' \
  --output text)

# Register the cluster using Argo CD CLI
argocd cluster add $CLUSTER_ARN \
  --aws-cluster-name $CLUSTER_ARN \
  --name in-cluster \
  --project default
```

**nota**  
Para obtener información sobre cómo configurar la CLI de Argo CD para que funcione con la capacidad de Argo CD en EKS, consulte [Uso de la CLI de Argo CD con la capacidad administrada](argocd-comparison.md#argocd-cli-configuration).

Como alternativa, registre el clúster mediante un secreto de Kubernetes (consulte [Registro de clústeres de destino](argocd-register-clusters.md) para obtener más información).

 **Configuración del acceso al repositorio** (opcional)

En este ejemplo, se usa un repositorio de GitHub público, por lo que no se requiere ninguna configuración del repositorio. Para los repositorios privados, configure el acceso mediante AWS Secrets Manager, CodeConnections o secretos de Kubernetes (consulte [Configuración del acceso al repositorio](argocd-configure-repositories.md) para obtener más información).

Para los servicios de AWS (ECR para gráficos de Helm, CodeConnections y CodeCommit), puede hacer referencia a ellos directamente en los recursos de la aplicación sin necesidad de crear un repositorio. El rol de capacidad debe tener los permisos para llamar a los permisos de IAM necesarios. Para obtener más información, consulte [Configuración del acceso al repositorio](argocd-configure-repositories.md).

### Paso 2: Cree una aplicación
<a name="_step_2_create_an_application"></a>

Cree este manifiesto de aplicación en `my-app.yaml`:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/argoproj/argocd-example-apps.git
    targetRevision: HEAD
    path: guestbook
  destination:
    name: in-cluster
    namespace: guestbook
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
    - CreateNamespace=true
```

Aplique la aplicación:

```
kubectl apply -f my-app.yaml
```

Después de aplicar esta aplicación, Argo CD: 1. Sincroniza la aplicación de Git con el clúster (implementación inicial). 2. Supervisa el repositorio de Git para detectar cambios. 3. Sincroniza automáticamente los cambios posteriores en el clúster. 4. Detecta y corrige cualquier desviación del estado deseado. 5. Proporciona el estado y el historial de sincronización en la interfaz de usuario.

Consulte el estado de la aplicación:

```
kubectl get application guestbook -n argocd
```

También puede ver la aplicación mediante la CLI de Argo CD o la interfaz de usuario de Argo CD (accesible desde la consola de EKS, en la pestaña Capacidades del clúster).

**nota**  
Cuando utilice la CLI de Argo CD con la capacidad administrada, especifique las aplicaciones con el prefijo de espacio de nombres: `argocd app get argocd/guestbook`.

**nota**  
Utilice el nombre del clúster en `destination.name` (el nombre que utilizó al registrar el clúster). La capacidad administrada no admite el valor predeterminado local en el clúster (`kubernetes.default.svc`).

## Conceptos clave
<a name="_core_concepts"></a>

### Principios y tipos de orígenes de GitOps
<a name="_gitops_principles_and_source_types"></a>

Argo CD implementa GitOps, donde el origen de la aplicación es el único origen de información para las implementaciones:
+  **Declarativo**: el estado deseado se declara mediante manifiestos de YAML, gráficos de Helm o superposiciones de Kustomize.
+  **Con control de versiones**: se hace un seguimiento de cada cambio con un registro de auditoría completo.
+  **Automatizado**: Argo CD supervisa continuamente los orígenes y sincroniza automáticamente los cambios.
+  **Recuperación automática**: detecta y corrige una desviación entre el estado deseado y el real del clúster.

 **Tipos de orígenes compatibles**:
+  **Repositorios de Git**: GitHub, GitLab, Bitbucket, CodeCommit (HTTPS, SSH o CodeConnections)
+  **Registros de Helm**: registros HTTP (como `https://aws.github.io/eks-charts`) y registros OCI (como `public.ecr.aws`)
+  **Imágenes OCI**: imágenes de contenedor que incluyen manifiestos o gráficos de Helm (como `oci://registry-1.docker.io/user/my-app`)

Esta flexibilidad permite a las organizaciones elegir orígenes que cumplan con sus requisitos de seguridad y conformidad. Por ejemplo, las organizaciones que restringen el acceso a Git desde clústeres pueden usar ECR para gráficos de Helm o imágenes OCI.

Para obtener más información, consulte [Application Sources](https://argo-cd.readthedocs.io/en/stable/user-guide/application-sources/) en la documentación de Argo CD.

### Sincronización y conciliación
<a name="_sync_and_reconciliation"></a>

Argo CD supervisa continuamente sus orígenes y clústeres para detectar y corregir las diferencias:

1. Sondea los orígenes para ver si hay cambios (de forma predeterminada, cada 6 minutos).

1. Compara el estado deseado con el estado del clúster.

1. Marca las aplicaciones como `Synced` o `OutOfSync`. 

1. Sincroniza los cambios automáticamente (si se configuró) o espera su aprobación manual.

1. Supervisa el estado de los recursos después de la sincronización.

 Las **ondas de sincronización** controlan el orden de creación de los recursos mediante anotaciones:

```
metadata:
  annotations:
    argocd.argoproj.io/sync-wave: "0"  # Default if not specified
```

Los recursos se aplican por orden de onda (primero, los números más bajos, incluidos los negativos, como `-1`). La fase `0` es la predeterminada si no se especifica. Esto permite crear dependencias como espacios de nombres (fase `-1`), antes de las implementaciones (fase `0`) y antes de los servicios (fase `1`).

 La **recuperación automática** revierte los cambios manuales:

```
spec:
  syncPolicy:
    automated:
      selfHeal: true
```

**nota**  
La capacidad administrada utiliza el seguimiento de recursos basado en anotaciones (no en etiquetas) para mejorar la compatibilidad con las convenciones de Kubernetes y otras herramientas.

Para obtener información detallada sobre las fases de la sincronización, los enlaces y los patrones avanzados, consulte la [documentación de sincronización de Argo CD](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-waves/).

### Estado de la aplicación
<a name="_application_health"></a>

Argo CD supervisa el estado de todos los recursos de la aplicación:

 **Estados**: \$1 **En buen estado** (todos los recursos se ejecutan según lo esperado) \$1 **En curso** (los recursos se están creando o actualizando) \$1 **Degradado** (algunos recursos no están en buen estado: bloqueo de pods, errores de trabajos) \$1 **Suspendido** (la aplicación se pausó de forma intencionada) \$1 **Falta** (los recursos definidos en Git no están en el clúster)

Argo CD tiene comprobaciones de estado integradas para los recursos comunes de Kubernetes (implementaciones, StatefulSets, trabajos, etc.) y admite comprobaciones de estado personalizadas para CRD.

El estado de la aplicación viene determinado por todos sus recursos: si hay algún recurso `Degraded`, el estado de la aplicación será `Degraded`.

Para obtener más información, consulte [Resource Health](https://argo-cd.readthedocs.io/en/stable/operator-manual/health/) en la documentación de Argo CD.

### Patrones de varios clústeres
<a name="_multi_cluster_patterns"></a>

Argo CD admite dos patrones de implementación principales:

 **Radial**: ejecute Argo CD en un clúster de administración dedicado que se implemente en varios clústeres de cargas de trabajo. \$1 Control y visibilidad centralizados \$1 Políticas coherentes en todos los clústeres \$1 Una instancia de Argo CD que administrar \$1 Separación clara entre el plano de control y las cargas de trabajo

 **Por clúster**: ejecute Argo CD en cada clúster y administre solo las aplicaciones de ese clúster. \$1 Separación de clústeres (un error no afecta a los demás) \$1 Redes más sencillas (sin comunicación entre clústeres) \$1 Configuración inicial más sencilla (sin registro de clústeres)

Elija la opción radial para los equipos de plataformas que administran varios clústeres, o la opción por clúster para equipos independientes o cuando los clústeres deban estar completamente aislados.

Para obtener información detallada sobre la configuración de varios clústeres, consulte [Consideraciones sobre Argo CD](argocd-considerations.md).

### Proyectos
<a name="_projects"></a>

Los proyectos proporcionan agrupamiento lógico y control de acceso para las aplicaciones:
+  **Restricciones de origen**: limite los repositorios de Git que se pueden usar.
+  **Restricciones de destino**: limite los clústeres y espacios de nombres que se pueden usar como destino.
+  **Restricciones de recursos**: limite los tipos de recursos de Kubernetes que se pueden implementar.
+  **Integración con RBAC**: asigne proyectos a ID de usuarios y grupos de AWS Identity Center.

Las aplicaciones pertenecen a un único proyecto. Si no se especifica, utilizan el proyecto `default`, que no tiene restricciones de forma predeterminada. Para uso en producción, edite el proyecto `default` para restringir el acceso y cree nuevos proyectos con las restricciones adecuadas.

Para obtener información sobre la configuración de proyectos y los patrones RBAC, consulte [Configuración de los permisos de Argo CD](argocd-permissions.md).

### Opciones de sincronización
<a name="_sync_options"></a>

Refine el comportamiento de la sincronización con opciones comunes:
+  `CreateNamespace=true`: se crea automáticamente el espacio de nombres de destino.
+  `ServerSideApply=true`: se utiliza la aplicación del servidor para una mejor resolución de conflictos.
+  `SkipDryRunOnMissingResource=true`: se omite la ejecución de prueba cuando las CRD aún no existan (útil para instancias de kro).

```
spec:
  syncPolicy:
    syncOptions:
    - CreateNamespace=true
    - ServerSideApply=true
    - SkipDryRunOnMissingResource=true
```

Para obtener una lista completa de las opciones de sincronización, consulte la [documentación sobre las opciones de sincronización de Argo CD](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-options/).

## Siguientes pasos
<a name="_next_steps"></a>
+  [Configuración del acceso al repositorio](argocd-configure-repositories.md): configuración del acceso al repositorio de Git
+  [Registro de clústeres de destino](argocd-register-clusters.md): registro de los clústeres de destino para la implementación
+  [Creación de aplicaciones](argocd-create-application.md): creación de la primera aplicación
+  [Consideraciones sobre Argo CD](argocd-considerations.md): patrones específicos de EKS, integración con Identity Center y configuración de varios clústeres
+  [Documentación de Argo CD](https://argo-cd.readthedocs.io/en/stable/): documentación completa de Argo CD que incluye enlaces de sincronización, comprobaciones de estado y patrones avanzados

# Configuración de los permisos de Argo CD
<a name="argocd-permissions"></a>

La capacidad administrada de Argo CD se integra con AWS Identity Center para la autenticación y utiliza roles de RBAC integrados para la autorización. En este tema, se explica cómo configurar los permisos para los usuarios y los equipos.

## Cómo funcionan los permisos con Argo CD
<a name="_how_permissions_work_with_argo_cd"></a>

La capacidad de Argo CD utiliza AWS Identity Center para la autenticación y proporciona tres roles de RBAC integrados para la autorización.

Cuando un usuario accede a Argo CD:

1. Se autentican mediante AWS Identity Center (que puede federarse con su proveedor de identidad corporativa)

1.  AWS Identity Center proporciona información sobre los usuarios y grupos a Argo CD

1. Argo CD asigna usuarios y grupos a roles de RBAC en función de su configuración

1. Los usuarios solo ven las aplicaciones y los recursos a los que tienen permiso de acceso

## Roles de RBAC integrados
<a name="_built_in_rbac_roles"></a>

La capacidad de Argo CD proporciona tres roles integrados que se asignan a los usuarios y grupos de AWS Identity Center. Son **roles con alcance global** que controlan el acceso a recursos de Argo CD, como proyectos, clústeres y repositorios.

**importante**  
Los roles globales controlan el acceso a Argo CD en sí, no a recursos con alcance de proyecto, como las aplicaciones. Los usuarios Editor y Visualizador no pueden ver ni administrar aplicaciones de forma predeterminada; necesitan roles de proyecto para acceder a recursos con alcance de proyecto. Consulte [Roles de proyecto y acceso con alcance de proyecto](#project-roles) para obtener más información sobre cómo conceder acceso a las aplicaciones y a otros recursos con alcance de proyecto.

 **ADMIN** 

Acceso completo a todos los recursos y configuraciones de Argo CD:
+ Crear, actualizar y eliminar aplicaciones y ApplicationSets en cualquier proyecto
+ Administración de la configuración de Argo CD
+ Registro y administración de los clústeres de destino de la implementación
+ Configuración del acceso al repositorio
+ Crear y administrar proyectos
+ Visualización del estado y el historial de todas las aplicaciones
+ Enumerar y acceder a todos los clústeres y repositorios

 **EDITOR** 

Puede actualizar proyectos y configurar roles de proyecto, pero no puede modificar la configuración global de Argo CD:
+ Actualizar proyectos existentes (no puede crear ni eliminar proyectos)
+ Configurar roles y permisos de proyecto
+ Ver claves GPG y certificados
+ No puede modificar la configuración global de Argo CD
+ No puede administrar clústeres ni repositorios directamente
+ No puede ver ni administrar aplicaciones sin roles de proyecto

 **VIEWER** 

Acceso de solo lectura a los recursos de Argo CD:
+ Ver configuraciones de proyectos
+ Enumerar todos los proyectos (incluidos los proyectos a los que el usuario no está asignado)
+ Ver claves GPG y certificados
+ No puede enumerar clústeres ni repositorios
+ Imposibilidad de hacer cambios
+ No puede ver ni administrar aplicaciones sin roles de proyecto

**nota**  
Para conceder a los usuarios Editor o Visualizador acceso a las aplicaciones, un Administrador o un Editor debe crear roles de proyecto que asignen grupos de Identity Center a permisos específicos dentro de un proyecto.

## Roles de proyecto y acceso con alcance de proyecto
<a name="project-roles"></a>

Los roles globales Administrador, Editor y Visualizador controlan el acceso a Argo CD en sí. Los roles de proyecto controlan el acceso a los recursos y las capacidades dentro de un proyecto específico, incluidos:
+  **Recursos**: aplicaciones, ApplicationSets, credenciales de repositorios y credenciales de clústeres
+  **Capacidades**: acceso a registros y acceso de ejecución (exec) a los pods de aplicaciones

 **Explicación del modelo de permisos de dos niveles**:
+  **Alcance global**: los roles integrados determinan lo que los usuarios pueden hacer con los proyectos, los clústeres, los repositorios y la configuración de Argo CD
+  **Alcance de proyecto**: los roles de proyecto determinan lo que los usuarios pueden hacer con los recursos y las capacidades dentro de un proyecto específico

Esto significa:
+ Los usuarios Administrador pueden acceder a todos los recursos y capacidades de los proyectos sin configuración adicional
+ Los usuarios Editor y Visualizador deben recibir roles de proyecto para acceder a los recursos y las capacidades del proyecto
+ Los usuarios Editor pueden crear roles de proyecto para concederse a sí mismos y a otros acceso dentro de los proyectos que pueden actualizar

 **Flujo de trabajo de ejemplo**:

1. Un Administrador asigna un grupo de Identity Center al rol Editor a nivel global

1. Un Administrador crea un proyecto para un equipo

1. El Editor configura roles de proyecto dentro de ese proyecto para conceder a los miembros del equipo acceso a recursos con alcance de proyecto

1. Los miembros del equipo (que pueden tener el rol global Visualizador) ahora pueden ver y administrar aplicaciones en ese proyecto según los permisos de su rol de proyecto

Para obtener más información sobre la configuración de roles de proyecto, consulte [Control de acceso basado en proyectos](#_project_based_access_control).

## Configuración de las asignaciones de roles
<a name="_configure_role_mappings"></a>

Asigne los usuarios y grupos de AWS Identity Center a los roles de Argo CD al crear o actualizar la capacidad.

 **Ejemplo de asignación de roles**:

```
{
  "rbacRoleMapping": {		 	 	 
    "ADMIN": ["AdminGroup", "alice@example.com"],
    "EDITOR": ["DeveloperGroup", "DevOpsTeam"],
    "VIEWER": ["ReadOnlyGroup", "bob@example.com"]
  }
}
```

**nota**  
Los nombres de los roles distinguen entre mayúsculas y minúsculas y deben estar en mayúsculas (ADMIN, EDITOR, VIEWER).

**importante**  
La integración de capacidades de EKS con AWS Identity Center admite hasta 1000 identidades por capacidad de Argo CD. Una identidad puede ser un usuario o un grupo.

 **Actualice las asignaciones de roles**:

```
aws eks update-capability \
  --region us-east-1 \
  --cluster-name cluster \
  --capability-name capname \
  --endpoint "https://eks.ap-northeast-2.amazonaws.com" \
  --role-arn "arn:aws:iam::[.replaceable]111122223333:role/[.replaceable]`EKSCapabilityRole`" \
  --configuration '{
    "argoCd": {
      "rbacRoleMappings": {
        "addOrUpdateRoleMappings": [
          {
            "role": "ADMIN",
            "identities": [
              { "id": "686103e0-f051-7068-b225-e6392b959d9e", "type": "SSO_USER" }
            ]
          }
        ]
      }
    }
  }'
```

## Uso de la cuenta de administrador
<a name="_admin_account_usage"></a>

La cuenta de administrador está diseñada para la configuración inicial y las tareas administrativas, como el registro de clústeres y la configuración de repositorios.

 **Cuándo es adecuado usar la cuenta de administrador**:
+ Configuración inicial de la capacidad
+ Desarrollo individual o demostraciones rápidas
+ Tareas administrativas (registro de clústeres, configuración de repositorios, creación de proyectos)

 **Prácticas recomendadas para la cuenta de administrador**:
+ No asigne tokens de la cuenta al control de versiones.
+ Cambie los tokens inmediatamente si se han expuesto.
+ Limite el uso de los tokens de la cuenta a las tareas administrativas y de configuración.
+ Establezca tiempos de vencimiento cortos (máximo 12 horas).
+ Solo se pueden crear 5 tokens de la cuenta en un momento determinado.

 **Cuándo se usa el acceso basado en proyectos**:
+ Entornos de desarrollo compartidos con varios usuarios
+ Cualquier entorno que se asemeje al de producción
+ Cuando necesite registros de auditoría sobre quién llevó a cabo las acciones
+ Cuando necesite aplicar restricciones de recursos o límites de acceso

Para entornos de producción y escenarios de varios usuarios, utilice el control de acceso basado en proyectos con roles de RBAC dedicados asignados a grupos de AWS Identity Center.

## Control de acceso basado en proyectos
<a name="_project_based_access_control"></a>

Utilice proyectos de Argo CD (AppProject) para proporcionar un control del acceso y un aislamiento de los recursos detallados para los equipos.

**importante**  
Antes de asignar usuarios o grupos a roles específicos de proyecto, primero debe asignarlos a un rol global de Argo CD (Administrador, Editor o Visualizador) en la configuración de la capacidad. Los usuarios no pueden acceder a Argo CD sin una asignación a un rol global, incluso si están asignados a roles de proyecto.  
Considere asignar a los usuarios el rol Visualizador a nivel global y, posteriormente, conceder permisos adicionales mediante roles específicos de proyecto. Esto proporciona un acceso básico y permite un control detallado a nivel de proyecto.

Los proyectos proporcionan lo siguiente:
+  **Restricciones de origen**: limite los repositorios de Git que se pueden usar.
+  **Restricciones de destino**: limite los clústeres y espacios de nombres que se pueden usar como destino.
+  **Restricciones de recursos**: limite los tipos de recursos de Kubernetes que se pueden implementar.
+  **Integración con RBAC**: asigne los proyectos a grupos de AWS Identity Center o roles de Argo CD.

 **Ejemplo de proyecto para el aislamiento de equipos**:

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: team-a
  namespace: argocd
spec:
  description: Team A applications

  # Required: Specify which namespaces this project watches for Applications
  sourceNamespaces:
  - argocd

  # Source restrictions
  sourceRepos:
  - https://github.com/myorg/team-a-apps

  # Destination restrictions
  destinations:
  - namespace: team-a-*
    server: arn:aws:eks:us-west-2:111122223333:cluster/production

  # Resource restrictions
  clusterResourceWhitelist:
  - group: ''
    kind: Namespace
  namespaceResourceWhitelist:
  - group: 'apps'
    kind: Deployment
  - group: ''
    kind: Service
  - group: ''
    kind: ConfigMap
```

### Espacios de nombres de origen
<a name="_source_namespaces"></a>

Cuando se utiliza la capacidad de Argo CD en EKS, el campo `spec.sourceNamespaces` es obligatorio en las definiciones de AppProject. Este campo especifica qué espacio de nombres puede contener aplicaciones o ApplicationSets que hagan referencia a este proyecto.

**importante**  
La capacidad de Argo CD en EKS solo admite un único espacio de nombres para las aplicaciones y los ApplicationSets: el espacio de nombres que especificó al crear la capacidad (normalmente, `argocd`). Esto difiere de Argo CD de código abierto, que admite múltiples espacios de nombres.

 **Configuración de AppProject** 

Todos los AppProjects deben incluir el espacio de nombres configurado de la capacidad en `sourceNamespaces`:

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: team-a-project
  namespace: argocd
spec:
  description: Applications for Team A

  # Required: Specify the capability's configured namespace (configuration.argoCd.namespace)
  sourceNamespaces:
    - argocd  # Must match your capability's namespace configuration

  # Source repositories this project can deploy from
  sourceRepos:
    - 'https://github.com/my-org/team-a-*'

  # Destination restrictions
  destinations:
    - namespace: 'team-a-*'
      server: arn:aws:eks:us-west-2:111122223333:cluster/my-cluster
```

**nota**  
Si omite el espacio de nombres de la capacidad en `sourceNamespaces`, las aplicaciones o los ApplicationSets de ese espacio de nombres no podrán hacer referencia a este proyecto, lo que provocará errores en la implementación.

 **Asigne usuarios a los proyectos**:

Los roles de proyecto conceden a los usuarios Editor y Visualizador acceso a los recursos del proyecto (aplicaciones, ApplicationSets y credenciales de repositorios y clústeres) y a las capacidades (registros y ejecución [exec]). Sin roles de proyecto, estos usuarios no pueden acceder a estos recursos, incluso si tienen acceso mediante un rol global.

Los usuarios Administrador tienen acceso a todas las aplicaciones sin necesidad de roles de proyecto.

 **Ejemplo: concesión de acceso a aplicaciones a los miembros del equipo** 

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: team-a
  namespace: argocd
spec:
  # ... project configuration ...

  sourceNamespaces:
  - argocd

  # Project roles grant Application-level access
  roles:
  - name: developer
    description: Team A developers - can manage Applications
    policies:
    - p, proj:team-a:developer, applications, *, team-a/*, allow
    - p, proj:team-a:developer, clusters, get, *, allow  # See cluster names in UI
    groups:
    - 686103e0-f051-7068-b225-e6392b959d9e  # Identity Center group ID

  - name: viewer
    description: Team A viewers - read-only Application access
    policies:
    - p, proj:team-a:viewer, applications, get, team-a/*, allow
    - p, proj:team-a:viewer, clusters, get, *, allow  # See cluster names in UI
    groups:
    - 786203e0-f051-7068-b225-e6392b959d9f  # Identity Center group ID
```

**nota**  
Incluya `clusters, get, *, allow` en los roles de proyecto para permitir que los usuarios vean los nombres de los clústeres en la interfaz de usuario. Sin este permiso, el clúster de destino aparece como “desconocido”.

 **Explicación sobre las políticas de los roles de proyecto**:

El formato de la política es: `p, proj:<project>:<role>, <resource>, <action>, <object>, <allow/deny>` 

 **Políticas de recursos**:
+  `applications, , team-a/, allow`: acceso completo a todas las aplicaciones en el proyecto team-a
+  `applications, get, team-a/*, allow`: acceso de solo lectura a las aplicaciones
+  `applications, sync, team-a/*, allow`: puede sincronizar aplicaciones, pero no crear ni eliminar
+  `applications, delete, team-a/*, allow`: puede eliminar aplicaciones (utilícelo con precaución)
+  `applicationsets, , team-a/, allow`: acceso completo a los ApplicationSets
+  `repositories, *, *, allow`: acceso a las credenciales de repositorios
+  `clusters, *, *, allow`: acceso a las credenciales de clústeres

 **Políticas de capacidades**:
+  `logs, , team-a/, allow`: acceso a los registros de aplicaciones
+  `exec, , team-a/, allow`: acceso de ejecución (exec) a los pods de aplicaciones

**nota**  
Los usuarios Editor pueden crear roles de proyecto para concederse a sí mismos y a otros permisos dentro de los proyectos que pueden actualizar. Esto permite a los líderes de equipo controlar el acceso a los recursos con alcance de proyecto para su equipo sin requerir la intervención de un Administrador.

**nota**  
Utilice los ID de grupos de Identity Center (no los nombres de los grupos) en el campo `groups`. También puede utilizar los ID de usuario de Identity Center para conceder acceso a usuarios individuales. Puede encontrar estos ID en la consola de AWS Identity Center o mediante la CLI de AWS.

## Patrones de permisos comunes
<a name="_common_permission_patterns"></a>

 **Patrón 1: equipo de administración con acceso completo** 

```
{
  "rbacRoleMapping": {		 	 	 
    "ADMIN": ["PlatformTeam", "SRETeam"]
  }
}
```

Los usuarios Administrador pueden ver y administrar todos los recursos con alcance de proyecto sin configuración adicional.

 **Patrón 2: los líderes de equipo administran proyectos; los desarrolladores acceden mediante roles de proyecto** 

```
{
  "rbacRoleMapping": {		 	 	 
    "ADMIN": ["PlatformTeam"],
    "EDITOR": ["TeamLeads"],
    "VIEWER": ["AllDevelopers"]
  }
}
```

1. El Administrador crea proyectos para cada equipo

1. Los líderes de equipo (Editor) configuran roles de proyecto para conceder a sus desarrolladores acceso a los recursos del proyecto (aplicaciones, ApplicationSets y credenciales) y a las capacidades (registros y ejecución [exec])

1. Los desarrolladores (visualizador) solo pueden acceder a los recursos y las capacidades permitidos por sus roles de proyecto

 **Patrón 3: acceso basado en equipos mediante roles de proyecto** 

1. El administrador crea proyectos y asigna a los líderes de equipo el rol de editor a nivel global

1. Los líderes de equipo (editor) asignan a los miembros del equipo a roles de proyecto dentro de sus proyectos

1. Los miembros del equipo solo necesitan el rol global de visualizador; los roles de proyecto proporcionan acceso a los recursos y las capacidades del proyecto

```
{
  "rbacRoleMapping": {		 	 	 
    "ADMIN": ["PlatformTeam"],
    "EDITOR": ["TeamLeads"],
    "VIEWER": ["AllDevelopers"]
  }
}
```

## Prácticas recomendadas
<a name="_best_practices"></a>

 **Utilice grupos en lugar de usuarios individuales**: asigne grupos de AWS Identity Center a roles de Argo CD en lugar de usuarios individuales para facilitar la administración.

 **Comience con el privilegio mínimo**: comience con el acceso de VIEWER y otorgue el de EDITOR o ADMIN según sea necesario.

 **Use los proyectos para el aislamiento de equipos**: cree AppProjects independientes para diferentes equipos o entornos a fin de aplicar los límites.

 **Aproveche la federación de Identity Center**: configure AWS Identity Center para federarse con su proveedor de identidad corporativa a fin de administrar los usuarios de forma centralizada.

 **Revise el acceso periódicamente**: revise periódicamente las asignaciones de roles y de proyectos para garantizar los niveles de acceso adecuados.

 **Limite el acceso a los clústeres**: recuerde que el RBAC de Argo CD controla el acceso a los recursos y las operaciones de Argo CD, pero no se corresponde con el RBAC de Kubernetes. Los usuarios con acceso de Argo CD pueden implementar aplicaciones en los clústeres a los que Argo CD tiene acceso. Limite los clústeres a los que puede acceder Argo CD y utilice las restricciones de destino del proyecto para controlar dónde se pueden implementar las aplicaciones.

## AWSPermisos de servicios de
<a name="shared_aws_service_permissions"></a>

Para utilizar los servicios de AWS directamente en los recursos de la aplicación (sin crear recursos del repositorio), adjunte los permisos de IAM necesarios al rol de capacidad.

 **ECR para gráficos de Helm**:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecr:GetAuthorizationToken",
        "ecr:BatchCheckLayerAvailability",
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage"
      ],
      "Resource": "*"
    }
  ]
}
```

 **Repositorios de CodeCommit**:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codecommit:GitPull"
      ],
      "Resource": "arn:aws:codecommit:region:account-id:repository-name"
    }
  ]
}
```

 **CodeConnections (GitHub, GitLab, Bitbucket)**:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codeconnections:UseConnection"
      ],
      "Resource": "arn:aws:codeconnections:region:account-id:connection/connection-id"
    }
  ]
}
```

Consulte [Configuración del acceso al repositorio](argocd-configure-repositories.md) para obtener más información sobre el uso de estas integraciones.

## Siguientes pasos
<a name="_next_steps"></a>
+  [Uso de Argo CD](working-with-argocd.md): más información sobre cómo crear aplicaciones y administrar implementaciones
+  [Conceptos de Argo CD](argocd-concepts.md): descripción de los conceptos de Argo CD, como los proyectos
+  [Consideraciones sobre la seguridad para las capacidades de EKS](capabilities-security.md): revisión de las prácticas recomendadas de seguridad para capacidades

# Uso de Argo CD
<a name="working-with-argocd"></a>

Con Argo CD, define aplicaciones en los repositorios de Git y Argo CD las sincroniza automáticamente con los clústeres de Kubernetes. Esto permite la implementación declarativa de aplicaciones con control de versiones y una detección automática de desviaciones.

## Requisitos previos
<a name="_prerequisites"></a>

Antes de trabajar con Argo CD, necesita lo siguiente:
+ Un clúster de EKS con la capacidad de Argo CD creada (consulte [Creación de una capacidad de Argo CD](create-argocd-capability.md))
+ Un repositorio de Git que contiene manifiestos de Kubernetes
+  `kubectl` configurado para comunicarse con el clúster

## Tareas comunes
<a name="_common_tasks"></a>

Los siguientes temas lo guían en las tareas más comunes de Argo CD:

 **[Configuración del acceso al repositorio](argocd-configure-repositories.md)**: configure Argo CD para acceder a repositorios de Git mediante AWS Secrets Manager, AWS CodeConnections o secretos de Kubernetes.

 **[Registro de clústeres de destino](argocd-register-clusters.md)**: registre los clústeres de destino en los que Argo CD implementará las aplicaciones.

 **[Uso de proyectos de Argo CD](argocd-projects.md)**: organice aplicaciones y aplique límites de seguridad con proyectos para los entornos de varios inquilinos.

 **[Creación de aplicaciones](argocd-create-application.md)**: cree aplicaciones de Argo CD que se implementan desde los repositorios de Git con sincronización automática o manual.

 **[Uso de ApplicationSets](argocd-applicationsets.md)**: utilice ApplicationSets para implementar aplicaciones en varios entornos o clústeres mediante plantillas y generadores.

## Acceso a la interfaz de usuario de Argo CD
<a name="_access_the_argo_cd_ui"></a>

Acceda a la interfaz de usuario de Argo CD a través de la consola de EKS:

1. Abra la consola de Amazon EKS.

1. Seleccione el clúster.

1. Elija la pestaña **Capacidades**.

1. Elija **Argo CD**. 

1. Elija **Abrir la interfaz de usuario de Argo CD**. 

La interfaz de usuario proporciona la topología visual de las aplicaciones, el estado y el historial de la sincronización, los eventos y el estado de los recursos, los controles de sincronización manual y la administración de aplicaciones.

## Documentación ascendente
<a name="_upstream_documentation"></a>

Para obtener información detallada acerca de las características de Argo CD:
+  [Documentación de Argo CD](https://argo-cd.readthedocs.io/): guía del usuario completa
+  [Application Spec](https://argo-cd.readthedocs.io/en/stable/user-guide/application-specification/): referencia completa de la API de la aplicación
+  [Guía de ApplicationSet](https://argo-cd.readthedocs.io/en/stable/user-guide/application-set/): patrones y ejemplos de ApplicationSet
+  [GitHub de Argo CD](https://github.com/argoproj/argo-cd): código fuente y ejemplos

# Configuración del acceso al repositorio
<a name="argocd-configure-repositories"></a>

Antes de implementar aplicaciones, configure Argo CD para acceder a sus repositorios de Git y registros de gráficos de Helm. Argo CD admite varios métodos de autenticación para GitHub, GitLab, Bitbucket, AWS CodeCommit y AWS ECR.

**nota**  
Para las integraciones directas de servicios de AWS (gráficos de Helm de ECR, repositorios de CodeCommit y CodeConnections), puede hacer referencia a ellas directamente en los recursos de la aplicación sin necesidad de crear un repositorio. El rol de capacidad debe tener los permisos para llamar a los permisos de IAM necesarios. Para obtener más información, consulte [Configuración de los permisos de Argo CD](argocd-permissions.md).

## Requisitos previos
<a name="_prerequisites"></a>
+ Un clúster de EKS con la capacidad de Argo CD creada
+ Repositorios de Git que contienen manifiestos de Kubernetes
+  `kubectl` configurado para comunicarse con el clúster

**nota**  
 AWS CodeConnections se puede conectar a servidores Git ubicados en la nube de AWS o en las instalaciones. Para obtener más información, consulte [AWS CodeConnections](https://docs.aws.amazon.com/codeconnections/latest/userguide/welcome.html).

## Métodos de autenticación
<a name="_authentication_methods"></a>


| Método | Caso de uso | Permisos de IAM necesarios | 
| --- | --- | --- | 
|   **Integración directa con servicios de AWS**   | 
|  CodeCommit  |  Integración directa con los repositorios de Git de AWS CodeCommit. No es necesario configurar el repositorio.  |   `codecommit:GitPull`   | 
|  CodeConnections  |  Conéctese a GitHub, GitLab o Bitbucket con autenticación administrada. Requiere la configuración de la conexión.  |   `codeconnections:UseConnection`   | 
|  Artefactos OCI de ECR  |  Integración directa con AWS ECR para gráficos de Helm en formato OCI e imágenes de manifiesto. No es necesario configurar el repositorio.  |   `arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly`   | 
|   **Configuración del repositorio con credenciales**   | 
|   AWS Secrets Manager (nombre de usuario o token)  |  Almacene tokens de acceso personal o contraseñas. Habilita la rotación de credenciales sin acceso a Kubernetes.  |   `arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess`   | 
|   AWS Secrets Manager (clave SSH)  |  Utilice autenticación mediante clave SSH. Habilita la rotación de credenciales sin acceso a Kubernetes.  |   `arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess`   | 
|   AWS Secrets Manager (aplicación de GitHub)  |  Autenticación de GitHub App con clave privada. Habilita la rotación de credenciales sin acceso a Kubernetes.  |   `arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess`   | 
|  Secreto de Kubernetes  |  Método de Argo CD estándar con secretos en el clúster  |  Ninguno (los permisos se gestionan mediante la entrada de acceso de EKS con el control de acceso basado en roles de Kubernetes)  | 

## Acceso directo a los servicios de AWS
<a name="direct_access_to_shared_aws_services"></a>

Para los servicios de AWS, puede hacer referencia a ellos directamente en los recursos de la aplicación sin necesidad de crear configuraciones del repositorio. El rol de capacidad debe tener los permisos para llamar a los permisos de IAM necesarios.

### Repositorios de CodeCommit
<a name="_codecommit_repositories"></a>

Haga referencia a los repositorios de CodeCommit directamente en las aplicaciones:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
spec:
  source:
    repoURL: https://git-codecommit.region.amazonaws.com/v1/repos/repository-name
    targetRevision: main
    path: kubernetes/manifests
```

Permisos de rol de capacidad necesarios:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codecommit:GitPull",
      "Resource": "arn:aws:codecommit:region:account-id:repository-name"
    }
  ]
}
```

### CodeConnections
<a name="_codeconnections"></a>

Haga referencia a los repositorios de GitHub, GitLab o Bitbucket a través de CodeConnections. El formato de URL del repositorio se deriva del ARN de conexión de CodeConnections.

El formato de URL del repositorio es:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
spec:
  source:
    repoURL: https://codeconnections.region.amazonaws.com/git-http/account-id/region/connection-id/owner/repository.git
    targetRevision: main
    path: kubernetes/manifests
```

Permisos de rol de capacidad necesarios:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codeconnections:UseConnection",
      "Resource": "arn:aws:codeconnections:region:account-id:connection/connection-id"
    }
  ]
}
```

### Gráficos de Helm de ECR
<a name="_ecr_helm_charts"></a>

ECR almacena los gráficos de Helm como artefactos OCI. Argo CD admite dos formas de hacer referencia a ellos:

 **Formato Helm** (recomendado para gráficos de Helm):

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app-helm
  namespace: argocd
spec:
  source:
    repoURL: account-id.dkr.ecr.region.amazonaws.com/repository-name
    targetRevision: chart-version
    chart: chart-name
    helm:
      valueFiles:
        - values.yaml
```

Nota: No incluya el prefijo `oci://` cuando utilice el formato Helm. Utilice el campo `chart` para especificar el nombre del gráfico.

 **Formato OCI** (para artefactos OCI con manifiestos de Kubernetes):

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app-oci
  namespace: argocd
spec:
  source:
    repoURL: oci://account-id.dkr.ecr.region.amazonaws.com/repository-name
    targetRevision: artifact-version
    path: path-to-manifests
```

Nota: Incluya el prefijo `oci://` cuando utilice el formato OCI. Utilice el campo `path` en lugar de `chart`.

Permisos del rol de capacidad requeridos: asocie la política administrada:

```
arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly
```

Esta política incluye los permisos necesarios de ECR: `ecr:GetAuthorizationToken`, `ecr:BatchGetImage` y `ecr:GetDownloadUrlForLayer`.

## Uso de AWS Secrets Manager
<a name="using_shared_aws_secrets_manager"></a>

Almacene las credenciales del repositorio en Secrets Manager y haga referencia a ellas en las configuraciones del repositorio de Argo CD. El uso de Secrets Manager permite la rotación automática de credenciales sin requerir acceso mediante el control de acceso basado en roles de Kubernetes; las credenciales se pueden rotar mediante permisos de IAM para Secrets Manager, y Argo CD lee automáticamente los valores actualizados.

**nota**  
Para reutilizar credenciales en varios repositorios (por ejemplo, todos los repositorios de una organización de GitHub), utilice plantillas de credenciales de repositorio con `argocd.argoproj.io/secret-type: repo-creds`. Esto ofrece una mejor experiencia de usuario que crear secretos de repositorio individuales. Para obtener más información, consulte [Credenciales de repositorio](https://argo-cd.readthedocs.io/en/stable/operator-manual/argocd-repo-creds-yaml/) en la documentación de Argo CD.

### Autenticación con nombre de usuario y token
<a name="_username_and_token_authentication"></a>

Para los repositorios HTTPS con contraseñas o tokens de acceso personales:

 **Cree un secreto en Secrets Manager**:

```
aws secretsmanager create-secret \
  --name argocd/my-repo \
  --description "GitHub credentials for Argo CD" \
  --secret-string '{"username":"your-username","token":"your-personal-access-token"}'
```

 **Campos de certificado de cliente TLS opcionales** (para servidores Git privados):

```
aws secretsmanager create-secret \
  --name argocd/my-private-repo \
  --secret-string '{
    "username":"your-username",
    "token":"your-token",
    "tlsClientCertData":"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t",
    "tlsClientCertKey":"LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCi4uLgotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0t"
  }'
```

**nota**  
Los valores de `tlsClientCertData` y `tlsClientCertKey` deben estar codificados en base64.

 **Cree un secreto de repositorio que haga referencia a Secrets Manager**:

```
apiVersion: v1
kind: Secret
metadata:
  name: my-repo
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: https://github.com/your-org/your-repo
  secretArn: arn:aws:secretsmanager:us-west-2:111122223333:secret:argocd/my-repo-AbCdEf
  project: default
```

### Autenticación con clave SSH
<a name="_ssh_key_authentication"></a>

Para el acceso a Git basado en SSH, almacene la clave privada como texto sin formato (no JSON):

 **Cree el secreto con la clave SSH privada**:

```
aws secretsmanager create-secret \
  --name argocd/my-repo-ssh \
  --description "SSH key for Argo CD" \
  --secret-string "-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
...
-----END OPENSSH PRIVATE KEY-----"
```

 **Cree un secreto de repositorio para SSH**:

```
apiVersion: v1
kind: Secret
metadata:
  name: my-repo-ssh
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: git@github.com:your-org/your-repo.git
  secretArn: arn:aws:secretsmanager:us-west-2:111122223333:secret:argocd/my-repo-ssh-AbCdEf
  project: default
```

### Autenticación de la aplicación de GitHub
<a name="_github_app_authentication"></a>

Para la autenticación de la aplicación de GitHub con una clave privada:

 **Cree el secreto con las credenciales de la aplicación de GitHub**:

```
aws secretsmanager create-secret \
  --name argocd/github-app \
  --description "GitHub App credentials for Argo CD" \
  --secret-string '{
    "githubAppPrivateKeySecret":"LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQouLi4KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0=",
    "githubAppID":"123456",
    "githubAppInstallationID":"12345678"
  }'
```

**nota**  
El valor de `githubAppPrivateKeySecret` debe estar codificado en base64.

 **Campo opcional para GitHub Enterprise**:

```
aws secretsmanager create-secret \
  --name argocd/github-enterprise-app \
  --secret-string '{
    "githubAppPrivateKeySecret":"LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQouLi4KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0=",
    "githubAppID":"123456",
    "githubAppInstallationID":"12345678",
    "githubAppEnterpriseBaseUrl":"https://github.example.com/api/v3"
  }'
```

 **Cree un secreto de repositorio para la aplicación de GitHub**:

```
apiVersion: v1
kind: Secret
metadata:
  name: my-repo-github-app
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: https://github.com/your-org/your-repo
  secretArn: arn:aws:secretsmanager:us-west-2:111122223333:secret:argocd/github-app-AbCdEf
  project: default
```

### Plantillas de credenciales de repositorio
<a name="_repository_credential_templates"></a>

Para reutilizar credenciales en varios repositorios (por ejemplo, todos los repositorios de una organización o usuario de GitHub), utilice plantillas de credenciales de repositorio con `argocd.argoproj.io/secret-type: repo-creds`. Esto ofrece una mejor experiencia de usuario que crear secretos de repositorio individuales para cada repositorio.

 **Cree una plantilla de credenciales de repositorio**:

```
apiVersion: v1
kind: Secret
metadata:
  name: github-org-creds
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repo-creds
stringData:
  type: git
  url: https://github.com/your-org
  secretArn: arn:aws:secretsmanager:us-west-2:111122223333:secret:argocd/github-org-AbCdEf
```

Esta plantilla de credenciales se aplica a todos los repositorios que coincidan con el prefijo de URL `https://github.com/your-org`. A continuación, puede hacer referencia a cualquier repositorio de esta organización en Aplicaciones sin crear secretos adicionales.

Para obtener más información, consulte [Credenciales de repositorio](https://argo-cd.readthedocs.io/en/stable/operator-manual/argocd-repo-creds-yaml/) en la documentación de Argo CD.

**importante**  
Asegúrese de que el rol de capacidad de IAM tenga asociada la política administrada `arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess`, o permisos equivalentes que incluyan `secretsmanager:GetSecretValue` y permisos de descifrado de KMS. Consulte [Consideraciones sobre Argo CD](argocd-considerations.md) para obtener información sobre la configuración de las políticas de IAM.

## Uso de AWS CodeConnections
<a name="using_shared_aws_codeconnections"></a>

Para obtener información sobre la integración de CodeConnections, consulte [Conexión a los repositorios de Git con AWS CodeConnections](integration-codeconnections.md).

CodeConnections proporciona autenticación administrada para GitHub, GitLab y Bitbucket sin almacenar credenciales.

## Uso de secretos de Kubernetes
<a name="_using_kubernetes_secrets"></a>

Almacene las credenciales directamente en Kubernetes mediante el método de Argo CD estándar.

 **Para HTTPS con token de acceso personal**:

```
apiVersion: v1
kind: Secret
metadata:
  name: my-repo
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: https://github.com/your-org/your-repo
  username: your-username
  password: your-personal-access-token
```

 **Para SSH**:

```
apiVersion: v1
kind: Secret
metadata:
  name: my-repo-ssh
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: git@github.com:your-org/your-repo.git
  sshPrivateKey: |
    -----BEGIN OPENSSH PRIVATE KEY-----
    ... your private key ...
    -----END OPENSSH PRIVATE KEY-----
```

## Repositorios de CodeCommit
<a name="_codecommit_repositories_2"></a>

Para AWS CodeCommit, conceda permisos de CodeCommit a su rol de capacidad de IAM (`codecommit:GitPull`).

Configure el repositorio:

```
apiVersion: v1
kind: Secret
metadata:
  name: codecommit-repo
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: https://git-codecommit.us-west-2.amazonaws.com/v1/repos/my-repo
  project: default
```

Para obtener información detallada sobre la configuración de la política de IAM, consulte [Consideraciones sobre Argo CD](argocd-considerations.md).

## Comprobación de la conexión del repositorio
<a name="_verify_repository_connection"></a>

Compruebe el estado de la conexión a través de la interfaz de usuario de Argo CD, en Configuración → Repositorios. La interfaz de usuario muestra el estado de la conexión y cualquier error de autenticación.

Los secretos de repositorio no incluyen información sobre el estado.

## Recursos adicionales
<a name="_additional_resources"></a>
+  [Registro de clústeres de destino](argocd-register-clusters.md): registro de los clústeres de destino para implementaciones
+  [Creación de aplicaciones](argocd-create-application.md): creación de la primera aplicación
+  [Consideraciones sobre Argo CD](argocd-considerations.md): configuración de seguridad y permisos de IAM
+  [Private Repositories](https://argo-cd.readthedocs.io/en/stable/user-guide/private-repositories/): referencia de la configuración de repositorio ascendente

# Registro de clústeres de destino
<a name="argocd-register-clusters"></a>

Registre los clústeres para que Argo CD pueda implementar aplicaciones en ellos. Puede registrar el mismo clúster en el que se ejecuta Argo CD (clúster local) o clústeres remotos en cuentas o regiones diferentes. Una vez que se registre un clúster, permanecerá en estado de conexión “Desconocido” hasta que cree una aplicación dentro de ese clúster. Para crear una aplicación de Argo CD después de que el clúster esté registrado, consulte [Creación de aplicaciones](argocd-create-application.md).

## Requisitos previos
<a name="_prerequisites"></a>
+ Un clúster de EKS con la capacidad de Argo CD creada
+  `kubectl` configurado para comunicarse con el clúster
+ Para clústeres remotos: permisos de IAM y entradas de acceso adecuados

## Registro del clúster local
<a name="_register_the_local_cluster"></a>

Para implementar aplicaciones en el mismo clúster en el que se ejecuta Argo CD, regístrelo como destino de implementación.

**importante**  
La capacidad de Argo CD no registra automáticamente el clúster local. Debe registrarlo de forma explícita para implementar aplicaciones en el mismo clúster. Puede utilizar el nombre del clúster `in-cluster` para garantizar la compatibilidad con la mayoría de los ejemplos de Argo CD disponibles en línea.

**nota**  
Se crea automáticamente una entrada de acceso de EKS para el clúster local con el rol de la capacidad de Argo CD, pero no se conceden permisos de control de acceso basado en roles de Kubernetes de forma predeterminada. Esto sigue el principio de privilegio mínimo; debe configurar explícitamente los permisos que Argo CD necesita según el caso de uso. Por ejemplo, si solo utiliza este clúster como centro de Argo CD para administrar clústeres remotos, no necesita permisos de implementación locales. Consulte la sección Requisitos de control de acceso basado en roles (RBAC) de la entrada de acceso que figura a continuación para conocer las opciones de configuración.

 **Uso de la CLI de Argo CD**:

```
argocd cluster add <cluster-context-name> \
  --aws-cluster-name arn:aws:eks:us-west-2:111122223333:cluster/my-cluster \
  --name local-cluster
```

 **Uso de un secreto de Kubernetes**:

```
apiVersion: v1
kind: Secret
metadata:
  name: local-cluster
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: cluster
stringData:
  name: local-cluster
  server: arn:aws:eks:us-west-2:111122223333:cluster/my-cluster
  project: default
```

Aplique la configuración:

```
kubectl apply -f local-cluster.yaml
```

**nota**  
Use el ARN del clúster de EKS en el campo `server`, no la URL del servidor de API de Kubernetes. La capacidad administrada requiere que los ARN identifiquen los clústeres. El `kubernetes.default.svc` predeterminado no es compatible.

## Registro de clústeres remotos
<a name="_register_remote_clusters"></a>

Para implementar en clústeres remotos:

 **Paso 1: creación de la entrada de acceso en el clúster remoto** 

Reemplace *region-code* por la región de AWS en la que está el clúster remoto, sustituya *remote-cluster* por el nombre del clúster remoto y el ARN por el ARN del rol de capacidad de Argo CD.

```
aws eks create-access-entry \
  --region region-code \
  --cluster-name remote-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \
  --type STANDARD
```

 **Paso 2: Asociar una política de acceso con permisos de control de acceso basado en roles de Kubernetes** 

La entrada de acceso requiere permisos de control de acceso basado en roles de Kubernetes para que Argo CD pueda implementar aplicaciones. Para comenzar rápidamente, puede utilizar la `AmazonEKSClusterAdminPolicy`:

```
aws eks associate-access-policy \
  --region region-code \
  --cluster-name remote-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
  --access-scope type=cluster
```

**importante**  
La `AmazonEKSClusterAdminPolicy` proporciona acceso completo de administrador del clúster (equivalente a `system:masters`). Esto resulta conveniente para comenzar, pero no se debe utilizar en entornos de producción. Para entornos de producción, utilice permisos más restrictivos mediante la asociación de la entrada de acceso con grupos personalizados de Kubernetes y la creación de las vinculaciones adecuadas de Role o ClusterRole. Consulte la sección de configuración para entornos de producción que figura a continuación para aplicar el principio de privilegio mínimo.

 **Paso 3: registro del clúster en Argo CD** 

 **Uso de la CLI de Argo CD**:

```
argocd cluster add <cluster-context-name> \
  --aws-cluster-name arn:aws:eks:us-west-2:111122223333:cluster/remote-cluster \
  --name remote-cluster
```

 **Uso de un secreto de Kubernetes**:

```
apiVersion: v1
kind: Secret
metadata:
  name: remote-cluster
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: cluster
stringData:
  name: remote-cluster
  server: arn:aws:eks:us-west-2:111122223333:cluster/remote-cluster
  project: default
```

Aplique la configuración:

```
kubectl apply -f remote-cluster.yaml
```

## Clústeres entre cuentas
<a name="_cross_account_clusters"></a>

Para implementar en clústeres de diferentes cuentas de AWS:

1. En la cuenta de destino, cree una entrada de acceso en el clúster de EKS de destino y use como entidad principal el ARN del rol de IAM de la capacidad de Argo CD de la cuenta de origen.

1. Asocie una política de acceso con los permisos adecuados de control de acceso basado en roles de Kubernetes

1. Registre el clúster en Argo CD con su ARN de clúster de EKS

No es necesario crear roles de IAM adicionales ni configurar ninguna política de confianza: las entradas de acceso de EKS gestionan el acceso entre cuentas.

El formato del ARN del clúster incluye la región, por lo que las implementaciones entre regiones siguen el mismo proceso que las implementaciones en la misma región.

## Comprobación del registro del clúster
<a name="_verify_cluster_registration"></a>

Consulte los clústeres registrados:

```
kubectl get secrets -n argocd -l argocd.argoproj.io/secret-type=cluster
```

O bien, compruebe el estado del clúster en la interfaz de usuario de Argo CD, en Configuración → Clústeres.

## Clústeres privados
<a name="_private_clusters"></a>

La capacidad de Argo CD proporciona un acceso transparente a clústeres de EKS totalmente privados sin necesidad de emparejamiento de VPC ni una configuración de red especializada.

 AWS administra automáticamente la conectividad entre la capacidad de Argo CD y los clústeres remotos privados.

Solo tiene que registrar el clúster privado con su ARN, sin necesidad de aplicar ninguna configuración de red adicional.

## Requisitos de control de acceso basado en roles de la entrada de acceso
<a name="_access_entry_rbac_requirements"></a>

Cuando crea una capacidad de Argo CD, se crea automáticamente una entrada de acceso de EKS para el rol de la capacidad, pero no se conceden permisos de control de acceso basado en roles de Kubernetes de forma predeterminada. Este diseño intencional sigue el principio de privilegio mínimo; los distintos casos de uso requieren permisos diferentes.

Por ejemplo: \$1 Si utiliza el clúster solo como centro de Argo CD para administrar clústeres remotos, no necesita permisos de implementación locales. \$1 Si implementa aplicaciones de forma local, necesita acceso de lectura en todo el clúster y acceso de escritura en espacios de nombres específicos. \$1 Si necesita crear definiciones de recursos personalizados, requiere permisos adicionales de administrador del clúster.

Debe configurar explícitamente los permisos que Argo CD necesita según sus requisitos.

### Permisos mínimos para Argo CD
<a name="_minimum_permissions_for_argo_cd"></a>

Argo CD necesita dos tipos de permisos para funcionar sin errores:

 **Permisos de lectura (en todo el clúster)**: Argo CD debe poder leer todos los tipos de recursos y las definiciones de recursos personalizados (CRD) en el clúster para:
+ Detección de recursos y comprobaciones de estado
+ Detección de desviaciones entre el estado deseado y el estado real
+ Validación de los recursos antes de la implementación

 **Permisos de escritura (específicos de espacio de nombres)**: Argo CD necesita permisos para crear, actualizar y eliminar recursos definidos en las aplicaciones para:
+ Implementar cargas de trabajo de aplicaciones (implementaciones, servicios, ConfigMaps, etc.)
+ Aplicar recursos personalizados (CRD específicos de las aplicaciones)
+ Administrar el ciclo de vida de las aplicaciones

### Configuración rápida
<a name="_quick_setup"></a>

Para comenzar rápidamente, realizar pruebas o trabajar en entornos de desarrollo, utilice `AmazonEKSClusterAdminPolicy`:

```
aws eks associate-access-policy \
  --region region-code \
  --cluster-name my-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
  --access-scope type=cluster
```

**importante**  
La `AmazonEKSClusterAdminPolicy` proporciona acceso completo de administrador del clúster (equivalente a `system:masters`), incluida la capacidad de crear definiciones de recursos personalizados, modificar recursos en todo el clúster e implementar en cualquier espacio de nombres. Esto resulta conveniente para desarrollo y pruebas de concepto, pero no se debe utilizar en producción. Para producción, utilice la configuración de privilegio mínimo que figura a continuación.

### Configuración para producción con privilegio mínimo
<a name="_production_setup_with_least_privilege"></a>

Para entornos de producción, cree una configuración personalizada de control de acceso basado en roles de Kubernetes que conceda:
+ Acceso de lectura en todo el clúster a todos los recursos (para detección y comprobaciones de estado)
+ Acceso de escritura específico de espacio de nombres (para implementaciones)

 **Paso 1: Asocie la entrada de acceso a un grupo personalizado de Kubernetes** 

```
aws eks associate-access-policy \
  --region region-code \
  --cluster-name my-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSEditPolicy \
  --access-scope type=namespace,namespaces=app-namespace
```

 **Paso 2: Cree un ClusterRole para el acceso de lectura** 

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: argocd-read-all
rules:
# Read access to all resources for discovery and health checks
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["get", "list", "watch"]
```

 **Paso 3: Cree un rol para el acceso de escritura en los espacios de nombres de la aplicación** 

```
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: argocd-deploy
  namespace: app-namespace
rules:
# Full access to deploy application resources
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["*"]
```

 **Paso 4: Vincule los roles al grupo de Kubernetes** 

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: argocd-read-all
subjects:
- kind: Group
  name: eks-access-entry:arn:aws:iam::111122223333:role/ArgoCDCapabilityRole
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: argocd-read-all
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: argocd-deploy
  namespace: app-namespace
subjects:
- kind: Group
  name: eks-access-entry:arn:aws:iam::111122223333:role/ArgoCDCapabilityRole
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: argocd-deploy
  apiGroup: rbac.authorization.k8s.io
```

**nota**  
El formato del nombre de grupo para las entradas de acceso es `eks-access-entry:` seguido del ARN de la entidad principal. Repita el RoleBinding para cada espacio de nombres en el que Argo CD deba implementar aplicaciones.

**importante**  
Argo CD debe poder leer todos los tipos de recursos en el clúster para realizar comprobaciones de estado y detección, incluso si solo implementa en espacios de nombres específicos. Sin acceso de lectura en todo el clúster, Argo CD generará errores al verificar el estado de las aplicaciones.

## Restricción del acceso al clúster con proyectos
<a name="_restrict_cluster_access_with_projects"></a>

Utilice los proyectos para controlar en qué clústeres y espacios de nombres se pueden implementar las aplicaciones mediante la configuración de los clústeres y espacios de nombres de destino permitidos en `spec.destinations`:

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: production
  namespace: argocd
spec:
  destinations:
  - server: arn:aws:eks:us-west-2:111122223333:cluster/prod-cluster
    namespace: '*'
  - server: arn:aws:eks:eu-west-1:111122223333:cluster/prod-eu-cluster
    namespace: '*'
  sourceRepos:
  - 'https://github.com/example/production-apps'
```

Para obtener más información, consulte [Uso de proyectos de Argo CD](argocd-projects.md).

## Recursos adicionales
<a name="_additional_resources"></a>
+  [Uso de proyectos de Argo CD](argocd-projects.md): organización de las aplicaciones y aplicación de los límites de seguridad
+  [Creación de aplicaciones](argocd-create-application.md): implementación de su primera aplicación
+  [Uso de ApplicationSets](argocd-applicationsets.md): implementación en varios clústeres con ApplicationSets
+  [Consideraciones sobre Argo CD](argocd-considerations.md): patrones de varios clústeres y configuración entre cuentas
+  [Declarative Cluster Setup](https://argo-cd.readthedocs.io/en/stable/operator-manual/declarative-setup/#clusters): referencia de la configuración del clúster ascendente

# Uso de proyectos de Argo CD
<a name="argocd-projects"></a>

Los proyectos de Argo CD (AppProjects) proporcionan agrupamiento lógico y control de acceso para las aplicaciones. Los proyectos definen qué repositorios de Git, clústeres de destino y espacios de nombres pueden usar las aplicaciones, lo que habilita la multitenencia y los límites de seguridad en las instancias de Argo CD compartidas.

## Cuándo se usan los proyectos
<a name="_when_to_use_projects"></a>

Use los proyectos en los siguientes casos:
+ Separación de aplicaciones por equipo, entorno o unidad de negocio
+ Restricción de los repositorios desde los que los equipos pueden implementar
+ Limitación de los clústeres y espacios de nombres en los que los equipos pueden implementar
+ Aplicación de cuotas de recursos y tipos de recursos permitidos
+ Concesión de acceso a la implementación de aplicaciones de autoservicio con barreras de protección

## Proyecto predeterminado
<a name="_default_project"></a>

Cada capacidad de Argo CD incluye un proyecto `default` que permite el acceso a todos los repositorios, clústeres y espacios de nombres. Si bien es útil para las pruebas iniciales, cree proyectos dedicados con restricciones explícitas para su uso en producción.

Para obtener más información sobre la configuración predeterminada del proyecto y cómo restringirla, consulte [The Default Project](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#the-default-project) en la documentación de Argo CD.

## Creación de un proyecto
<a name="_create_a_project"></a>

Para crear un proyecto, aplique un recurso de `AppProject` al clúster.

 **Ejemplo: proyecto específico de un equipo** 

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: team-a
  namespace: argocd
spec:
  description: Applications for Team A

  # Source repositories this project can deploy from
  sourceRepos:
    - 'https://github.com/my-org/team-a-*'
    - 'https://github.com/my-org/shared-libs'

  # Destination clusters and namespaces
  destinations:
    - name: dev-cluster
      namespace: team-a-dev
    - name: prod-cluster
      namespace: team-a-prod

  # Allowed resource types
  clusterResourceWhitelist:
    - group: ''
      kind: Namespace

  namespaceResourceWhitelist:
    - group: 'apps'
      kind: Deployment
    - group: ''
      kind: Service
    - group: ''
      kind: ConfigMap
```

Aplique el proyecto:

```
kubectl apply -f team-a-project.yaml
```

## Configuración del proyecto
<a name="_project_configuration"></a>

### Repositorios de código fuente
<a name="_source_repositories"></a>

Controle qué repositorios de Git pueden usar las aplicaciones de este proyecto:

```
spec:
  sourceRepos:
    - 'https://github.com/my-org/app-*'  # Wildcard pattern
    - 'https://github.com/my-org/infra'  # Specific repo
```

Puede usar comodines y patrones de negación (prefijo `!`) para permitir o denegar repositorios específicos. Para obtener más información, consulte [Managing Projects](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#managing-projects) en la documentación de Argo CD.

### Restricciones de destino
<a name="_destination_restrictions"></a>

Limite dónde se pueden implementar las aplicaciones:

```
spec:
  destinations:
    - name: prod-cluster  # Specific cluster by name
      namespace: production
    - name: '*'  # Any cluster
      namespace: team-a-*  # Namespace pattern
```

**importante**  
Utilice nombres de clústeres y patrones de espacios de nombres específicos en lugar de comodines para los proyectos de producción. De este modo, se impiden las implementaciones accidentales en clústeres o espacios de nombres no autorizados.

Puede utilizar comodines y patrones de negación para controlar los destinos. Para obtener más información, consulte [Managing Projects](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#managing-projects) en la documentación de Argo CD.

### Restricciones de recursos
<a name="_resource_restrictions"></a>

Controle qué tipos de recursos de Kubernetes se pueden implementar:

 **Recursos basados en clústeres**:

```
spec:
  clusterResourceWhitelist:
    - group: ''
      kind: Namespace
    - group: 'rbac.authorization.k8s.io'
      kind: Role
```

 **Recursos basados en espacios de nombres**:

```
spec:
  namespaceResourceWhitelist:
    - group: 'apps'
      kind: Deployment
    - group: ''
      kind: Service
    - group: ''
      kind: ConfigMap
    - group: 's3.services.k8s.aws'
      kind: Bucket
```

Use listas de elementos prohibidos para denegar recursos específicos:

```
spec:
  namespaceResourceBlacklist:
    - group: ''
      kind: Secret  # Prevent direct Secret creation
```

## Asignación de aplicaciones a proyectos
<a name="_assign_applications_to_projects"></a>

Al crear una aplicación, especifique el proyecto en el campo `spec.project`:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
spec:
  project: team-a  # Assign to team-a project
  source:
    repoURL: https://github.com/my-org/my-app
    path: manifests
  destination:
    name: prod-cluster
    namespace: team-a-prod
```

Las aplicaciones sin un proyecto específico utilizan el proyecto `default`.

## Roles del proyecto y RBAC
<a name="_project_roles_and_rbac"></a>

Los proyectos pueden definir roles personalizados para el control de acceso detallado. Asigne roles del proyecto a los usuarios y grupos de AWS Identity Center según la configuración de la capacidad para controlar quién puede sincronizar, actualizar o eliminar aplicaciones.

 **Ejemplo: proyecto con roles de desarrollador y administrador** 

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: team-a
  namespace: argocd
spec:
  sourceRepos:
    - '*'
  destinations:
    - name: '*'
      namespace: 'team-a-*'

  roles:
    - name: developer
      description: Developers can sync applications
      policies:
        - p, proj:team-a:developer, applications, sync, team-a/*, allow
        - p, proj:team-a:developer, applications, get, team-a/*, allow
      groups:
        - team-a-developers

    - name: admin
      description: Admins have full access
      policies:
        - p, proj:team-a:admin, applications, *, team-a/*, allow
      groups:
        - team-a-admins
```

Para obtener más información sobre los roles del proyecto, los tokens JWT para las canalizaciones de CI/CD y la configuración d RBAC, consulte [Project Roles](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#project-roles) en la documentación de Argo CD.

## Patrones comunes
<a name="_common_patterns"></a>

### Proyectos basados en entornos
<a name="_environment_based_projects"></a>

Cree proyectos separados para cada entorno:

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: production
  namespace: argocd
spec:
  sourceRepos:
    - 'https://github.com/my-org/*'
  destinations:
    - name: prod-cluster
      namespace: '*'
  # Strict resource controls for production
  clusterResourceWhitelist: []
  namespaceResourceWhitelist:
    - group: 'apps'
      kind: Deployment
    - group: ''
      kind: Service
```

### Proyectos basados en equipos
<a name="_team_based_projects"></a>

Aísle los equipos con proyectos específicos:

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: platform-team
  namespace: argocd
spec:
  sourceRepos:
    - 'https://github.com/my-org/platform-*'
  destinations:
    - name: '*'
      namespace: 'platform-*'
  # Platform team can manage cluster resources
  clusterResourceWhitelist:
    - group: '*'
      kind: '*'
```

### Proyectos de varios clústeres
<a name="_multi_cluster_projects"></a>

Implemente en varios clústeres con políticas coherentes:

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: global-app
  namespace: argocd
spec:
  sourceRepos:
    - 'https://github.com/my-org/global-app'
  destinations:
    - name: us-west-cluster
      namespace: app
    - name: eu-west-cluster
      namespace: app
    - name: ap-south-cluster
      namespace: app
```

## Prácticas recomendadas
<a name="_best_practices"></a>

 **Comience con proyectos restrictivos**: comience con permisos limitados y amplíelos según sea necesario en lugar de comenzar con un acceso amplio.

 **Utilice patrones de espacios de nombres**: use los comodines en las restricciones de los espacios de nombres (por ejemplo, `team-a-*`) para ofrecer flexibilidad mientras mantiene los límites.

 **Separe los proyectos de producción**: utilice proyectos específicos para la producción con controles más estrictos y políticas de sincronización manual.

 **Documente los propósitos del proyecto**: utilice el campo `description` para explicar para qué sirve cada proyecto y quién debe usarlo.

 **Revise los permisos del proyecto con regularidad**: audite los proyectos periódicamente para asegurarse de que las restricciones sigan alineándose con las necesidades del equipo y los requisitos de seguridad.

## Recursos adicionales
<a name="_additional_resources"></a>
+  [Configuración de los permisos de Argo CD](argocd-permissions.md): configuración de la integración de Identity Center y RBAC
+  [Creación de aplicaciones](argocd-create-application.md): creación de aplicaciones dentro de los proyectos
+  [Uso de ApplicationSets](argocd-applicationsets.md): uso de ApplicationSets con proyectos para implementaciones de varios clústeres
+  [Documentación de proyectos de Argo CD](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/): referencia ascendente completa

# Creación de aplicaciones
<a name="argocd-create-application"></a>

Las aplicaciones representan implementaciones en los clústeres de destino. Cada aplicación define un origen (repositorio de Git) y un destino (clúster y espacio de nombres). Cuando se apliquen, Argo CD creará los recursos especificados en los manifiestos del repositorio de Git en el espacio de nombres del clúster. Las aplicaciones suelen especificar las implementaciones de cargas de trabajo, pero pueden administrar cualquier recurso de Kubernetes disponible en el clúster de destino.

## Requisitos previos
<a name="_prerequisites"></a>
+ Un clúster de EKS con la capacidad de Argo CD creada
+ Acceso al repositorio configurado (consulte [Configuración del acceso al repositorio](argocd-configure-repositories.md))
+ Clúster de destino registrado (consulte [Registro de clústeres de destino](argocd-register-clusters.md))
+  `kubectl` configurado para comunicarse con el clúster

## Creación de una aplicación básica
<a name="_create_a_basic_application"></a>

Defina una aplicación que se implemente desde un repositorio de Git:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/argoproj/argocd-example-apps
    targetRevision: HEAD
    path: guestbook
  destination:
    name: in-cluster
    namespace: default
```

**nota**  
Utilice `destination.name` con el nombre del clúster que utilizó al registrar el clúster (como `in-cluster` para el clúster local). El campo `destination.server` también funciona con los ARN de clústeres de EKS, pero se recomienda utilizar los nombres de los clústeres para una mejor legibilidad.

Aplique la aplicación:

```
kubectl apply -f application.yaml
```

Consulte el estado de la aplicación:

```
kubectl get application guestbook -n argocd
```

## Configuración del origen
<a name="_source_configuration"></a>

 **Repositorio de Git**:

```
spec:
  source:
    repoURL: https://github.com/example/my-app
    targetRevision: main
    path: kubernetes/manifests
```

 **Confirmación o etiqueta de Git específica**:

```
spec:
  source:
    targetRevision: v1.2.0  # or commit SHA
```

 **Gráfico de Helm**:

```
spec:
  source:
    repoURL: https://github.com/example/helm-charts
    targetRevision: main
    path: charts/my-app
    helm:
      valueFiles:
      - values.yaml
      parameters:
      - name: image.tag
        value: v1.2.0
```

 **Gráfico de Helm con valores de un repositorio Git externo** (patrón de múltiples orígenes):

```
spec:
  sources:
  - repoURL: https://github.com/example/helm-charts
    targetRevision: main
    path: charts/my-app
    helm:
      valueFiles:
      - $values/environments/production/values.yaml
  - repoURL: https://github.com/example/config-repo
    targetRevision: main
    ref: values
```

Para obtener más información, consulte [Archivos de valores de Helm desde un repositorio Git externo](https://argo-cd.readthedocs.io/en/stable/user-guide/multiple_sources/#helm-value-files-from-external-git-repository) en la documentación de Argo CD.

 **Gráfico de Helm desde ECR**:

```
spec:
  source:
    repoURL: oci://account-id.dkr.ecr.region.amazonaws.com/repository-name
    targetRevision: chart-version
    chart: chart-name
```

Si el rol de capacidad tiene los permisos de ECR necesarios, el repositorio se utiliza directamente y no es necesario configurarlo. Para obtener más información, consulte [Configuración del acceso al repositorio](argocd-configure-repositories.md).

 **Repositorio de Git desde CodeCommit**:

```
spec:
  source:
    repoURL: https://git-codecommit.region.amazonaws.com/v1/repos/repository-name
    targetRevision: main
    path: kubernetes/manifests
```

Si el rol de capacidad tiene los permisos de CodeCommit necesarios, el repositorio se utiliza directamente y no es necesario configurarlo. Para obtener más información, consulte [Configuración del acceso al repositorio](argocd-configure-repositories.md).

 **Repositorio de Git desde CodeConnections**:

```
spec:
  source:
    repoURL: https://codeconnections.region.amazonaws.com/git-http/account-id/region/connection-id/owner/repository.git
    targetRevision: main
    path: kubernetes/manifests
```

El formato de URL del repositorio se deriva del ARN de conexión de CodeConnections. Si el rol de capacidad tiene los permisos de CodeConnections necesarios y hay una conexión configurada, el repositorio se utiliza directamente y no es necesario configurarlo. Para obtener más información, consulte [Configuración del acceso al repositorio](argocd-configure-repositories.md).

 **Kustomize**:

```
spec:
  source:
    repoURL: https://github.com/example/kustomize-app
    targetRevision: main
    path: overlays/production
    kustomize:
      namePrefix: prod-
```

## Políticas de sincronización
<a name="_sync_policies"></a>

Controle la forma en que Argo CD sincroniza las aplicaciones.

 **Sincronización manual (predeterminada)**:

Las aplicaciones requieren una aprobación manual para la sincronización:

```
spec:
  syncPolicy: {}  # No automated sync
```

Active manualmente la sincronización:

```
kubectl patch application guestbook -n argocd \
  --type merge \
  --patch '{"operation": {"initiatedBy": {"username": "admin"}, "sync": {}}}'
```

 **Sincronización automática**:

Las aplicaciones se sincronizan automáticamente cuando se detectan cambios en Git:

```
spec:
  syncPolicy:
    automated: {}
```

 **Recuperación automática**:

Se revierten automáticamente los cambios manuales en el clúster:

```
spec:
  syncPolicy:
    automated:
      selfHeal: true
```

Cuando se activa, Argo CD revierte cualquier cambio manual hecho directamente en el clúster, lo que garantiza que Git continúe siendo el origen de información verdadera.

 **Poda**:

Se eliminan automáticamente los recursos eliminados de Git:

```
spec:
  syncPolicy:
    automated:
      prune: true
```

**aviso**  
La poda eliminará los recursos del clúster. Úsela con precaución en entornos de producción.

 **Sincronización automática combinada**:

```
spec:
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
    - CreateNamespace=true
```

 **Configuración de reintentos**:

Configure el comportamiento de reintento para sincronizaciones fallidas:

```
spec:
  syncPolicy:
    retry:
      limit: 5  # Number of failed sync attempts; unlimited if less than 0
      backoff:
        duration: 5s  # Amount to back off (default unit: seconds, also supports "2m", "1h")
        factor: 2  # Factor to multiply the base duration after each failed retry
        maxDuration: 3m  # Maximum amount of time allowed for the backoff strategy
```

Esto resulta especialmente útil para los recursos que dependen de que las definiciones de recursos personalizados (CRD) se creen primero, o cuando se trabaja con instancias de kro en las que la CRD puede no estar disponible de inmediato.

## Opciones de sincronización
<a name="_sync_options"></a>

Configuración de sincronización adicional:

 **Cree un espacio de nombres si no existe**:

```
spec:
  syncPolicy:
    syncOptions:
    - CreateNamespace=true
```

 **Omitir la ejecución en seco para recursos no presentes**:

Resulta útil al aplicar recursos que dependen de definiciones de recursos personalizados (CRD) que aún no existen (como las instancias de kro):

```
spec:
  syncPolicy:
    syncOptions:
    - SkipDryRunOnMissingResource=true
```

Esto también se puede aplicar a recursos específicos mediante el uso de una etiqueta en el propio recurso.

 **Valide los recursos antes de aplicar**:

```
spec:
  syncPolicy:
    syncOptions:
    - Validate=true
```

 **Aplicar solo sin sincronización**:

```
spec:
  syncPolicy:
    syncOptions:
    - ApplyOutOfSyncOnly=true
```

## Características de sincronización avanzadas
<a name="_advanced_sync_features"></a>

Argo CD admite características de sincronización avanzadas para implementaciones complejas:
+  **Ondas de sincronización**: controlan el orden de creación de los recursos con anotaciones `argocd.argoproj.io/sync-wave`
+  **Enlaces de sincronización**: ejecutan trabajos antes o después de la sincronización con anotaciones `argocd.argoproj.io/hook` (PreSync, PostSync, SyncFail)
+  **Evaluación del estado de los recursos**: comprobaciones de estado personalizadas para los recursos específicos de la aplicación

Para obtener más información, consulte [Sync Waves](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-waves/) y [Resource Hooks](https://argo-cd.readthedocs.io/en/stable/user-guide/resource_hooks/) en la documentación de Argo CD.

## Omisión de diferencias
<a name="_ignore_differences"></a>

Evite que Argo CD sincronice campos específicos administrados por otros controladores (como la administración de réplicas de HPA):

```
spec:
  ignoreDifferences:
  - group: apps
    kind: Deployment
    jsonPointers:
    - /spec/replicas
```

Para obtener más información sobre los patrones de omisión y las exclusiones de campos, consulte [Diffing Customization](https://argo-cd.readthedocs.io/en/stable/user-guide/diffing/) en la documentación de Argo CD.

## Implementación en varios entornos
<a name="_multi_environment_deployment"></a>

Implemente la misma aplicación en varios entornos:

 **Desarrollo de**:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app-dev
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/example/my-app
    targetRevision: develop
    path: overlays/development
  destination:
    name: dev-cluster
    namespace: my-app
```

 **Producción**:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app-prod
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/example/my-app
    targetRevision: main
    path: overlays/production
  destination:
    name: prod-cluster
    namespace: my-app
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
```

## Supervisión y administración de aplicaciones
<a name="_monitor_and_manage_applications"></a>

 **Consulte el estado de la aplicación**:

```
kubectl get application my-app -n argocd
```

 **Acceda a la interfaz de usuario de Argo CD**:

Abra la interfaz de usuario de Argo CD a través de la consola de EKS para ver la topología de la aplicación, el estado de la sincronización, el estado de los recursos y el historial de implementación. Consulte [Uso de Argo CD](working-with-argocd.md) para obtener instrucciones de acceso a la interfaz de usuario.

 **Revierta aplicaciones**:

Revierta a una revisión anterior mediante la interfaz de usuario de Argo CD, la CLI de Argo CD o mediante la actualización de `targetRevision` en la especificación de la aplicación a una confirmación o etiqueta anterior de Git.

Uso de la CLI de Argo CD:

```
argocd app rollback argocd/my-app <revision-id>
```

**nota**  
Cuando utilice la CLI de Argo CD con la capacidad administrada, especifique las aplicaciones con el prefijo de espacio de nombres: `namespace/appname`.

Para obtener más información, consulte el comando de reversión de aplicaciones [argocd app rollback](https://argo-cd.readthedocs.io/en/stable/user-guide/commands/argocd_app_rollback/) en la documentación de Argo CD.

## Recursos adicionales
<a name="_additional_resources"></a>
+  [Uso de proyectos de Argo CD](argocd-projects.md): organización de aplicaciones con proyectos para entornos multitenencia
+  [Uso de ApplicationSets](argocd-applicationsets.md): implementación en varios clústeres con plantillas
+  [Application Specification](https://argo-cd.readthedocs.io/en/stable/user-guide/application-specification/): referencia completa de la API de la aplicación
+  [Sync Options](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-options/): configuración de sincronización avanzada

# Uso de ApplicationSets
<a name="argocd-applicationsets"></a>

Los ApplicationSets generan varias aplicaciones a partir de plantillas, lo que le permite implementar la misma aplicación en varios clústeres, entornos o espacios de nombres con una sola definición de recursos.

## Requisitos previos
<a name="_prerequisites"></a>
+ Un clúster de EKS con la capacidad de Argo CD creada
+ Acceso al repositorio configurado (consulte [Configuración del acceso al repositorio](argocd-configure-repositories.md))
+  `kubectl` configurado para comunicarse con el clúster

**nota**  
No se requieren varios clústeres de destino para ApplicationSets. Puede utilizar generadores distintos del generador de clústeres (como los generadores de lista, git o matriz) para implementar aplicaciones sin clústeres remotos.

## Cómo funcionan los ApplicationSets
<a name="_how_applicationsets_work"></a>

Los ApplicationSets utilizan generadores para producir parámetros y, a continuación, aplicarlos a una plantilla de aplicación. Cada conjunto de parámetros generados crea una aplicación.

Generadores comunes para implementaciones de EKS:
+  **Generador de listas**: defina de forma explícita los clústeres y los parámetros para cada entorno.
+  **Generador de clústeres**: implemente automáticamente en todos los clústeres registrados.
+  **Generador de Git**: genere aplicaciones a partir de la estructura del repositorio.
+  **Generador de matrices**: combine generadores para implementaciones multidimensionales.
+  **Generador de combinación**: combina parámetros de varios generadores

Para obtener una referencia completa sobre generadores, consulte la [documentación de ApplicationSet](https://argo-cd.readthedocs.io/en/stable/user-guide/application-set/).

## Generador de listas
<a name="_list_generator"></a>

Implemente en varios clústeres con una configuración explícita:

```
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: guestbook-all-clusters
  namespace: argocd
spec:
  generators:
  - list:
      elements:
      - environment: dev
        replicas: "2"
      - environment: staging
        replicas: "3"
      - environment: prod
        replicas: "5"
  template:
    metadata:
      name: 'guestbook-{{environment}}'
    spec:
      project: default
      source:
        repoURL: https://github.com/example/guestbook
        targetRevision: HEAD
        path: 'overlays/{{environment}}'
      destination:
        name: '{{environment}}-cluster'
        namespace: guestbook
      syncPolicy:
        automated:
          prune: true
          selfHeal: true
```

**nota**  
Utilice `destination.name` con nombres de clústeres para mejorar la legibilidad. El campo `destination.server` también funciona con los ARN de clústeres de EKS si es necesario.

Esto crea tres aplicaciones: `guestbook-dev`, `guestbook-staging` y `guestbook-prod`.

## Generador de clústeres
<a name="_cluster_generator"></a>

Implemente automáticamente en todos los clústeres registrados:

```
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: cluster-addons
  namespace: argocd
spec:
  generators:
  - clusters: {}
  template:
    metadata:
      name: '{{name}}-addons'
    spec:
      project: default
      source:
        repoURL: https://github.com/example/cluster-addons
        targetRevision: HEAD
        path: addons
      destination:
        server: '{{server}}'
        namespace: kube-system
      syncPolicy:
        automated:
          prune: true
          selfHeal: true
```

Esto crea automáticamente una aplicación para cada clúster registrado.

 **Filtrar clústeres**:

Utilice `matchLabels` para incluir clústeres específicos o `matchExpressions` para excluir clústeres:

```
spec:
  generators:
  - clusters:
      selector:
        matchLabels:
          environment: production
        matchExpressions:
        - key: skip-appset
          operator: DoesNotExist
```

## Generadores de Git
<a name="_git_generators"></a>

Los generadores de Git crean aplicaciones basadas en la estructura del repositorio:
+  **Generador de directorios**: implemente cada directorio como una aplicación independiente (útil para microservicios).
+  **Generador de archivos**: genere aplicaciones a partir de archivos de parámetros (útil para implementaciones con varios inquilinos).

 **Ejemplo: implementación de microservicios** 

```
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: microservices
  namespace: argocd
spec:
  generators:
  - git:
      repoURL: https://github.com/example/microservices
      revision: HEAD
      directories:
      - path: services/*
  template:
    metadata:
      name: '{{path.basename}}'
    spec:
      project: default
      source:
        repoURL: https://github.com/example/microservices
        targetRevision: HEAD
        path: '{{path}}'
      destination:
        name: my-cluster
        namespace: '{{path.basename}}'
      syncPolicy:
        automated:
          prune: true
          selfHeal: true
        syncOptions:
        - CreateNamespace=true
```

Para obtener detalles sobre los generadores de Git y la configuración basada en archivos, consulte [Git Generator](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators-Git/) en la documentación de Argo CD.

## Generador de matrices
<a name="_matrix_generator"></a>

Combine varios generadores para implementarlos en múltiples dimensiones (entornos × clústeres):

```
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: multi-env-multi-cluster
  namespace: argocd
spec:
  generators:
  - matrix:
      generators:
      - list:
          elements:
          - environment: dev
          - environment: staging
          - environment: prod
      - clusters:
          selector:
            matchLabels:
              region: us-west-2
  template:
    metadata:
      name: 'app-{{environment}}-{{name}}'
    spec:
      project: default
      source:
        repoURL: https://github.com/example/app
        targetRevision: HEAD
        path: 'overlays/{{environment}}'
      destination:
        name: '{{name}}'
        namespace: 'app-{{environment}}'
```

Para obtener más información sobre cómo combinar generadores, consulte [Matrix Generator](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators-Matrix/) en la documentación de Argo CD.

## Implementación multirregional
<a name="_multi_region_deployment"></a>

Implemente en clústeres de varias regiones:

```
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: global-app
  namespace: argocd
spec:
  generators:
  - list:
      elements:
      - clusterName: prod-us-west
        region: us-west-2
      - clusterName: prod-us-east
        region: us-east-1
      - clusterName: prod-eu-west
        region: eu-west-1
  template:
    metadata:
      name: 'app-{{region}}'
    spec:
      project: default
      source:
        repoURL: https://github.com/example/app
        targetRevision: HEAD
        path: kubernetes
        helm:
          parameters:
          - name: region
            value: '{{region}}'
      destination:
        name: '{{clusterName}}'
        namespace: app
      syncPolicy:
        automated:
          prune: true
          selfHeal: true
```

## Administración de ApplicationSets
<a name="_manage_applicationsets"></a>

 **Vea los ApplicationSets y las aplicaciones generadas**:

```
kubectl get applicationsets -n argocd
kubectl get applications -n argocd -l argocd.argoproj.io/application-set-name=<applicationset-name>
```

 **Actualice un ApplicationSet**:

Modifique la especificación de ApplicationSet y vuelva a aplicarla. Argo CD actualiza automáticamente todas las aplicaciones generadas:

```
kubectl apply -f applicationset.yaml
```

 **Elimine un ApplicationSet**:

```
kubectl delete applicationset <name> -n argocd
```

**aviso**  
Al eliminar un conjunto de aplicaciones, se eliminan todas las aplicaciones generadas. Si esas aplicaciones tienen `prune: true`, sus recursos también se eliminarán de los clústeres de destino.  
Para conservar los recursos implementados al eliminar un ApplicationSet, establezca `.syncPolicy.preserveResourcesOnDeletion` en `true` en la especificación del ApplicationSet. Para obtener más información, consulte [Eliminación de recursos y limpieza de aplicaciones](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Application-Deletion/) en la documentación de Argo CD.

**importante**  
La característica ApplicationSets de Argo CD tiene consideraciones de seguridad que debe tener en cuenta antes de utilizar ApplicationSets. Para obtener más información, consulte [Seguridad de ApplicationSet](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Security/) en la documentación de Argo CD.

## Recursos adicionales
<a name="_additional_resources"></a>
+  [Uso de proyectos de Argo CD](argocd-projects.md): organización de ApplicationSets con proyectos
+  [Creación de aplicaciones](argocd-create-application.md): descripción de la configuración de la aplicación
+  [Documentación de ApplicationSet](https://argo-cd.readthedocs.io/en/stable/user-guide/application-set/): patrones y referencia completos sobre generadores
+  [Referencia sobre generadores](https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators/): especificaciones detalladas sobre los generadores

# Consideraciones sobre Argo CD
<a name="argocd-considerations"></a>

En este tema, se tratan aspectos importantes al usar la capacidad de EKS para Argo CD, como la planificación, los permisos, la autenticación y los patrones de implementación en varios clústeres.

## Planificación
<a name="_planning"></a>

Antes de implementar Argo CD, tenga en cuenta lo siguiente:

 **Estrategia de repositorio**: determine dónde se almacenarán los manifiestos de la aplicación (CodeCommit, GitHub, GitLab, Bitbucket). Planifique la estructura del repositorio y la estrategia de ramificación para los diferentes entornos.

 **Estrategia de RBAC**: planifique qué equipos o usuarios deben tener acceso de administrador, editor o lector. Asígnelos a los grupos de AWS Identity Center o a los roles de Argo CD.

 **Arquitectura de varios clústeres**: determine si administrará varios clústeres desde una única instancia de Argo CD. Considere la posibilidad de utilizar un clúster de administración dedicado para Argo CD.

 **Organización de las aplicaciones**: planifique cómo estructurará las aplicaciones y ApplicationSets. Considere la posibilidad de utilizar proyectos para organizar las aplicaciones por equipo o entorno.

 **Políticas de sincronización**: decida si las aplicaciones deben sincronizarse automáticamente o si deben aprobarse manualmente. La sincronización automática es habitual en el desarrollo y manual en la producción.

## Permisos
<a name="_permissions"></a>

Para obtener información detallada sobre los roles de capacidad de IAM, las políticas de confianza y las prácticas recomendadas de seguridad, consulte [Rol de IAM de capacidad de Amazon EKS](capability-role.md) y [Consideraciones sobre la seguridad para las capacidades de EKS](capabilities-security.md).

### Descripción general de los roles de capacidad de IAM
<a name="_iam_capability_role_overview"></a>

Al crear un recurso de capacidad de Argo CD, proporciona un rol de capacidad de IAM. A diferencia de ACK, Argo CD administra principalmente los recursos de Kubernetes, no los recursos de AWS directamente. Sin embargo, el rol de capacidad de IAM es obligatorio para:
+ Acceder a los repositorios privados de Git en CodeCommit
+ Integrar con AWS Identity Center para la autenticación
+ Acceder a los secretos en AWS Secrets Manager (si está configurado)
+ Implementaciones entre clústeres en otros clústeres de EKS

### Integración de CodeCommit
<a name="_codecommit_integration"></a>

Si utiliza repositorios de CodeCommit, adjunte una política con permisos de lectura:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codecommit:GitPull"
      ],
      "Resource": "*"
    }
  ]
}
```

**importante**  
Para su uso en producción, restrinja el campo `Resource` a los ARN de repositorio específicos en lugar de usar `"*"`.  
Ejemplo:  

```
"Resource": "arn:aws:codecommit:us-west-2:111122223333:my-app-repo"
```
Esto limita el acceso de la capacidad de Argo CD únicamente a los repositorios que necesita administrar.

### Integración de Secrets Manager
<a name="_secrets_manager_integration"></a>

Si almacena las credenciales del repositorio en Secrets Manager, asocie la política administrada para acceso de lectura:

```
arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess
```

Esta política incluye los permisos necesarios: `secretsmanager:GetSecretValue`, `secretsmanager:DescribeSecret` y permisos de descifrado de KMS.

### Configuración básica
<a name="_basic_setup"></a>

Para la funcionalidad básica de Argo CD con repositorios de Git públicos, no se requieren políticas de IAM adicionales más allá de la política de confianza.

## Autenticación
<a name="_authentication"></a>

### Integración de AWS Identity Center
<a name="shared_aws_identity_center_integration"></a>

La capacidad administrada de Argo CD se integra directamente con AWS Identity Center (anteriormente AWS SSO), lo que le permite utilizar su proveedor de identidad actual para la autenticación.

Al configurar la integración de AWS Identity Center:

1. Los usuarios acceden a la interfaz de usuario de Argo CD a través de la consola de EKS

1. Se autentican mediante AWS Identity Center (que puede federarse con su proveedor de identidad corporativa)

1.  AWS Identity Center proporciona información sobre los usuarios y grupos a Argo CD

1. Argo CD asigna usuarios y grupos a roles de RBAC en función de su configuración

1. Los usuarios solo ven las aplicaciones y los recursos a los que tienen permiso de acceso

### Simplificación del acceso con los conjuntos de permisos de Identity Center
<a name="_simplifying_access_with_identity_center_permission_sets"></a>

 AWS Identity Center proporciona dos rutas de autenticación distintas cuando se trabaja con Argo CD:

 **Autenticación mediante la API de Argo CD**: Identity Center proporciona autenticación de inicio de sesión único a la interfaz de usuario y a la API de Argo CD. Se configura mediante las asignaciones de roles de RBAC de la capacidad de Argo CD.

 **Acceso a los clústeres de EKS**: la capacidad de Argo CD utiliza el rol de IAM proporcionado por el cliente para autenticarse en los clústeres de EKS mediante las entradas de acceso. Estas entradas de acceso se pueden configurar manualmente para agregar o eliminar permisos.

Puede usar los [conjuntos de permisos de Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtocreatepermissionset.html) para simplificar la administración de identidades al permitir que una sola identidad acceda a los clústeres de Argo CD y EKS. De este modo, se reduce la sobrecarga, ya que se le requiere que administre solo una identidad en ambos sistemas, en lugar de mantener credenciales separadas para el acceso a Argo CD y al clúster.

### Asignaciones de roles de RBAC
<a name="_rbac_role_mappings"></a>

Argo CD cuenta con roles integrados que puede asignar a los usuarios y grupos de AWS Identity Center:

 **ADMIN**: acceso completo a todas las aplicaciones y configuraciones. Puede crear, implementar y eliminar aplicaciones. Puede administrar la configuración de Argo CD.

 **EDITOR**: puede crear y modificar aplicaciones. No puede cambiar la configuración de Argo CD ni eliminar aplicaciones.

 **VIEWER**: acceso de solo lectura a las aplicaciones. Puede ver el estado y el historial de la aplicación. No puede hacer cambios.

**nota**  
Los nombres de los roles distinguen entre mayúsculas y minúsculas y deben estar en mayúsculas (ADMIN, EDITOR, VIEWER).

**importante**  
La integración de capacidades de EKS con AWS Identity Center admite hasta 1000 identidades por capacidad de Argo CD. Una identidad puede ser un usuario o un grupo.

## Implementaciones de varios clústeres
<a name="_multi_cluster_deployments"></a>

La capacidad administrada de Argo CD admite implementaciones de varios clústeres, lo que le permite administrar las aplicaciones en los clústeres de desarrollo, prueba y producción desde una única instancia de Argo CD.

### Cómo funcionan varios clústeres
<a name="_how_multi_cluster_works"></a>

Al registrar clústeres adicionales con Argo CD:

1. Crea secretos de clúster que hacen referencia a los clústeres de EKS de destino por ARN

1. Se crean aplicaciones o ApplicationSets que tienen distintos clústeres como destino

1. Argo CD se conecta a cada clúster para implementar y supervisar recursos

1. Puede ver y administrar todos los clústeres desde una única interfaz de usuario de Argo CD

### Requisitos previos para varios clústeres
<a name="_prerequisites_for_multi_cluster"></a>

Antes de registrar clústeres adicionales:
+ Cree una entrada de acceso en el clúster de destino para el rol de capacidad de Argo CD
+ Garantice la conectividad de red entre la capacidad de Argo CD y los clústeres de destino
+ Compruebe los permisos de IAM para acceder a los clústeres de destino

### Registro de un clúster
<a name="_register_a_cluster"></a>

Registre los clústeres mediante Kubernetes Secrets en el espacio de nombres `argocd`.

Obtenga el ARN del clúster de destino. Reemplace *region-code* por la región de AWS en la que está el clúster de destino y sustituya *target-cluster* por el nombre del clúster de destino.

```
aws eks describe-cluster \
  --region region-code \
  --name target-cluster \
  --query 'cluster.arn' \
  --output text
```

Cree un secreto de clúster mediante el ARN del clúster:

```
apiVersion: v1
kind: Secret
metadata:
  name: target-cluster
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: cluster
type: Opaque
stringData:
  name: target-cluster
  server: arn:aws:eks:us-west-2:111122223333:cluster/target-cluster
  project: default
```

**importante**  
Use el ARN del clúster de EKS en el campo `server`, no la URL del servidor de API de Kubernetes. La capacidad administrada requiere que los ARN identifiquen los clústeres de destino.

Aplique el secreto:

```
kubectl apply -f cluster-secret.yaml
```

### Configuración de la entrada de acceso en el clúster de destino
<a name="_configure_access_entry_on_target_cluster"></a>

El clúster de destino debe tener una entrada de acceso que conceda al rol de capacidad de Argo CD permiso para implementar aplicaciones. Reemplace *region-code* por la región de AWS en la que está el clúster de destino, sustituya *target-cluster* por el nombre del clúster de destino y el ARN por el ARN del rol de capacidad de Argo CD.

```
aws eks create-access-entry \
  --region region-code \
  --cluster-name target-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \
  --type STANDARD \
  --kubernetes-groups system:masters
```

**nota**  
Para su uso en producción, considere la posibilidad de utilizar grupos de Kubernetes más restrictivos en lugar de `system:masters`.

### Acceso a clústeres privados
<a name="_private_cluster_access"></a>

La capacidad administrada de Argo CD se puede implementar en clústeres de EKS totalmente privados sin necesidad de emparejamiento de VPC ni una configuración de red especializada. AWS administra automáticamente la conectividad entre la capacidad de Argo CD y los clústeres remotos privados. Asegúrese de que los controles de acceso al repositorio y las políticas de control de acceso basado en roles de Argo CD estén configurados correctamente.

### Implementaciones entre cuentas
<a name="_cross_account_deployments"></a>

Para implementaciones entre cuentas, agregue el rol de capacidad de IAM de Argo CD desde la cuenta de origen a la entrada de acceso de EKS del clúster de destino:

1. En la cuenta de destino, cree una entrada de acceso en el clúster de EKS de destino

1. Utilice el ARN del rol de capacidad de IAM de Argo CD de la cuenta de origen como entidad principal

1. Configure los permisos de RBAC de Kubernetes adecuados para la entrada de acceso

1. Registre el clúster de destino en Argo CD con su ARN de clúster de EKS

No es necesario crear roles de IAM adicionales ni configurar ninguna política de confianza: las entradas de acceso de EKS gestionan el acceso entre cuentas.

## Prácticas recomendadas
<a name="_best_practices"></a>

 **Utilice fuentes declarativas como fuente de verdad**: almacene todos los manifiestos de las aplicaciones en fuentes declarativas (repositorios Git, registros de Helm o imágenes OCI), lo que permite el control de versiones, los registros de auditoría y la colaboración.

 **Implemente un RBAC adecuado**: utilice la integración de AWS Identity Center para controlar quién puede acceder a las aplicaciones de Argo CD y administrarlas. Argo CD admite un control de acceso detallado a los recursos dentro de las aplicaciones (implementaciones, pods, ConfigMaps, secretos).

 **Utilice ApplicationSets para implementaciones en varios entornos**: utilice ApplicationSets para implementar aplicaciones en varios clústeres o espacios de nombres con diferentes configuraciones.

## Administración del ciclo de vida
<a name="_lifecycle_management"></a>

### Políticas de sincronización de aplicaciones
<a name="_application_sync_policies"></a>

Controle la forma en que Argo CD sincroniza las aplicaciones:

 **Sincronización manual**: las aplicaciones requieren una aprobación manual para sincronizar los cambios. Recomendada para entornos de **producción**.

 **Sincronización automática**: las aplicaciones se sincronizan automáticamente cuando se detectan cambios en Git. Común en entornos de desarrollo y prueba.

 **Recuperación automática**: se revierten automáticamente los cambios manuales hechos en el clúster. Garantiza que el estado del clúster coincida con Git.

 **Poda**: se eliminan automáticamente los recursos eliminados de Git. Úselo con precaución, ya que puede eliminar recursos.

### Estado de la aplicación
<a name="_application_health"></a>

Argo CD supervisa continuamente el estado de las aplicaciones:
+  **En buen estado**: todos los recursos se ejecutan según lo esperado
+  **En curso**: los recursos se están creando o actualizando
+  **Degradado**: algunos recursos no están en buen estado
+  **Suspendido**: la aplicación está en pausa
+  **Falta**: faltan recursos en el clúster

### Plazos de sincronización
<a name="_sync_windows"></a>

Configure los plazos de sincronización para controlar cuándo se pueden sincronizar las aplicaciones:
+ Permita las sincronizaciones solo durante los periodos de mantenimiento
+ Bloquee las sincronizaciones durante el horario laboral
+ Programe sincronizaciones automáticas para horarios específicos
+ Utilice periodos de sincronización en situaciones en las que necesite realizar cambios y detener cualquier sincronización (escenarios de emergencia)

## Configuración de webhooks para una sincronización más rápida
<a name="_webhook_configuration_for_faster_sync"></a>

De forma predeterminada, Argo CD sondea los repositorios de Git cada 6 minutos para detectar cambios. Para implementaciones con mayor capacidad de respuesta, configure los webhooks de Git para que activen sincronizaciones inmediatas cuando se inserten cambios.

Los webhooks proporcionan varios beneficios:
+ Respuesta de sincronización inmediata cuando se inserta el código (segundos en lugar de minutos)
+ Reducción de la sobrecarga de sondeo y mejora del rendimiento del sistema
+ Uso más eficiente de los límites de velocidad de la API
+ Mejor experiencia de usuario con comentarios más rápidos

### Punto de conexión de webhook
<a name="_webhook_endpoint"></a>

La URL del webhook sigue el patrón `${serverUrl}/api/webhook`, donde `serverUrl` es la URL del servidor de Argo CD.

Por ejemplo, si la URL del servidor de Argo CD es `https://abc123.eks-capabilities.us-west-2.amazonaws.com`, la URL del webhook es:

```
https://abc123.eks-capabilities.us-west-2.amazonaws.com/api/webhook
```

### Configuración de webhooks por proveedor de Git
<a name="_configure_webhooks_by_git_provider"></a>

 **GitHub**: en la configuración del repositorio, agregue un webhook con la URL del webhook de Argo CD. Establezca el tipo de contenido en `application/json` y seleccione “Solo el evento de inserción”.

 **GitLab**: en la configuración del proyecto, agregue un webhook con la URL del webhook de Argo CD. Active “Eventos de inserción” y, opcionalmente, “Etiquetar eventos de inserción”.

 **Bitbucket**: en la configuración del repositorio, agregue un webhook con la URL del webhook de Argo CD. Seleccione “Inserción del repositorio” como activador.

 **CodeCommit**: cree una regla de Amazon EventBridge que active los cambios de estado del repositorio de CodeCommit y envíe notificaciones al punto de conexión del webhook de Argo CD.

Para obtener instrucciones detalladas sobre la configuración de webhooks, consulte [Argo CD Webhook Configuration](https://argo-cd.readthedocs.io/en/stable/operator-manual/webhook/).

**nota**  
Los webhooks complementan los sondeos, no las sustituyen. Argo CD sigue sondeando los repositorios como mecanismo alternativo en caso de que se pierdan las notificaciones de los webhooks.

## Siguientes pasos
<a name="_next_steps"></a>
+  [Uso de Argo CD](working-with-argocd.md): más información sobre cómo crear y administrar aplicaciones de Argo CD
+  [Solución de problemas con capacidades de Argo CD](argocd-troubleshooting.md): resolución de problemas con Argo CD
+  [Uso de recursos de capacidades](working-with-capabilities.md): administración del recurso de la capacidad de Argo CD

# Solución de problemas con capacidades de Argo CD
<a name="argocd-troubleshooting"></a>

En este tema, se proporciona una guía para la solución de problemas de la capacidad de EKS para Argo CD, lo que incluye las comprobaciones de estado de la capacidad, los problemas de sincronización de las aplicaciones, la autenticación de repositorios y las implementaciones en varios clústeres.

**nota**  
Las capacidades de EKS son completamente administradas y se ejecutan fuera del clúster. No tiene acceso a los registros del servidor de Argo CD ni al espacio de nombres `argocd`. La solución de problemas se centra en el estado de la capacidad, el estado de la aplicación y la configuración.

## La capacidad está ACTIVA, pero las aplicaciones no se sincronizan
<a name="_capability_is_active_but_applications_arent_syncing"></a>

Si la capacidad de Argo CD muestra el estado `ACTIVE`, pero las aplicaciones no se están sincronizando, compruebe el estado de la capacidad y de la aplicación.

 **Compruebe el estado de la capacidad**:

Puede ver los problemas de estado de la capacidad en la consola de EKS o mediante la AWS CLI.

 **Consola**:

1. Abra la consola de Amazon EKS en https://console.aws.amazon.com/eks/home\$1/clusters.

1. Seleccione el nombre del clúster.

1. Seleccione la pestaña **Observabilidad**.

1. Elija **Supervisar clúster**.

1. Seleccione la pestaña **Capacidades** para ver el estado de todas las capacidades.

 ** AWS CLI**:

```
# View capability status and health
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-argocd

# Look for issues in the health section
```

 **Causas habituales**:
+  **Repositorio no configurado**: el repositorio de Git no se agregó a Argo CD.
+  **Error de autenticación**: las credenciales de la clave SSH, el token o CodeCommit no son válidas.
+  **Aplicación no creada**: no hay recursos de la aplicación en el clúster.
+  **Política de sincronización**: se requiere sincronización manual (la sincronización automática no está activada).
+  **Permisos de IAM**: faltan permisos para CodeCommit o Secrets Manager.

 **Compruebe el estado de la aplicación**:

```
# List applications
kubectl get application -n argocd

# View sync status
kubectl get application my-app -n argocd -o jsonpath='{.status.sync.status}'

# View application health
kubectl get application my-app -n argocd -o jsonpath='{.status.health}'
```

 **Compruebe las condiciones de la aplicación**:

```
# Describe application to see detailed status
kubectl describe application my-app -n argocd

# View application health
kubectl get application my-app -n argocd -o jsonpath='{.status.health}'
```

## Aplicaciones bloqueadas en el estado “En curso”
<a name="_applications_stuck_in_progressing_state"></a>

Si una aplicación muestra `Progressing`, pero nunca aparece `Healthy`, compruebe el estado de los recursos y los eventos de la aplicación.

 **Compruebe el estado de los recursos**:

```
# View application resources
kubectl get application my-app -n argocd -o jsonpath='{.status.resources}'

# Check for unhealthy resources
kubectl describe application my-app -n argocd | grep -A 10 "Health Status"
```

 **Causas habituales**:
+  **La implementación no está lista**: los pods no se inician o las sondas de preparación fallan.
+  **Dependencias de recursos**: recursos que esperan a que otros recursos estén listos.
+  **Errores al extraer imágenes**: no se puede acceder a las imágenes del contenedor.
+  **Recursos insuficientes**: el clúster carece de CPU o memoria para los pods.

 **Verifique la configuración del clúster de destino** (para configuraciones de varios clústeres):

```
# List registered clusters
kubectl get secret -n argocd -l argocd.argoproj.io/secret-type=cluster

# View cluster secret details
kubectl get secret cluster-secret-name -n argocd -o yaml
```

## Errores de autenticación de repositorios
<a name="_repository_authentication_failures"></a>

Si Argo CD no puede acceder a los repositorios de Git, compruebe la configuración de autenticación.

 **Para repositorios de CodeCommit**:

Compruebe que el rol de capacidad de IAM tenga permisos de CodeCommit:

```
# View IAM policies
aws iam list-attached-role-policies --role-name my-argocd-capability-role
aws iam list-role-policies --role-name my-argocd-capability-role

# Get specific policy details
aws iam get-role-policy --role-name my-argocd-capability-role --policy-name policy-name
```

El rol necesita el permiso `codecommit:GitPull` para los repositorios.

 **Para repositorios de Git privados**:

Compruebe que las credenciales del repositorio estén configuradas correctamente:

```
# Check repository secret exists
kubectl get secret -n argocd repo-secret-name -o yaml
```

Asegúrese de que el secreto contenga las credenciales de autenticación correctas (clave SSH, token o nombre de usuario y contraseña).

 **Para los repositorios que utilizan Secrets Manager**:

```
# Verify IAM Capability Role has Secrets Manager permissions
aws iam list-attached-role-policies --role-name my-argocd-capability-role

# Test secret retrieval
aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:region-code:111122223333:secret:my-secret
```

## Problemas en implementaciones de varios clústeres
<a name="_multi_cluster_deployment_issues"></a>

Si las aplicaciones no se implementan en clústeres remotos, compruebe la configuración de acceso y el registro del clúster.

 **Compruebe el registro del clúster**:

```
# List registered clusters
kubectl get secret -n argocd -l argocd.argoproj.io/secret-type=cluster

# Verify cluster secret format
kubectl get secret CLUSTER_SECRET_NAME -n argocd -o yaml
```

Asegúrese de que el campo `server` contenga el ARN del clúster de EKS, no la URL de la API de Kubernetes.

 **Compruebe la entrada de acceso del clúster de destino**:

En el clúster de destino, compruebe que el rol de capacidad de Argo CD tenga una entrada de acceso:

```
# List access entries (run on target cluster or use AWS CLI)
aws eks list-access-entries --cluster-name target-cluster

# Describe specific access entry
aws eks describe-access-entry \
  --cluster-name target-cluster \
  --principal-arn arn:aws:iam::[.replaceable]111122223333:role/my-argocd-capability-role
```

 **Compruebe los permisos de IAM para varias cuentas**:

Para las implementaciones entre cuentas, compruebe que el rol de capacidad de Argo CD tenga una entrada de acceso en el clúster de destino. La capacidad administrada utiliza las entradas de acceso de EKS para el acceso entre cuentas, no para asumir el rol de IAM.

Para obtener más información sobre la configuración de varios clústeres, consulte [Registro de clústeres de destino](argocd-register-clusters.md).

## Siguientes pasos
<a name="_next_steps"></a>
+  [Consideraciones sobre Argo CD](argocd-considerations.md): consideraciones y prácticas recomendadas de Argo CD
+  [Uso de Argo CD](working-with-argocd.md): creación y administración de aplicaciones de Argo CD
+  [Registro de clústeres de destino](argocd-register-clusters.md): configuración de implementaciones de varios clústeres
+  [Solución de problemas de capacidades de EKS](capabilities-troubleshooting.md): orientación general de solución de problemas de la capacidad

# Comparación de la capacidad de EKS para Argo CD con Argo CD autoadministrado
<a name="argocd-comparison"></a>

La capacidad de EKS para Argo CD proporciona una experiencia de Argo CD completamente administrada que se ejecuta en EKS. Para obtener una comparación general entre las capacidades de EKS y las soluciones autoadministradas, consulte [Consideraciones sobre las capacidades de EKS](capabilities-considerations.md). Este tema se centra en las diferencias específicas de Argo CD, lo que incluye la autenticación, la administración de varios clústeres y la compatibilidad con características ascendentes.

## Diferencias con Argo CD ascendente
<a name="_differences_from_upstream_argo_cd"></a>

La capacidad de EKS para Argo CD se basa en Argo CD ascendente, pero difiere en la forma en que se accede a él, se configura y se integra con los servicios de AWS.

 **RBAC y autenticación**: la capacidad incluye tres roles de RBAC (administrador, editor y lector) y utiliza AWS Identity Center para la autenticación en lugar de la autenticación integrada de Argo CD. Configure las asignaciones de roles a través del parámetro `rbacRoleMapping` de la capacidad para asignar grupos de Identity Center a roles de Argo CD, no a través del ConfigMap `argocd-rbac-cm` de Argo CD. La interfaz de usuario de Argo CD se aloja con su propia URL directa (búsquela en la consola de EKS, en la pestaña Capacidades del clúster), y el acceso a la API utiliza la autenticación y la autorización de AWS a través de IAM.

 **Configuración de clústeres**: esta funcionalidad no configura automáticamente las topologías de clústeres locales ni radiales. Usted configura los clústeres de destino de la implementación y las entradas de acceso de EKS. La capacidad solo admite clústeres de Amazon EKS como destinos de implementación que utilizan ARN de clústeres de EKS (no URL de servidores de API de Kubernetes). La capacidad no agrega automáticamente el clúster local (`kubernetes.default.svc`) como destino de implementación. Para implementar en el mismo clúster en el que se creó la capacidad, registre ese clúster de forma explícita mediante su ARN.

 **Acceso remoto simplificado a los clústeres**: esta capacidad simplifica las implementaciones de varios clústeres al utilizar las entradas de acceso de EKS para conceder a Argo CD acceso a los clústeres remotos, lo que elimina la necesidad de configurar roles de IAM para cuentas de servicio (IRSA) o establecer suposiciones de roles de IAM entre cuentas. La capacidad también proporciona un acceso transparente a clústeres de EKS totalmente privados sin necesidad de emparejamiento de VPC ni una configuración de red especializada. AWS administra automáticamente la conectividad entre la capacidad de Argo CD y los clústeres remotos privados.

 **Integración directa de servicios de AWS**: esta capacidad proporciona una integración directa con los servicios de AWS mediante los permisos de IAM del rol de capacidad. Puede hacer referencia a repositorios de CodeCommit, gráficos de Helm de ECR y CodeConnections directamente en los recursos de la aplicación sin necesidad de crear configuraciones de repositorio. Esto simplifica la autenticación y elimina la necesidad de administrar credenciales independientes para los servicios de AWS. Para obtener más información, consulte [Configuración del acceso al repositorio](argocd-configure-repositories.md).

 **Compatibilidad con espacios de nombres**: la capacidad requiere que especifique un único espacio de nombres en el que se deben crear los recursos personalizados Aplicación, ApplicationSet y AppProject de Argo CD.

**nota**  
Esta restricción del espacio de nombres solo se aplica a los recursos personalizados propios de Argo CD (Aplicación, ApplicationSet, AppProject). Las cargas de trabajo de la aplicación se pueden implementar en cualquier espacio de nombres de cualquier clúster de destino. Por ejemplo, si crea la capacidad con el espacio de nombres `argocd`, todos los recursos personalizados Aplicación se deben crear en el espacio de nombres `argocd`, pero esas Aplicaciones pueden implementar cargas de trabajo en `default`, `production`, `staging` o en cualquier otro espacio de nombres.

**nota**  
La capacidad administrada tiene requisitos específicos para el uso de la interfaz de línea de comandos (CLI) y la configuración de AppProject:  
Al utilizar la CLI de Argo CD, especifique las aplicaciones con el prefijo del espacio de nombres: `argocd app sync namespace/appname` 
Los recursos AppProject deben especificar `.spec.sourceNamespaces` para definir qué espacios de nombres puede supervisar el proyecto para los recursos de tipo Aplicación (por lo general, el espacio de nombres que especificó al crear la capacidad)
Las anotaciones de seguimiento de recursos utilizan el formato: `namespace_appname:group/kind:namespace/name` 

 **Características no compatibles**: las siguientes características no están disponibles en la capacidad administrada:
+ Complementos de administración de configuración (CMP) para la generación de manifiestos personalizados
+ Scripts de Lua personalizados para evaluar el estado de los recursos (se admiten las comprobaciones de estado integradas para recursos estándar)
+ Controlador de notificaciones
+ Proveedores de SSO personalizados (solo se admite AWS Identity Center, lo que incluye la identidad federada de terceros a través de AWS Identity Center)
+ Extensiones de interfaz de usuario y banners personalizados
+ Acceso directo a `argocd-cm`, `argocd-params` y otros ConfigMaps de configuración
+ Modificación del tiempo de espera de sincronización (fijado en 120 segundos)

 **Compatibilidad**: las aplicaciones y los ApplicationSets funcionan de forma idéntica a Argo CD ascendente sin cambios en los manifiestos. La capacidad utiliza las mismas API y CRD de Kubernetes, por lo que herramientas como `kubectl` funcionan de la misma manera. La capacidad es totalmente compatible con aplicaciones y ApplicationSets, flujos de trabajo de GitOps con sincronización automática, implementaciones de varios clústeres, políticas de sincronización (automatizadas, de poda, de autorreparación), enlaces y ondas de sincronización, evaluación del estado de los recursos de Kubernetes estándar, capacidades de reversión, orígenes de repositorios de Git (HTTPS y SSH), manifiestos de Helm, Kustomize y sin formato de YAML, credenciales de la aplicación de GitHub, proyectos para multitenencia y exclusiones e inclusiones de recursos.

## Uso de la CLI de Argo CD con la capacidad administrada
<a name="argocd-cli-configuration"></a>

La CLI de Argo CD funciona igual que Argo CD ascendente para la mayoría de las operaciones, pero la autenticación y el registro de clústeres son diferentes.

### Requisitos previos
<a name="_prerequisites"></a>

Instale la CLI de Argo CD según las [instrucciones de instalación ascendente](https://argo-cd.readthedocs.io/en/stable/cli_installation/).

### Configuración
<a name="_configuration"></a>

Configure la CLI mediante variables de entorno:

1. Obtenga la URL del servidor de Argo CD desde la consola de EKS (en la pestaña **Capacidades** del clúster) o mediante la CLI de AWS. Se debe eliminar el prefijo `https://`:

   ```
   export ARGOCD_SERVER=$(aws eks describe-capability \
     --cluster-name my-cluster \
     --capability-name my-argocd \
     --query 'capability.configuration.argoCd.serverUrl' \
     --output text \
     --region region-code | sed 's|^https://||')
   ```

1. Genere un token de cuenta desde la interfaz de usuario de Argo CD (**Configuración** → **Cuentas** → **Administración** → **Generar nuevo token**) y configúrelo como una variable de entorno:

   ```
   export ARGOCD_AUTH_TOKEN="your-token-here"
   ```

**importante**  
Esta configuración utiliza el token de la cuenta de administrador para los flujos de trabajo de configuración y desarrollo iniciales. Para casos de uso de producción, utilice tokens y roles del ámbito del proyecto para seguir el principio de privilegio mínimo. Para obtener más información sobre la configuración de RBAC y roles del proyecto, consulte [Configuración de los permisos de Argo CD](argocd-permissions.md).

1. Establezca la opción de gRPC requerida:

   ```
   export ARGOCD_OPTS="--grpc-web"
   ```

Con estas variables de entorno configuradas, puede utilizar la CLI de Argo CD sin el comando `argocd login`.

### Diferencias clave
<a name="_key_differences"></a>

La capacidad administrada tiene las siguientes limitaciones de CLI:
+  Los comandos `argocd admin` no son compatibles (requieren el acceso directo a pods).
+  `argocd login` no es compatible (utilice tokens de proyecto o cuenta como alternativa).
+  `argocd cluster add` requiere el indicador `--aws-cluster-name` con el ARN del clúster de EKS.

### Ejemplo: registro de un clúster
<a name="_example_register_a_cluster"></a>

Registre un clúster de EKS para la implementación de la aplicación:

```
# Get the cluster ARN
CLUSTER_ARN=$(aws eks describe-cluster \
  --name my-cluster \
  --query 'cluster.arn' \
  --output text)

# Register the cluster
argocd cluster add $CLUSTER_ARN \
  --aws-cluster-name $CLUSTER_ARN \
  --name in-cluster \
  --project default
```

Para obtener la documentación completa de la CLI de Argo CD, consulte la [referencia de la CLI de Argo CD](https://argo-cd.readthedocs.io/en/stable/user-guide/commands/argocd/).

## Ruta de migración
<a name="_migration_path"></a>

Puede migrar de Argo CD autoadministrado a la capacidad administrada:

1. Revise la configuración actual de Argo CD para detectar características no compatibles (controlador de notificaciones, CMP, comprobaciones de estado personalizadas, extensiones de la interfaz de usuario)

1. Escale los controladores de Argo CD autoadministrado a cero réplicas para evitar conflictos

1. Cree un recurso de la capacidad de Argo CD en su clúster.

1. Exporte sus aplicaciones, ApplicationSets y AppProjects.

1. Migre las credenciales de repositorios, los secretos de clústeres y las plantillas de credenciales de repositorios (repocreds).

1. Si utiliza claves GPG, certificados TLS o hosts SSH conocidos, migre también estas configuraciones.

1. Actualice los campos `destination.server` para usar los nombres de los clústeres o los ARN de los clústeres de EKS.

1. Aplíquelos a la instancia de Argo CD administrado.

1. Compruebe que las aplicaciones se estén sincronizando correctamente.

1. Desinstale su instalación de Argo CD autoadministrado.

La capacidad administrada utiliza las mismas API y definiciones de recursos de Argo CD, por lo que sus manifiestos existentes funcionan con modificaciones mínimas.

## Siguientes pasos
<a name="_next_steps"></a>
+  [Creación de una capacidad de Argo CD](create-argocd-capability.md): creación de un recurso de capacidad de Argo CD
+  [Uso de Argo CD](working-with-argocd.md): implementación de su primera aplicación
+  [Consideraciones sobre Argo CD](argocd-considerations.md): configuración de la integración de AWS Identity Center

# Composición de recursos con kro (Kube Resource Orchestrator)
<a name="kro"></a>

 **kro (Kube Resource Orchestrator)** es un proyecto de código abierto nativo de Kubernetes que le permite definir las API de Kubernetes personalizadas mediante una configuración sencilla y directa. Con kro, puede configurar fácilmente nuevas API personalizadas que crean un grupo de objetos de Kubernetes y las operaciones lógicas entre ellos.

Con las capacidades de EKS, AWS administra kro completamente, lo que elimina la necesidad de instalar, mantener y escalar los controladores de kro en sus clústeres.

## Cómo funciona kro
<a name="_how_kro_works"></a>

kro presenta una definición de recursos personalizados (CRD) llamada `ResourceGraphDefinition` (RGD) que permite la creación sencilla y simplificada de API de Kubernetes personalizadas. Al crear una `ResourceGraphDefinition`, kro utiliza extensiones nativas de Kubernetes para crear y administrar nuevas API en el clúster. A partir de esta especificación de recurso único, kro creará y registrará una nueva CRD en función de la especificación y se adaptará para administrar los recursos personalizados recién definidos.

Las RGD pueden incluir varios recursos y kro determinará las interdependencias y el orden de los recursos para que no tenga que hacerlo usted. Puede utilizar una sintaxis sencilla para inyectar la configuración de un recurso a otro, lo que simplifica considerablemente las composiciones y elimina la necesidad de utilizar operadores de “glue” en el clúster. Con kro, los recursos personalizados pueden incluir recursos nativos de Kubernetes, así como cualquier definición de recursos personalizados (CRD) instalada en el clúster.

kro admite un solo tipo de recurso principal:
+  **ResourceGraphDefinition (RGD)**: define un recurso personalizado de Kubernetes y encapsula uno o más recursos de Kubernetes nativos o personalizados subyacentes.

Además de este recurso, kro creará y administrará el ciclo de vida de los recursos personalizados que se creen con él, así como todos los recursos que lo componen.

kro se integra sin problemas con Controladores de AWS para Kubernetes (ACK), lo que le permite componer recursos de carga de trabajo con recursos de AWS para crear abstracciones de alto nivel. Esto le permite crear sus propios componentes básicos en la nube, lo que simplifica la administración de recursos y permite crear patrones reutilizables con valores de configuración predeterminados e inmutables basados en sus estándares organizativos.

## Beneficios de kro
<a name="_benefits_of_kro"></a>

kro permite a los equipos de plataformas crear API de Kubernetes personalizadas que componen varios recursos en abstracciones de nivel superior. Esto simplifica la administración de recursos al permitir a los desarrolladores implementar aplicaciones complejas mediante recursos personalizados sencillos, estandarizados y versionados. Definirá patrones reutilizables para las combinaciones de recursos comunes, lo que permite una creación de recursos coherente en toda la organización.

kro utiliza el [lenguaje de expresión común (CEL) en Kubernetes](https://kubernetes.io/docs/reference/using-api/cel/) para transferir valores entre los recursos e incorporar la lógica condicional, lo que proporciona flexibilidad en la composición de los recursos. Puede componer los recursos de Kubernetes y de AWS administrados por ACK en API personalizadas unificadas, lo que permite definir todas las aplicaciones e infraestructuras.

kro admite la configuración declarativa a través de los manifiestos de Kubernetes, lo que permite que los flujos de trabajo de GitOps y las prácticas de infraestructura como código se integren sin problemas con los procesos de desarrollo existentes. Como parte de las capacidades administradas de EKS, AWS administra kro completamente, lo que elimina la necesidad de instalar, configurar y mantener los controladores kro en sus clústeres.

 **Ejemplo: creación de una ResourceGraphDefinition** 

En el siguiente ejemplo, se muestra una `ResourceGraphDefinition` sencilla que crea una aplicación web con una implementación y un servicio:

```
apiVersion: kro.run/v1alpha1
kind: ResourceGraphDefinition
metadata:
  name: web-application
spec:
  schema:
    apiVersion: v1alpha1
    kind: WebApplication
    spec:
      name: string
      replicas: integer | default=3
  resources:
    - id: deployment
      template:
        apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: ${schema.spec.name}
        spec:
          replicas: ${schema.spec.replicas}
    - id: service
      template:
        apiVersion: v1
        kind: Service
        metadata:
          name: ${schema.spec.name}
```

Cuando los usuarios crean instancias del recurso personalizado de `WebApplication`, kro crea automáticamente los recursos de implementación y servicio correspondientes y administra su ciclo de vida junto con el recurso personalizado.

## Integración con otras capacidades administradas de EKS
<a name="_integration_with_other_eks_managed_capabilities"></a>

kro se integra con otras capacidades administradas de EKS.
+  **Controladores de AWS para Kubernetes (ACK)**: utilice kro para componer los recursos de ACK en abstracciones de nivel superior, lo que simplifica la administración de los recursos de AWS.
+  **Argo CD**: utilice Argo CD para administrar la implementación de los recursos personalizados de kro en varios clústeres, lo que activa los flujos de trabajo de GitOps para las pilas de aplicaciones y los componentes básicos de la plataforma.

## Introducción a kro
<a name="_getting_started_with_kro"></a>

Para comenzar a utilizar la capacidad de EKS para kro:

1.  [Cree un recurso de capacidad de kro](create-kro-capability.md) en su clúster de EKS a través de la consola de AWS, la AWS CLI o su infraestructura preferida como herramienta de código.

1. Cree ResourceGraphDefinitions (RGD) que definan sus composiciones de recursos y API personalizadas.

1. Aplique instancias de los recursos personalizados para aprovisionar y administrar los recursos de AWS y Kubernetes subyacentes.

# Creación de una capacidad de kro
<a name="create-kro-capability"></a>

En este tema, se explica cómo crear una capacidad de kro en un clúster de Amazon EKS.

## Requisitos previos
<a name="_prerequisites"></a>

Antes de crear una capacidad de kro, asegúrese de que disponga de lo siguiente:
+ Un clúster de Amazon EKS existente que ejecute una versión de Kubernetes compatible (se admiten todas las versiones con soporte estándar y ampliado)
+ Permisos de IAM suficientes para crear recursos de capacidad en los clústeres de EKS
+ (Para la CLI o eksctl) La herramienta de la CLI adecuada instalada y configurada

**nota**  
A diferencia de ACK y Argo CD, kro no necesita permisos de IAM adicionales más allá de la política de confianza. kro opera completamente dentro de su clúster y no hace llamadas a la API de AWS. Sin embargo, debe proporcionar igualmente un rol de capacidad de IAM con la política de confianza adecuada. Para obtener información acerca de la configuración de permisos de RBAC de Kubernetes para kro, consulte [Configuración de permisos de kro](kro-permissions.md).

## Elección de la herramienta
<a name="_choose_your_tool"></a>

Puede crear una capacidad de kro mediante la Consola de administración de AWS, la AWS CLI o eksctl:
+  [Creación de una capacidad de kro mediante la consola](kro-create-console.md): uso de la consola para una experiencia guiada
+  [Creación de una capacidad de kro mediante la AWS CLI](kro-create-cli.md): uso de la AWS CLI para scripts y automatización
+  [Creación de una capacidad de kro mediante eksctl](kro-create-eksctl.md): uso de eksctl para una experiencia nativa de Kubernetes

## Qué ocurre cuando se crea una capacidad de kro
<a name="_what_happens_when_you_create_a_kro_capability"></a>

Al crear una capacidad de kro:

1. EKS crea el servicio de capacidad de kro y lo configura para supervisar y administrar los recursos del clúster.

1. Las definiciones de recursos personalizados (CRD) de Kubernetes se instalan en el clúster.

1. Se crea automáticamente una entrada de acceso para el rol de capacidad de IAM con `AmazonEKSKROPolicy`, que concede permisos para administrar ResourceGraphDefinitions y sus instancias (consulte [Consideraciones sobre la seguridad para las capacidades de EKS](capabilities-security.md))

1. La capacidad asume el rol de capacidad de IAM que proporcione (se utiliza solo para la relación de confianza).

1. kro comienza a supervisar los recursos de `ResourceGraphDefinition` y sus instancias.

1. El estado de la capacidad cambia de `CREATING` a `ACTIVE`. 

Una vez activo, puede crear ResourceGraphDefinitions para definir las API personalizadas y crear instancias de esas API.

**nota**  
La entrada de acceso creada automáticamente incluye `AmazonEKSKROPolicy`, que concede a kro permisos para administrar ResourceGraphDefinitions y sus instancias. Para permitir que kro cree los recursos subyacentes de Kubernetes definidos en las ResourceGraphDefinitions (como Implementaciones, Servicios o recursos de ACK), debe configurar políticas adicionales de entrada de acceso. Para obtener más información sobre las entradas de acceso y cómo configurar permisos adicionales, consulte [Configuración de permisos de kro](kro-permissions.md) y [Consideraciones sobre la seguridad para las capacidades de EKS](capabilities-security.md).

## Siguientes pasos
<a name="_next_steps"></a>

Después de crear la capacidad de kro:
+  [Conceptos de kro](kro-concepts.md): descripción de los conceptos de kro y la composición de recursos
+  [Conceptos de kro](kro-concepts.md): más información sobre SimpleSchema, las expresiones de CEL y los patrones de composición de recursos

# Creación de una capacidad de kro mediante la consola
<a name="kro-create-console"></a>

En este tema, se describe cómo crear una capacidad de kro (Kube Resource Orchestrator) mediante la Consola de administración de AWS.

## Creación de la capacidad de kro
<a name="_create_the_kro_capability"></a>

1. Abra la consola de Amazon EKS en https://console.aws.amazon.com/eks/home\$1/clusters.

1. Seleccione el nombre del clúster para abrir la página de detalles del clúster.

1. Elija la pestaña **Capacidades**.

1. En el menú de navegación izquierdo, seleccione **kro (Kube Resource Orchestrator)**.

1. Elija **Crear capacidad de kro**.

1. Para el **rol de capacidad de IAM**:
   + Si ya tiene un rol de capacidad de IAM, selecciónelo en el menú desplegable.
   + Si necesita crear un rol, elija **Crear rol de kro**. 

     De este modo, se abre la consola de IAM en una nueva pestaña con la política de confianza rellenada previamente. El rol no necesita permisos de IAM adicionales, ya que kro opera completamente dentro del clúster.

     Después de crear el rol, regrese a la consola de EKS y el rol se seleccionará automáticamente.
**nota**  
A diferencia de ACK y Argo CD, kro no necesita permisos de IAM adicionales más allá de la política de confianza. kro opera completamente dentro de su clúster y no hace llamadas a la API de AWS.

1. Seleccione **Crear**.

Comenzará el proceso de creación de la capacidad.

## Comprobación de la activación de la capacidad
<a name="_verify_the_capability_is_active"></a>

1. En la pestaña **Capacidades**, consulte el estado de la capacidad de kro.

1. Espere a que el estado cambie de `CREATING` a `ACTIVE`.

1. Una vez activa, la capacidad está lista para usarse.

Para obtener información sobre los estados de la capacidad y la solución de problemas, consulte [Uso de recursos de capacidades](working-with-capabilities.md).

## Concesión de permisos para administrar los recursos de Kubernetes
<a name="_grant_permissions_to_manage_kubernetes_resources"></a>

Cuando crea una capacidad de kro, se crea automáticamente una entrada de acceso de EKS con la `AmazonEKSKROPolicy`, lo que permite a kro administrar ResourceGraphDefinitions y sus instancias. Sin embargo, no se conceden permisos de forma predeterminada para crear los recursos subyacentes de Kubernetes (como Implementaciones, Servicios, ConfigMaps, etc.) definidos en las ResourceGraphDefinitions.

Este diseño intencional sigue el principio de privilegio mínimo: diferentes ResourceGraphDefinitions requieren distintos permisos. Debe configurar explícitamente los permisos que kro necesita según los recursos que administrarán las ResourceGraphDefinitions.

Para comenzar rápidamente, realizar pruebas o trabajar en entornos de desarrollo, utilice `AmazonEKSClusterAdminPolicy`:

1. En la consola de EKS, vaya a la pestaña **Acceso** del clúster.

1. En **Entradas de acceso**, busque la entrada para el rol de capacidad de kro (tendrá el ARN del rol que creó anteriormente).

1. Elija la entrada de acceso para abrir sus detalles.

1. En la sección **Políticas de acceso**, elija **Asociar política de acceso**.

1. Seleccione `AmazonEKSClusterAdminPolicy` en la lista de políticas.

1. En **Ámbito de acceso**, seleccione **Clúster**.

1. Elija **Asociar**.

**importante**  
Esta `AmazonEKSClusterAdminPolicy` concede amplios permisos para crear y administrar todos los recursos de Kubernetes, incluida la capacidad de crear cualquier tipo de recurso en todos los espacios de nombres. Esto resulta conveniente para desarrollo y pruebas de concepto, pero no se debe utilizar en producción. Para producción, cree políticas de control de acceso basado en roles personalizadas que concedan únicamente los permisos necesarios para los recursos específicos que administrarán las ResourceGraphDefinitions. Para obtener orientación sobre cómo configurar los permisos de privilegio mínimo, consulte [Configuración de permisos de kro](kro-permissions.md) y [Consideraciones sobre la seguridad para las capacidades de EKS](capabilities-security.md).

## Comprobación de la disponibilidad de los recursos personalizados
<a name="_verify_custom_resources_are_available"></a>

Una vez que la capacidad esté activa, compruebe que los recursos personalizados de kro estén disponibles en el clúster.

 **Uso de la consola** 

1. Vaya a su clúster en la consola de Amazon EKS.

1. Elija la pestaña **Recursos**.

1. Elija **Extensiones**. 

1. Elija **CustomResourceDefinitions**. 

Debería ver el tipo de recursos `ResourceGraphDefinition` en la lista.

 **Uso de kubectl** 

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

Debería ver el tipo de recursos `ResourceGraphDefinition` en la lista.

## Siguientes pasos
<a name="_next_steps"></a>
+  [Conceptos de kro](kro-concepts.md): descripción de los conceptos de kro y la composición de recursos
+  [Conceptos de kro](kro-concepts.md): más información sobre SimpleSchema, las expresiones de CEL y los patrones de composición
+  [Uso de recursos de capacidades](working-with-capabilities.md): administración del recurso de la capacidad de kro

# Creación de una capacidad de kro mediante la AWS CLI
<a name="kro-create-cli"></a>

En este tema, se describe cómo crear una capacidad de kro (Kube Resource Orchestrator) mediante la AWS CLI.

## Requisitos previos
<a name="_prerequisites"></a>
+  **AWS CLI**: versión `2.12.3` o posterior. Para comprobar la versión, ejecute `aws --version`. Para obtener más información, consulte [Instalación](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) en la Guía del usuario de la interfaz de la línea de comandos de AWS.
+  ** `kubectl` ** – una herramienta de línea de comandos para trabajar con clústeres de Kubernetes. Para obtener más información, consulte [Configuración de `kubectl` y `eksctl`](install-kubectl.md).

## Paso 1: creación de un rol de capacidad de IAM
<a name="_step_1_create_an_iam_capability_role"></a>

Cree un archivo de política de confianza:

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

Cree el rol de IAM:

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

**nota**  
A diferencia de ACK y Argo CD, kro no necesita permisos de IAM adicionales. kro opera completamente dentro de su clúster y no hace llamadas a la API de AWS. El rol solo es necesario para establecer una relación de confianza con el servicio de capacidades de EKS.

## Paso 2: creación de la capacidad de kro
<a name="_step_2_create_the_kro_capability"></a>

Cree el recurso de la capacidad de kro en su clúster. Reemplace *region-code* por la región de AWS en la que se encuentra el clúster (como `us-west-2`) y *my-cluster* por el nombre del clúster.

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

El comando devuelve una respuesta inmediatamente, pero la capacidad tarda algún tiempo en activarse mientras EKS crea la infraestructura y los componentes de la capacidad necesarios. EKS instalará las definiciones de recursos personalizados de Kubernetes relacionadas con esta capacidad en el clúster según se vaya creando.

**nota**  
Si recibe un error que indica que el clúster no existe o que no tiene permisos, compruebe lo siguiente:  
El nombre del clúster es correcto
La AWS CLI está configurada para la región correcta
Dispone de los permisos de IAM necesarios

## Paso 3: comprobación de la activación de la capacidad
<a name="_step_3_verify_the_capability_is_active"></a>

Espere a que se active la capacidad. Reemplace *region-code* por la región de AWS donde creó el clúster y *my-cluster* por el nombre de su clúster.

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

La capacidad estará lista cuando aparezca el estado `ACTIVE`.

También puede ver todos los detalles de la capacidad:

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

## Paso 4: concesión de permisos para administrar los recursos de Kubernetes
<a name="_step_4_grant_permissions_to_manage_kubernetes_resources"></a>

Cuando crea una capacidad de kro, se crea automáticamente una entrada de acceso de EKS con la `AmazonEKSKROPolicy`, lo que permite a kro administrar ResourceGraphDefinitions y sus instancias. Sin embargo, no se conceden permisos de forma predeterminada para crear los recursos subyacentes de Kubernetes (como Implementaciones, Servicios, ConfigMaps, etc.) definidos en las ResourceGraphDefinitions.

Este diseño intencional sigue el principio de privilegio mínimo: diferentes ResourceGraphDefinitions requieren distintos permisos. Por ejemplo: \$1 Una ResourceGraphDefinition que solo crea ConfigMaps y Secretos requiere permisos distintos a uno que crea Implementaciones y Servicios. \$1 Una ResourceGraphDefinition que crea recursos de ACK requiere permisos para esos recursos personalizados específicos. \$1 Algunas ResourceGraphDefinitions pueden limitarse a leer recursos existentes sin crear otros nuevos.

Debe configurar explícitamente los permisos que kro necesita según los recursos que administrarán las ResourceGraphDefinitions.

### Configuración rápida
<a name="_quick_setup"></a>

Para comenzar rápidamente, realizar pruebas o trabajar en entornos de desarrollo, utilice `AmazonEKSClusterAdminPolicy`:

Obtenga el ARN del rol de capacidad:

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

Asocie la política de administración del clúster:

```
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**  
Esta `AmazonEKSClusterAdminPolicy` concede amplios permisos para crear y administrar todos los recursos de Kubernetes, incluida la capacidad de crear cualquier tipo de recurso en todos los espacios de nombres. Esto resulta conveniente para desarrollo y pruebas de concepto, pero no se debe utilizar en producción. Para producción, cree políticas de control de acceso basado en roles personalizadas que concedan únicamente los permisos necesarios para los recursos específicos que administrarán las ResourceGraphDefinitions. Para obtener orientación sobre cómo configurar los permisos de privilegio mínimo, consulte [Configuración de permisos de kro](kro-permissions.md) y [Consideraciones sobre la seguridad para las capacidades de EKS](capabilities-security.md).

## Paso 5: comprobación de la disponibilidad de los recursos personalizados
<a name="_step_5_verify_custom_resources_are_available"></a>

Una vez que la capacidad esté activa, compruebe que los recursos personalizados de kro estén disponibles en el clúster:

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

Debería ver el tipo de recursos `ResourceGraphDefinition` en la lista.

## Siguientes pasos
<a name="_next_steps"></a>
+  [Conceptos de kro](kro-concepts.md): descripción de los conceptos de kro y la composición de recursos
+  [Conceptos de kro](kro-concepts.md): más información sobre SimpleSchema, las expresiones de CEL y los patrones de composición
+  [Uso de recursos de capacidades](working-with-capabilities.md): administración del recurso de la capacidad de kro

# Creación de una capacidad de kro mediante eksctl
<a name="kro-create-eksctl"></a>

En este tema, se describe cómo crear una capacidad de kro (Kube Resource Orchestrator) mediante eksctl.

**nota**  
Los siguientes pasos requieren la versión `0.220.0` o posterior de eksctl. Para comprobar la versión, ejecute `eksctl version`.

## Paso 1: creación de un rol de capacidad de IAM
<a name="_step_1_create_an_iam_capability_role"></a>

Cree un archivo de política de confianza:

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

Cree el rol de IAM:

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

**nota**  
A diferencia de ACK y Argo CD, kro no necesita permisos de IAM adicionales más allá de la política de confianza. kro opera completamente dentro de su clúster y no hace llamadas a la API de AWS.

## Paso 2: creación de la capacidad de kro
<a name="_step_2_create_the_kro_capability"></a>

Cree la capacidad de kro mediante eksctl. Reemplace *region-code* por la región de AWS donde creó el clúster y *my-cluster* por el nombre de su clúster.

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

El comando vuelve inmediatamente, pero la capacidad tarda algún tiempo en activarse.

## Paso 3: comprobación de la activación de la capacidad
<a name="_step_3_verify_the_capability_is_active"></a>

Compruebe el estado de la capacidad. Reemplace *region-code* por la región de AWS donde creó el clúster y *my-cluster* por el nombre de su clúster.

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

La capacidad estará lista cuando aparezca el estado `ACTIVE`.

## Paso 4: concesión de permisos para administrar los recursos de Kubernetes
<a name="_step_4_grant_permissions_to_manage_kubernetes_resources"></a>

De forma predeterminada, kro solo puede crear y administrar ResourceGraphDefinitions y sus instancias. Para permitir que kro cree y administre los recursos de Kubernetes subyacentes definidos en su ResourceGraphDefinitions, asocie la política de acceso `AmazonEKSClusterAdminPolicy` a la entrada de acceso de la capacidad.

Obtenga el ARN del rol de capacidad:

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

Asocie la política de administración del clúster:

```
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**  
La `AmazonEKSClusterAdminPolicy` otorga amplios permisos para crear y administrar todos los recursos de Kubernetes y su objetivo es simplificar la puesta en marcha. Para su uso en producción, cree políticas de RBAC más restrictivas que otorguen solo los permisos necesarios para los recursos específicos que administrará su ResourceGraphDefinitions. Para obtener orientación sobre cómo configurar los permisos de privilegio mínimo, consulte [Configuración de permisos de kro](kro-permissions.md) y [Consideraciones sobre la seguridad para las capacidades de EKS](capabilities-security.md).

## Paso 5: comprobación de la disponibilidad de los recursos personalizados
<a name="_step_5_verify_custom_resources_are_available"></a>

Una vez que la capacidad esté activa, compruebe que los recursos personalizados de kro estén disponibles en el clúster:

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

Debería ver el tipo de recursos `ResourceGraphDefinition` en la lista.

## Siguientes pasos
<a name="_next_steps"></a>
+  [Conceptos de kro](kro-concepts.md): descripción de los conceptos de kro y la composición de recursos
+  [Conceptos de kro](kro-concepts.md): más información sobre SimpleSchema, las expresiones de CEL y los patrones de composición
+  [Uso de recursos de capacidades](working-with-capabilities.md): administración del recurso de la capacidad de kro

# Conceptos de kro
<a name="kro-concepts"></a>

kro permite a los equipos de plataformas crear API de Kubernetes personalizadas que componen varios recursos en abstracciones de nivel superior. En este tema, se muestra un ejemplo práctico y, a continuación, se explican los conceptos básicos que debe comprender al trabajar con la capacidad de EKS para kro.

## Introducción a kro
<a name="_getting_started_with_kro"></a>

Después de crear la capacidad de kro (consulte [Creación de una capacidad de kro](create-kro-capability.md)), puede comenzar a crear API personalizadas con ResourceGraphDefinitions en el clúster.

A continuación se muestra un ejemplo completo que crea una abstracción simple de una aplicación web:

```
apiVersion: kro.run/v1alpha1
kind: ResourceGraphDefinition
metadata:
  name: webapplication
spec:
  schema:
    apiVersion: v1alpha1
    kind: WebApplication
    group: kro.run
    spec:
      name: string | required=true
      image: string | default="nginx:latest"
      replicas: integer | default=3
  resources:
  - id: deployment
    template:
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: ${schema.spec.name}
      spec:
        replicas: ${schema.spec.replicas}
        selector:
          matchLabels:
            app: ${schema.spec.name}
        template:
          metadata:
            labels:
              app: ${schema.spec.name}
          spec:
            containers:
            - name: app
              image: ${schema.spec.image}
              ports:
              - containerPort: 80
  - id: service
    template:
      apiVersion: v1
      kind: Service
      metadata:
        name: ${schema.spec.name}
      spec:
        selector:
          app: ${schema.spec.name}
        ports:
        - protocol: TCP
          port: 80
          targetPort: 80
```

Después de aplicar esta ResourceGraphDefinition, los equipos de aplicaciones pueden crear aplicaciones web mediante su API simplificada:

```
apiVersion: kro.run/v1alpha1
kind: WebApplication
metadata:
  name: my-app
spec:
  name: my-app
  replicas: 5
```

kro crea automáticamente la implementación y el servicio con la configuración adecuada. Como no se ha especificado `image`, utiliza el valor predeterminado `nginx:latest` del esquema.

## Conceptos clave
<a name="_core_concepts"></a>

**importante**  
kro valida ResourceGraphDefinitions en el momento de la creación, no en tiempo de ejecución. Al crear una RGD, kro valida la sintaxis de CEL, compara las expresiones con los esquemas reales de Kubernetes, verifica la existencia de los campos y detecta las dependencias circulares. Esto significa que los errores se detectan inmediatamente al crear la RGD, antes de implementar cualquier instancia.

### ResourceGraphDefinition
<a name="_resourcegraphdefinition"></a>

Una ResourceGraphDefinition (RGD) define una API de Kubernetes personalizada mediante la especificación de lo siguiente:
+  **Esquema**: la estructura de la API con el formato SimpleSchema (nombres de campo, tipos, valores predeterminados, validación)
+  **Recursos**: plantillas para la creación para recursos de AWS o Kubernetes subyacentes
+  **Dependencias**: cómo se relacionan los recursos entre sí (se detectan automáticamente a partir de referencias de campo)

Al aplicar una RGD, kro registra una nueva definición de recursos personalizados (CRD) en el clúster. A continuación, los equipos de aplicaciones pueden crear instancias de la API personalizada y kro se encarga de crear y administrar todos los recursos subyacentes.

Para obtener más información, consulte la sección [ResourceGraphDefinition Overview](https://kro.run/docs/concepts/rgd/overview/) en la documentación de kro.

### Formato SimpleSchema
<a name="_simpleschema_format"></a>

SimpleSchema proporciona una forma simplificada de definir esquemas de API sin necesidad de conocimientos de OpenAPI:

```
schema:
  apiVersion: v1alpha1
  kind: Database
  spec:
    name: string | required=true description="Database name"
    size: string | default="small" enum=small,medium,large
    replicas: integer | default=1 minimum=1 maximum=5
```

SimpleSchema admite los tipos `string`, `integer`, `boolean` y `number` con restricciones como `required`, `default`, `minimum`/`maximum`, `enum` y `pattern`.

Para obtener más información, consulte [SimpleSchema](https://kro.run/docs/concepts/rgd/schema/) en la documentación de kro.

### Expresiones de CEL
<a name="_cel_expressions"></a>

kro utiliza el lenguaje de expresión común (CEL) para hacer referencia a valores de forma dinámica y agregar lógica condicional. Las expresiones de CEL se encapsulan en `${` y `}` y se pueden usar de dos maneras:

 **Expresiones independientes**. Todo el valor del campo es una sola expresión:

```
spec:
  replicas: ${schema.spec.replicaCount}  # Expression returns integer
  labels: ${schema.spec.labelMap}        # Expression returns object
```

El resultado de la expresión reemplaza todo el valor del campo y debe coincidir con el tipo esperado del campo.

 **Plantillas de cadenas**. Una o más expresiones incrustadas en una cadena:

```
metadata:
  name: "${schema.spec.prefix}-${schema.spec.name}"  # Multiple expressions
  annotation: "Created by ${schema.spec.owner}"      # Single expression in string
```

Todas las expresiones de las plantillas de cadenas deben devolver cadenas. Utilice `string()` para convertir otros tipos: `"replicas-${string(schema.spec.count)}"`.

 **Referencias de campos**. Acceda a los valores de las especificaciones de la instancia mediante `schema.spec`:

```
template:
  metadata:
    name: ${schema.spec.name}-deployment
    namespace: ${schema.metadata.namespace}  # Can also reference metadata
  spec:
    replicas: ${schema.spec.replicas}
```

 **Acceso a campos opcionales**. Utilice `?` para campos que podrían no existir:

```
# For ConfigMaps or Secrets with unknown structure
value: ${configmap.data.?DATABASE_URL}

# For optional status fields
ready: ${deployment.status.?readyReplicas > 0}
```

Si el campo no existe, la expresión devuelve `null` en lugar de producir un error.

 **Recursos condicionales**. Incluya los recursos solo cuando se cumplan las condiciones:

```
resources:
- id: ingress
  includeWhen:
    - ${schema.spec.enableIngress == true}
  template:
    # ... ingress configuration
```

El campo `includeWhen` acepta una lista de expresiones booleanas. Todas las condiciones deben ser verdaderas para que el recurso se cree. Actualmente, `includeWhen` solo puede hacer referencia a campos `schema.spec`.

 **Transformaciones**. Transforme valores mediante funciones y operadores ternarios:

```
template:
  spec:
    resources:
      requests:
        memory: ${schema.spec.size == "small" ? "512Mi" : "2Gi"}

    # String concatenation
    image: ${schema.spec.registry + "/" + schema.spec.imageName}

    # Type conversion
    port: ${string(schema.spec.portNumber)}
```

 **Referencias cruzadas entre recursos**. Valores de referencia de otros recursos:

```
resources:
- id: bucket
  template:
    apiVersion: s3.services.k8s.aws/v1alpha1
    kind: Bucket
    spec:
      name: ${schema.spec.name}-data

- id: configmap
  template:
    apiVersion: v1
    kind: ConfigMap
    data:
      BUCKET_NAME: ${bucket.spec.name}
      BUCKET_ARN: ${bucket.status.ackResourceMetadata.arn}
```

Al hacer referencia a otro recurso en una expresión de CEL, se crea automáticamente una dependencia. kro garantiza que el recurso al que se hace referencia se cree primero.

Para obtener más información, consulte [CEL Expressions](https://kro.run/docs/concepts/rgd/cel-expressions/) en la documentación de kro.

### Dependencias de recursos
<a name="_resource_dependencies"></a>

kro infiere automáticamente las dependencias de las expresiones de CEL: no se especifica el orden, se describen las relaciones. Cuando un recurso hace referencia a otro mediante una expresión de CEL, kro crea una dependencia y determina el orden de creación correcto.

```
resources:
- id: bucket
  template:
    apiVersion: s3.services.k8s.aws/v1alpha1
    kind: Bucket
    spec:
      name: ${schema.spec.name}-data

- id: notification
  template:
    apiVersion: s3.services.k8s.aws/v1alpha1
    kind: BucketNotification
    spec:
      bucket: ${bucket.spec.name}  # Creates dependency: notification depends on bucket
```

La expresión `${bucket.spec.name}` crea una dependencia. kro crea un gráfico acíclico dirigido (DAG) de todos los recursos y sus dependencias y, a continuación, calcula un orden topológico para la creación.

 **Orden de creación**: los recursos se crean por orden topológico (primero las dependencias).

 **Creación paralela**: los recursos sin dependencias se crean simultáneamente.

 **Orden de eliminación**: los recursos se eliminan por orden topológico inverso (primero los dependientes).

 **Dependencias circulares**: no se permiten. kro rechaza las ResourceGraphDefinitions con dependencias circulares durante la validación.

Puede ver el orden de creación de computación:

```
kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.status.topologicalOrder}'
```

Para obtener más información, consulte [Graph inference](https://kro.run/docs/concepts/rgd/dependencies-ordering/) en la documentación de kro.

## Composición con ACK
<a name="_composing_with_ack"></a>

kro funciona sin problemas con la capacidad de EKS para ACK para componer recursos de AWS con recursos de Kubernetes:

```
resources:
# Create {aws} S3 bucket with ACK
- id: bucket
  template:
    apiVersion: s3.services.k8s.aws/v1alpha1
    kind: Bucket
    spec:
      name: ${schema.spec.name}-files

# Inject bucket details into Kubernetes ConfigMap
- id: config
  template:
    apiVersion: v1
    kind: ConfigMap
    data:
      BUCKET_NAME: ${bucket.spec.name}
      BUCKET_ARN: ${bucket.status.ackResourceMetadata.arn}

# Use ConfigMap in application deployment
- id: deployment
  template:
    apiVersion: apps/v1
    kind: Deployment
    spec:
      template:
        spec:
          containers:
          - name: app
            envFrom:
            - configMapRef:
                name: ${config.metadata.name}
```

Este patrón le permite crear recursos de AWS, extraer sus detalles (ARN, URL, puntos de conexión) e inyectarlos en la configuración de la aplicación, todo ello administrado como una sola unidad.

Para obtener más patrones de composición y ejemplos avanzados, consulte [Consideraciones sobre kro para EKS](kro-considerations.md).

## Siguientes pasos
<a name="_next_steps"></a>
+  [Consideraciones sobre kro para EKS](kro-considerations.md): más información sobre los patrones específicos de EKS, el RBAC y la integración con ACK y Argo CD
+  [Documentación de kro](https://kro.run/docs/overview): documentación exhaustiva de kro que incluye solución de problemas, patrones de validación y expresiones de CEL avanzadas

# Configuración de permisos de kro
<a name="kro-permissions"></a>

A diferencia de ACK y Argo CD, kro no necesita permisos de IAM. kro opera completamente dentro de su clúster de Kubernetes y no hace llamadas a la API de AWS. Controle el acceso a los recursos de kro mediante el RBAC estándar de Kubernetes.

## Cómo funcionan los permisos con kro
<a name="_how_permissions_work_with_kro"></a>

kro utiliza dos tipos de recursos de Kubernetes con diferentes ámbitos:

 **ResourceGraphDefinitions**: recursos del ámbito del clúster que definen las API personalizadas. Por lo general, los administran los equipos de plataformas que diseñan y mantienen los estándares organizativos.

 **Instancias**: recursos personalizados del ámbito del espacio de nombres creados a partir de ResourceGraphDefinitions. Los equipos de aplicaciones pueden crearlos con los permisos de RBAC adecuados.

De forma predeterminada, la capacidad de kro tiene permisos para administrar ResourceGraphDefinitions y sus instancias mediante la política de entrada de acceso `AmazonEKSKROPolicy`. Sin embargo, kro requiere permisos adicionales para crear y administrar los recursos de Kubernetes subyacentes definidos en las ResourceGraphDefinitions (como implementaciones, servicios o recursos de ACK). Debe otorgar estos permisos mediante las políticas de entrada de acceso o el RBAC de Kubernetes. Para obtener más información sobre la concesión de estos permisos, consulte los [permisos de recursos arbitrarios de kro](capabilities-security.md#kro-resource-permissions).

## Permisos del equipo de plataformas
<a name="_platform_team_permissions"></a>

Los equipos de plataformas necesitan permisos para crear y administrar ResourceGraphDefinitions.

 **Ejemplo de ClusterRole para equipos de plataformas**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: kro-platform-admin
rules:
- apiGroups: ["kro.run"]
  resources: ["resourcegraphdefinitions"]
  verbs: ["*"]
```

 **Enlace a miembros del equipo de plataformas**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: platform-team-kro-admin
subjects:
- kind: Group
  name: platform-team
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: kro-platform-admin
  apiGroup: rbac.authorization.k8s.io
```

## Permisos del equipo de aplicaciones
<a name="_application_team_permissions"></a>

Los equipos de aplicaciones necesitan permisos para crear instancias de recursos personalizados en sus espacios de nombres.

 **Ejemplo de rol para equipos de aplicaciones**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: kro-app-developer
  namespace: my-app
rules:
- apiGroups: ["kro.run"]
  resources: ["webapps", "databases"]
  verbs: ["create", "get", "list", "update", "delete", "patch"]
```

 **Enlace a miembros del equipo de aplicaciones**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: app-team-kro-developer
  namespace: my-app
subjects:
- kind: Group
  name: app-team
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: kro-app-developer
  apiGroup: rbac.authorization.k8s.io
```

**nota**  
El grupo de API del rol (`kro.run` en este ejemplo) debe coincidir con la `apiVersion` definida en el esquema de ResourceGraphDefinition.

## Acceso de solo lectura
<a name="_read_only_access"></a>

Otorgue acceso de solo lectura para ver las ResourceGraphDefinitions e instancias sin permisos de modificación.

 **ClusterRole de solo lectura**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: kro-viewer
rules:
- apiGroups: ["kro.run"]
  resources: ["resourcegraphdefinitions"]
  verbs: ["get", "list", "watch"]
```

 **Rol de solo lectura para instancias**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: kro-instance-viewer
  namespace: my-app
rules:
- apiGroups: ["kro.run"]
  resources: ["webapps", "databases"]
  verbs: ["get", "list", "watch"]
```

## Acceso a varios espacios de nombres
<a name="_multi_namespace_access"></a>

Otorgue a los equipos de aplicaciones acceso a varios espacios de nombres mediante ClusterRoles con RoleBindings.

 **ClusterRole para el acceso a varios espacios de nombres**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: kro-multi-namespace-developer
rules:
- apiGroups: ["kro.run"]
  resources: ["webapps"]
  verbs: ["create", "get", "list", "update", "delete"]
```

 **Enlace a espacios de nombres específicos**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: app-team-dev-access
  namespace: development
subjects:
- kind: Group
  name: app-team
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: kro-multi-namespace-developer
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: app-team-staging-access
  namespace: staging
subjects:
- kind: Group
  name: app-team
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: kro-multi-namespace-developer
  apiGroup: rbac.authorization.k8s.io
```

## Prácticas recomendadas
<a name="_best_practices"></a>

 **Principio de privilegio mínimo**: otorgue solo los permisos mínimos necesarios para las responsabilidades de cada equipo.

 **Uso de grupos en lugar de usuarios individuales**: enlace roles a grupos en lugar de usuarios individuales para facilitar la administración.

 **Preocupaciones de aplicaciones y plataformas independientes**: los equipos de plataformas administran ResourceGraphDefinitions, mientras que los equipos de aplicaciones administran instancias.

 **Aislamiento del espacio de nombres**: utilice los espacios de nombres para aislar diferentes equipos o entornos, con RBAC como control de acceso a cada espacio de nombres.

 **Acceso de solo lectura para auditoría**: proporcione acceso de solo lectura a los equipos de seguridad y cumplimiento con fines de auditoría.

## Siguientes pasos
<a name="_next_steps"></a>
+  [Conceptos de kro](kro-concepts.md): descripción de los conceptos de kro y la composición de recursos
+  [Conceptos de kro](kro-concepts.md): descripción de SimpleSchema, las expresiones de CEL y los patrones de composición
+  [Consideraciones sobre la seguridad para las capacidades de EKS](capabilities-security.md): revisión de las prácticas recomendadas de seguridad para capacidades

# Consideraciones sobre kro para EKS
<a name="kro-considerations"></a>

En este tema, se tratan aspectos importantes al utilizar la capacidad de EKS para kro, lo que incluye cuándo se utilizan la composición de recursos, los patrones de RBAC y la integración con otras capacidades de EKS.

## Cuándo se utiliza kro
<a name="_when_to_use_kro"></a>

kro está diseñado para crear patrones de infraestructura reutilizables y API personalizadas que simplifiquen la administración de recursos complejos.

 **Utilice kro cuando en los siguientes casos**:
+ Para la creación de plataformas de autoservicio con API simplificadas para los equipos de aplicaciones
+ Para la estandarización de los patrones de infraestructura en todos los equipos (base de datos \$1 copia de seguridad \$1 supervisión)
+ Para la administración de dependencias de los recursos y para la transferencia de valores entre recursos
+ Para la creación de abstracciones personalizadas que oculten la complejidad de la implementación
+ Para la composición de varios recursos de ACK en componentes de nivel superior
+ Para la activación de flujos de trabajo de GitOps para pilas de infraestructuras complejas

 **No utilice kro en los siguientes casos**:
+ Para la administración de recursos simples e independientes (utilice directamente los recursos de ACK o Kubernetes)
+ Para cuando necesite una lógica dinámica en tiempo de ejecución (kro es declarativo, no imperativo)
+ Para cuando los recursos no tengan dependencias ni configuración compartida

kro destaca por crear “rutas pavimentadas”: patrones obstinados y reutilizables que facilitan a los equipos la implementación correcta de infraestructuras complejas.

## Patrones de RBAC
<a name="_rbac_patterns"></a>

kro permite separar las preocupaciones entre los equipos de plataformas que crean ResourceGraphDefinitions y los equipos de aplicaciones que crean instancias.

### Responsabilidades del equipo de plataformas
<a name="_platform_team_responsibilities"></a>

Los equipos de plataformas crean y mantienen ResourceGraphDefinitions (RGD) que definen las API personalizadas.

 **Permisos necesarios**:
+ Creación, actualización y eliminación de ResourceGraphDefinitions
+ Administración de los tipos de recursos subyacentes (implementaciones, servicios, recursos de ACK)
+ Acceso a todos los espacios de nombres en los que se utilizarán las RGD

 **Ejemplo de ClusterRole para el equipo de plataformas**:

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: platform-kro-admin
rules:
- apiGroups: ["kro.run"]
  resources: ["resourcegraphdefinitions"]
  verbs: ["*"]
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["get", "list", "watch"]
```

Para obtener una configuración de RBAC detallada, consulte [Configuración de permisos de kro](kro-permissions.md).

### Responsabilidades del equipo de aplicaciones
<a name="_application_team_responsibilities"></a>

Los equipos de aplicaciones crean instancias de recursos personalizados definidas por las RGD sin necesidad de comprender la complejidad subyacente.

 **Permisos necesarios**:
+ Creación, actualización y eliminación de instancias de recursos personalizados
+ Acceso de lectura a su espacio de nombres
+ Sin acceso a recursos subyacentes o las RGD

 **Ventajas**:
+ Uso de API sencillas y de alto nivel por parte de los equipos
+ Control de los detalles de la implementación por parte de los equipos
+ Menor riesgo de errores de configuración
+ Incorporación más rápida de los nuevos miembros del equipo

## Integración con otras capacidades de EKS
<a name="_integration_with_other_eks_capabilities"></a>

### Composición de recursos de ACK
<a name="_composing_ack_resources"></a>

kro es particularmente eficaz cuando se combina con ACK para crear patrones de infraestructura.

 **Patrones comunes**:
+  **Aplicación con almacenamiento**: bucket de S3 \$1 cola de SQS \$1 configuración de notificaciones
+  **Pila de base de datos**: instancia de RDS \$1 grupo de parámetros \$1 grupo de seguridad \$1 secreto de Secrets Manager
+  **Redes**: VPC \$1 subredes \$1 tablas de enrutamiento \$1 grupos de seguridad \$1 puertas de enlace de NAT
+  **Computación con almacenamiento**: instancia de EC2 \$1 volúmenes de EBS \$1 perfil de instancia de IAM

kro gestiona el orden de las dependencias, transfiere valores entre los recursos (como los ARN y las cadenas de conexión) y administra todo el ciclo de vida como una sola unidad.

Para ver ejemplos de composición de recursos de ACK, consulte [Conceptos de ACK](ack-concepts.md).

### GitOps con Argo CD
<a name="_gitops_with_argo_cd"></a>

Utilice la capacidad de EKS para Argo CD para implementar tanto las RGD como las instancias de los repositorios de Git.

 **Organización de repositorios**:
+  **Repositorio de plataformas**: contiene ResourceGraphDefinitions administradas por el equipo de plataformas
+  **Repositorios de aplicaciones**: contienen instancias de recursos personalizados administradas por los equipos de aplicaciones
+  **Repositorio compartido**: contiene tanto RGD como instancias para organizaciones más pequeñas

 **Consideraciones**:
+ Implemente las RGD antes que las instancias (las ondas de sincronización de Argo CD pueden ayudarlo).
+ Utilice proyectos de Argo CD independientes para los equipos de plataformas y aplicaciones.
+ El equipo de plataformas controla el acceso al repositorio de RGD.
+ Los equipos de aplicaciones tienen acceso de solo lectura a las definiciones de RGD.

Para obtener más información sobre Argo CD, consulte [Uso de Argo CD](working-with-argocd.md).

## Organización de ResourceGraphDefinitions
<a name="_organizing_resourcegraphdefinitions"></a>

Organice las RGD por propósito, complejidad y propiedad.

 **Por propósito**:
+  **Infraestructura**: pilas de bases de datos, redes, almacenamiento
+  **Aplicación**: aplicaciones web, API, trabajos por lotes
+  **Plataforma**: servicios compartidos, supervisión, registro

 **Por complejidad**:
+  **Sencilla**: de 2 a 3 recursos con dependencias mínimas
+  **Moderada**: de 5 a 10 recursos con algunas dependencias
+  **Compleja**: más de 10 recursos con dependencias complejas

 **Convenciones de nomenclatura**:
+ Utilice nombres descriptivos: `webapp-with-database`, `s3-notification-queue`. 
+ Incluya la versión en el nombre para los cambios bruscos: `webapp-v2`. 
+ Utilice prefijos coherentes para las RGD relacionadas: `platform- `, `app-` 

 **Estrategia de espacio de nombres**:
+ Las RGD tienen un ámbito de clúster (no tienen espacios de nombres).
+ Las instancias tienen espacios de nombres.
+ Utilice selectores de espacios de nombres en las RGD para controlar dónde se pueden crear las instancias.

## Control de versiones y actualizaciones
<a name="_versioning_and_updates"></a>

Planifique la evolución de RGD y la migración de instancias.

 **Actualizaciones de RGD**:
+  **Cambios no bruscos**: actualice la RGD (agregue campos opcionales y nuevos recursos con includeWhen).
+  **Cambios bruscos**: cree una nueva RGD con un nombre diferente (webapp-v2).
+  **Obsolescencia**: marque las RGD antiguos con anotaciones y comunique la programación de migración.

 **Migración de instancias**:
+ Cree nuevas instancias con la RGD actualizada.
+ Valide que las nuevas instancias funcionen correctamente.
+ Elimine las instancias antiguas.
+ kro gestiona automáticamente las actualizaciones de los recursos subyacentes.

 **Prácticas recomendadas**:
+ Pruebe antes los cambios de RGD en entornos que no sean de producción.
+ Utilice el control de versiones semántico en los nombres de RGD para cambios importantes.
+ Documente los cambios bruscos y las rutas de migración.
+ Proporcione ejemplos de migración para los equipos de aplicaciones.

## Validación y pruebas
<a name="_validation_and_testing"></a>

Valide las RGD antes de implementarlas en producción.

 **Estrategias de validación**:
+  **Validación de esquema**: kro valida la estructura de RGD automáticamente.
+  **Instancias de prueba**: cree instancias de prueba en los espacios de nombres de desarrollo.
+  **Pruebas de integración**: compruebe que los recursos compuestos funcionen juntos
+  **Aplicación de políticas**: utilice controladores de admisión para hacer cumplir los estándares organizativos

 **Problemas comunes que se deben probar**:
+ Dependencias y orden de los recursos
+ Transferencia de valores entre recursos (expresiones de CEL)
+ Inclusión condicional de recursos (includeWhen)
+ Propagación del estado a partir de los recursos subyacentes
+ Permisos de RBAC para la creación de instancias

## Documentación ascendente
<a name="_upstream_documentation"></a>

Para obtener información detallada sobre el uso de kro:
+  [Introducción a kro](https://kro.run/docs/guides/getting-started): creación de ResourceGraphDefinitions
+  [Expresiones de CEL](https://kro.run/docs/concepts/cel): escritura de expresiones de CEL
+  [Guías de kro](https://kro.run/docs/guides/): patrones de composición avanzados
+  [Solución de problemas](https://kro.run/docs/troubleshooting): solución de problemas y depuración

## Siguientes pasos
<a name="_next_steps"></a>
+  [Configuración de permisos de kro](kro-permissions.md): configuración del RBAC para los equipos de plataformas y aplicaciones
+  [Conceptos de kro](kro-concepts.md): descripción de los conceptos de kro y el ciclo de vida de los recursos
+  [Solución de problemas con capacidades de kro](kro-troubleshooting.md): solución de problemas de kro
+  [Conceptos de ACK](ack-concepts.md): más información sobre los recursos de ACK para la composición
+  [Uso de Argo CD](working-with-argocd.md): implementación de instancias y RGD con GitOps

# Solución de problemas con capacidades de kro
<a name="kro-troubleshooting"></a>

En este tema, se proporcionan instrucciones para la solución de problemas de la capacidad de EKS para kro, como las comprobaciones de estado de la capacidad, los permisos de RBAC, los errores de expresión de CEL y los problemas de composición de los recursos.

**nota**  
Las capacidades de EKS son completamente administradas y se ejecutan fuera del clúster. No tiene acceso a los registros del controlador ni al espacio de nombres `kro-system`. La solución de problemas se centra en el estado de la capacidad, la configuración de RBAC y el estado de los recursos.

## La capacidad está ACTIVA, pero ResourceGraphDefinitions no funciona
<a name="_capability_is_active_but_resourcegraphdefinitions_arent_working"></a>

Si la capacidad de kro muestra el estado `ACTIVE`, pero ResourceGraphDefinitions no crea recursos subyacentes, compruebe el estado de la capacidad, los permisos de RBAC y el estado de los recursos.

 **Compruebe el estado de la capacidad**:

Puede ver los problemas de estado de la capacidad en la consola de EKS o mediante la AWS CLI.

 **Consola**:

1. Abra la consola de Amazon EKS en https://console.aws.amazon.com/eks/home\$1/clusters.

1. Seleccione el nombre del clúster.

1. Seleccione la pestaña **Observabilidad**.

1. Elija **Supervisar clúster**.

1. Seleccione la pestaña **Capacidades** para ver el estado de todas las capacidades.

 ** AWS CLI**:

```
# View capability status and health
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro

# Look for issues in the health section
```

 **Causas habituales**:
+  **Faltan los permisos de RBAC**: kro no tiene permisos para crear los recursos subyacentes de Kubernetes
+  **Expresiones de CEL no válidas**: errores de sintaxis en ResourceGraphDefinition
+  **Dependencias de recursos**: los recursos dependientes no están listos
+  **Validación del esquema**: la instancia no cumple con los requisitos del esquema de RGD

 **Compruebe los permisos de RBAC**:

```
# Check if capability has cluster admin policy
kubectl get accessentry -A | grep kro
```

Si la capacidad no tiene los permisos necesarios, asocie la `AmazonEKSClusterAdminPolicy` a la entrada de acceso de la capacidad de kro o cree políticas de RBAC más restrictivas para su uso en producción. Para obtener más información, consulte [Configuración de permisos de kro](kro-permissions.md).

 **Compruebe el estado de ResourceGraphDefinition**:

```
# List all RGDs
kubectl get resourcegraphdefinition

# Describe specific RGD
kubectl describe resourcegraphdefinition my-rgd

# Check for validation errors
kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.status.conditions}'
```

Las ResourceGraphDefinitions tienen tres condiciones de estado clave:
+  `ResourceGraphAccepted`: si la RGD ha superado la validación (sintaxis de CEL, comprobación de tipos, existencia de campos)
+  `KindReady`: si la CRD de la API personalizada se generó y registró
+  `ControllerReady`: si kro está supervisando activamente las instancias de la API personalizada

Si `ResourceGraphAccepted` es `False`, compruebe el mensaje de la condición para ver si hay errores de validación, como campos desconocidos, discrepancias de tipos o dependencias circulares.

## Se crearon las instancias, pero los recursos subyacentes no aparecen
<a name="_instances_created_but_underlying_resources_not_appearing"></a>

Si existen instancias de recursos personalizadas, pero no se crean los recursos de Kubernetes subyacentes (implementaciones, servicios, ConfigMaps), compruebe que kro tenga permisos y si hay errores de composición.

 **Compruebe el estado de la instancia**:

```
# Describe the instance (replace with your custom resource kind and name)
kubectl describe custom-kind
         my-instance

# View instance events
kubectl get events --field-selector involvedObject.name=my-instance

# Check instance status conditions
kubectl get custom-kind
         my-instance -o jsonpath='{.status.conditions}'

# Check instance state
kubectl get custom-kind
         my-instance -o jsonpath='{.status.state}'
```

Las instancias tienen un campo `state` que muestra el estado de alto nivel:
+  `ACTIVE`: la instancia se está ejecutando correctamente.
+  `IN_PROGRESS`: la instancia se está procesando o conciliando.
+  `FAILED`: no se pudo conciliar la instancia.
+  `DELETING`: la instancia se está eliminando.
+  `ERROR`: se ha producido un error durante el procesamiento.

Las instancias también tienen cuatro condiciones de estado:
+  `InstanceManaged`: los finalizadores y las etiquetas están configurados correctamente.
+  `GraphResolved`: se creó un gráfico de tiempo de ejecución y se resolvieron los recursos.
+  `ResourcesReady`: todos los recursos están creados y listos.
+  `Ready`: estado general de la instancia (solo pasa a `True` cuando todas las subcondiciones son `True`).

Céntrese en la condición `Ready` para determinar el estado de la instancia. Si `Ready` es `False`, compruebe las subcondiciones para identificar en qué fase se ha producido el error.

 **Compruebe los permisos de RBAC**:

La capacidad de kro necesita permisos para crear los recursos de Kubernetes subyacentes definidos en las ResourceGraphDefinitions.

```
# Check if the capability has the AmazonEKSClusterAdminPolicy
kubectl get accessentry -A | grep kro
```

Si faltan los permisos, asocie la `AmazonEKSClusterAdminPolicy` a la entrada de acceso de la capacidad de kro o cree políticas de RBAC más restrictivas para su uso en producción. Para obtener más información, consulte [Configuración de permisos de kro](kro-permissions.md).

## Errores de expresión de CEL
<a name="_cel_expression_errors"></a>

Los errores de expresión de CEL se detectan en el momento de la creación de ResourceGraphDefinition, no cuando se crean las instancias. kro valida toda la sintaxis de CEL, compara las expresiones con los esquemas de Kubernetes y verifica la existencia de los campos al crear la RGD.

 **Errores comunes de validación de CEL**:
+  **Referencia de campo no definida**: se hace referencia a un campo que no existe en el esquema o el recurso.
+  **Discrepancia de tipos**: la expresión devuelve un tipo incorrecto (por ejemplo, una cadena cuando se espera un número entero).
+  **Sintaxis no válida**: faltan corchetes, comillas u operadores en la expresión de CEL.
+  **Tipo de recurso desconocido**: se hace referencia a una CRD que no existe en el clúster.

 **Compruebe el estado de validación de la RGD**:

```
# Check if RGD was accepted
kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.status.conditions[?(@.type=="ResourceGraphAccepted")]}'

# View detailed validation errors
kubectl describe resourcegraphdefinition my-rgd
```

Si `ResourceGraphAccepted` es `False`, el mensaje de condición contiene el error de validación.

 **Ejemplos de expresiones de CEL válidas**:

```
# Reference schema field
${schema.spec.appName}

# Conditional expression
${schema.spec.replicas > 1}

# String template (expressions must return strings)
name: "${schema.spec.appName}-service"

# Standalone expression (can be any type)
replicas: ${schema.spec.replicaCount}

# Resource reference
${deployment.status.availableReplicas}

# Optional field access (returns null if field doesn't exist)
${configmap.data.?DATABASE_URL}
```

## No se resuelven las dependencias de los recursos
<a name="_resource_dependencies_not_resolving"></a>

kro infiere automáticamente las dependencias a partir de expresiones de CEL y crea los recursos en el orden correcto. Si los recursos no se crean según lo previsto, compruebe el orden de dependencia y la disponibilidad de los recursos.

 **Consulte el orden de creación de computación**:

```
# See the order kro will create resources
kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.status.topologicalOrder}'
```

Se muestra el orden de computación en función de las referencias de expresiones de CEL entre los recursos.

 **Compruebe la preparación de los recursos**:

```
# View instance status to see which resources are ready
kubectl get custom-kind
         my-instance -o jsonpath='{.status}'

# Check specific resource status
kubectl get deployment my-deployment -o jsonpath='{.status.conditions}'
```

 **Compruebe las condiciones readyWhen (si se utilizan)**:

El campo `readyWhen` es opcional. Si no se especifica, los recursos se consideran listos inmediatamente después de su creación. Si ha definido las condiciones `readyWhen`, verifique que comprueben correctamente si los recursos están listos:

```
resources:
  - id: deployment
    readyWhen:
      - ${deployment.status.availableReplicas == deployment.spec.replicas}
```

 **Compruebe los eventos de los recursos**:

```
# View events for the underlying resources
kubectl get events -n namespace --sort-by='.lastTimestamp'
```

## Errores de validación del esquema
<a name="_schema_validation_failures"></a>

Si las instancias no se crean debido a errores de validación del esquema, compruebe que la instancia cumpla con los requisitos del esquema de RGD.

 **Compruebe los errores de validación**:

```
# Attempt to create instance and view error
kubectl apply -f instance.yaml

# View existing instance validation status
kubectl describe custom-kind
         my-instance | grep -A 5 "Validation"
```

 **Problemas de validación comunes**:
+  **Faltan campos obligatorios**: la instancia no proporciona todos los campos del esquema obligatorios.
+  **Discrepancia de tipos**: se proporciona una cadena cuando se espera un entero.
+  **Valor de enumeración no válido**: se utiliza un valor que no está en la lista de permitidos.
+  **Discrepancia de patrones**: la cadena no coincide con el patrón de expresión regular.

 **Revise el esquema de RGD**:

```
# View the schema definition
kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.spec.schema}'
```

Asegúrese de que la instancia proporcione todos los campos obligatorios con los tipos correctos.

## Siguientes pasos
<a name="_next_steps"></a>
+  [Consideraciones sobre kro para EKS](kro-considerations.md): consideraciones y prácticas recomendadas de kro
+  [Configuración de permisos de kro](kro-permissions.md): configuración del RBAC para los equipos de plataformas y aplicaciones
+  [Conceptos de kro](kro-concepts.md): descripción de los conceptos de kro y el ciclo de vida de los recursos
+  [Solución de problemas de capacidades de EKS](capabilities-troubleshooting.md): orientación general de solución de problemas de la capacidad

# Comparación de la capacidad de EKS para kro con kro autoadministrado
<a name="kro-comparison"></a>

La capacidad de EKS para kro proporciona la misma funcionalidad que kro autoadministrado, pero con importantes ventajas operativas. Para obtener una comparación general entre las capacidades de EKS y las soluciones autoadministradas, consulte [Consideraciones sobre las capacidades de EKS](capabilities-considerations.md).

La capacidad de EKS para kro utiliza los mismos controladores de kro ascendentes y es totalmente compatible con kro ascendente. Las ResourceGraphDefinitions, las expresiones de CEL y la composición de recursos funcionan de la misma forma. [Para ver la documentación completa de kro y ejemplos, consulte la documentación de kro.](https://kro.run/docs/overview)

## Ruta de migración
<a name="_migration_path"></a>

Puede migrar de kro autoadministrado a la capacidad administrada sin tiempo de inactividad.

**importante**  
Antes de migrar, asegúrese de que el controlador de kro autoadministrado ejecute la misma versión que la capacidad de EKS para kro. Compruebe la versión de la capacidad en la consola de EKS o mediante `aws eks describe-capability` y, a continuación, actualice la instalación autoadministrada para que coincida. De este modo, se evitan problemas de compatibilidad durante la migración.

1. Actualice el controlador de kro autoadministrado para utilizar `kube-system` en las asignaciones de elección de líderes:

   ```
   helm upgrade --install kro \
     oci://ghcr.io/awslabs/kro/kro-chart \
     --namespace kro \
     --set leaderElection.namespace=kube-system
   ```

   De este modo, se traslada la asignación del controlador a `kube-system`, lo que permite que la capacidad administrada se coordine con él.

1. Cree la capacidad de kro en el clúster (consulte [Creación de una capacidad de kro](create-kro-capability.md)).

1. La capacidad administrada reconoce las ResourceGraphDefinitions e instancias y se encarga de la conciliación.

1. Reduzca verticalmente o elimine de forma gradual las implementaciones de kro autoadministrado:

   ```
   helm uninstall kro --namespace kro
   ```

Este enfoque permite que ambos controladores coexistan de forma segura durante la migración. La capacidad administrada adopta automáticamente las ResourceGraphDefinitions e instancias que antes administraba kro autoadministrado, lo que garantiza una conciliación continua sin conflictos.

## Siguientes pasos
<a name="_next_steps"></a>
+  [Creación de una capacidad de kro](create-kro-capability.md): creación de un recurso con la capacidad de kro
+  [Conceptos de kro](kro-concepts.md): descripción de los conceptos de kro y la composición de recursos

# Solución de problemas de capacidades de EKS
<a name="capabilities-troubleshooting"></a>

En este tema, se proporciona una guía general de solución de problemas para las capacidades de EKS, lo que incluye las comprobaciones de estado de las capacidades, los problemas comunes y los enlaces a la solución de problemas específicos de las capacidades.

**nota**  
Las capacidades de EKS son completamente administradas y se ejecutan fuera del clúster. No tiene acceso a los registros ni a los espacios de nombres de los controladores. La solución de problemas se centra en el estado de la capacidad, el estado de los recursos y la configuración.

## Enfoque general para la solución de problemas
<a name="_general_troubleshooting_approach"></a>

Al solucionar problemas de las capacidades de EKS, siga este enfoque general:

1.  **Compruebe el estado de la capacidad**: utilice `aws eks describe-capability` para ver el estado de la capacidad y los problemas de estado.

1.  **Compruebe el estado de los recursos**: compruebe los eventos y las condiciones de estado de los recursos de Kubernetes (CRD) que ha creado.

1.  **Revise los permisos de IAM**: asegúrese de que el rol de capacidad tenga los permisos necesarios.

1.  **Compruebe la configuración**: compruebe que la configuración específica de la capacidad sea correcta.

## Comprobación de estado de la capacidad
<a name="_check_capability_health"></a>

Todas las capacidades de EKS proporcionan información sobre el estado a través de la consola de EKS y la API `describe-capability`.

 **Consola**:

1. Abra la consola de Amazon EKS en https://console.aws.amazon.com/eks/home\$1/clusters.

1. Seleccione el nombre del clúster.

1. Seleccione la pestaña **Observabilidad**.

1. Elija **Supervisar clúster**.

1. Seleccione la pestaña **Capacidades** para ver el estado de todas las capacidades.

La pestaña Capacidades muestra lo siguiente:
+ Nombre y tipo de capacidad
+ Estado actual
+ Problemas de estado, con descripción

 ** AWS CLI**:

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

La respuesta incluye:
+  **estado**: estado actual de la capacidad (`CREATING`, `ACTIVE`, `UPDATING`, `DELETING`, `CREATE_FAILED`, `UPDATE_FAILED`)
+  **estado**: información sobre el estado, incluidos los problemas detectados por la capacidad

## Estados de capacidad comunes
<a name="_common_capability_statuses"></a>

 **CREANDO**: Se está configurando la capacidad.

 **ACTIVA**: la capacidad está en ejecución y lista para usarse. Si los recursos no funcionan según lo esperado, compruebe el estado de los recursos y los permisos de IAM.

 **ACTUALIZANDO**: se están aplicando cambios en la configuración. Espere a que el estado vuelva a ser `ACTIVE`.

 **CREATE\$1FAILED** o **UPDATE\$1FAILED**: la configuración o la actualización detectaron un error. Consulte la sección sobre el estado para obtener más información. Causas comunes:
+ Falta la política de confianza del rol de IAM o no se encuentra
+ El rol de IAM no existe o no se puede acceder a él
+ Problemas de acceso al clúster
+ Parámetros de configuración no válidos

## Comprobación del estado de los recursos de Kubernetes
<a name="_verify_kubernetes_resource_status"></a>

Las capacidades de EKS crean y administran definiciones de recursos personalizados (CRD) de Kubernetes en el clúster. Al solucionar problemas, compruebe el estado de los recursos que creó:

```
# List resources of a specific type
kubectl get resource-kind -A

# Describe a specific resource to see conditions and events
kubectl describe resource-kind
         resource-name -n namespace

# View resource status conditions
kubectl get resource-kind
         resource-name -n namespace -o jsonpath='{.status.conditions}'

# View events related to the resource
kubectl get events --field-selector involvedObject.name=resource-name -n namespace
```

Las condiciones de estado de los recursos proporcionan información sobre:
+ Si el recurso está listo
+ Cualquier error encontrado
+ Estado de conciliación actual

## Revisión de los permisos de IAM y el acceso al clúster
<a name="_review_iam_permissions_and_cluster_access"></a>

Muchos problemas de las capacidades se deben a problemas con los permisos de IAM o a la falta de una configuración de acceso al clúster. Compruebe los permisos del rol de capacidad y las entradas de acceso al clúster.

### Comprobación de los roles de IAM
<a name="_check_iam_role_permissions"></a>

Compruebe que el rol de capacidad tenga los permisos necesarios:

```
# List attached managed policies
aws iam list-attached-role-policies --role-name my-capability-role

# List inline policies
aws iam list-role-policies --role-name my-capability-role

# Get specific policy details
aws iam get-role-policy --role-name my-capability-role --policy-name policy-name

# View the role's trust policy
aws iam get-role --role-name my-capability-role --query 'Role.AssumeRolePolicyDocument'
```

La política de confianza debe permitir la entidad principal de servicio `capabilities.eks.amazonaws.com`:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

### Comprobación de las entradas y políticas de acceso de EKS
<a name="_check_eks_access_entries_and_access_policies"></a>

Todas las capacidades requieren entradas de acceso y políticas de acceso de EKS adecuadas en el clúster en el que operan.

 **Compruebe que la entrada de acceso exista**:

```
aws eks list-access-entries \
  --cluster-name my-cluster \
  --region region-code
```

Busque el ARN del rol de capacidad en la lista. Si falta, la capacidad no puede acceder al clúster.

 **Compruebe las políticas de acceso adjuntas a la entrada**:

```
aws eks list-associated-access-policies \
  --cluster-name my-cluster \
  --principal-arn arn:aws:iam::111122223333:role/my-capability-role \
  --region region-code
```

Todas las capacidades requieren políticas de acceso adecuadas:
+  **ACK**: necesita permisos para crear y administrar los recursos de Kubernetes.
+  **kro**: necesita permisos para crear y administrar los recursos de Kubernetes.
+  **Argo CD**: necesita permisos para crear y administrar aplicaciones, así como entradas de acceso en clústeres de destino remotos para implementaciones de varios clústeres.

 **Para las implementaciones de varios clústeres de Argo CD**:

Si se implementa en clústeres remotos, compruebe que el rol de capacidad tenga una entrada de acceso en cada clúster de destino:

```
# Check Access Entry on target cluster
aws eks describe-access-entry \
  --cluster-name target-cluster \
  --principal-arn arn:aws:iam::111122223333:role/argocd-capability-role \
  --region region-code
```

Si falta la entrada de acceso en un clúster de destino, Argo CD no podrá implementar aplicaciones en él. Consulte [Registro de clústeres de destino](argocd-register-clusters.md) para obtener información detallada sobre la configuración.

## Solución de problemas específicos de la capacidad
<a name="_capability_specific_troubleshooting"></a>

Para obtener una guía detallada de solución de problemas específica para cada tipo de capacidad:
+  [Solución de problemas con capacidades de ACK](ack-troubleshooting.md): solución de problemas relacionados con la creación de recursos de ACK, los permisos de IAM y el acceso entre cuentas
+  [Solución de problemas con capacidades de Argo CD](argocd-troubleshooting.md): solución de problemas de sincronización de aplicaciones, autenticación de repositorios e implementaciones de varios clústeres
+  [Solución de problemas con capacidades de kro](kro-troubleshooting.md): solución de problemas de ResourceGraphDefinitions, expresiones de CEL y permisos de RBAC

## Problemas comunes en todas las capacidades
<a name="_common_issues_across_all_capabilities"></a>

### La capacidad se ha bloqueado en el estado CREANDO
<a name="_capability_stuck_in_creating_state"></a>

Si una capacidad permanece en el estado `CREATING` durante más tiempo del esperado:

1. Verifique el estado de la capacidad para identificar problemas específicos en la consola (**Observabilidad** > **Supervisar clúster** > pestaña **Capacidades**) o mediante la CLI de AWS.

   ```
   aws eks describe-capability \
     --region region-code \
     --cluster-name my-cluster \
     --capability-name my-capability-name \
     --query 'capability.health'
   ```

1. Compruebe si el rol de IAM existe y tiene la política de confianza correcta.

1. Asegúrese de que el clúster sea accesible y esté en buen estado.

1. Compruebe si hay algún problema en el clúster que pueda impedir la configuración de la capacidad.

### Los recursos no se crean o actualizan
<a name="_resources_not_being_created_or_updated"></a>

Si la capacidad es `ACTIVE`, pero los recursos no se crean o actualizan:

1. Compruebe el estado del recurso para ver si hay condiciones de error.

1. Compruebe los permisos de IAM para los servicios de AWS (ACK) o repositorios (Argo CD) específicos.

1. Compruebe los permisos de RBAC para crear recursos subyacentes (kro).

1. Revise las especificaciones de los recursos para ver si hay errores de validación.

### El estado de la capacidad muestra problemas
<a name="_capability_health_shows_issues"></a>

Si `describe-capability` muestra problemas de estado:

1. Lea atentamente las descripciones de los problemas, ya que suelen indicar el problema específico.

1. Aborde la causa raíz (permisos de IAM, errores de configuración, etc.).

1. La capacidad se recuperará automáticamente una vez que se resuelva el problema.

## Siguientes pasos
<a name="_next_steps"></a>
+  [Uso de recursos de capacidades](working-with-capabilities.md): administración de los recursos de la capacidad
+  [Solución de problemas con capacidades de ACK](ack-troubleshooting.md): solución de problemas específicos de ACK
+  [Solución de problemas con capacidades de Argo CD](argocd-troubleshooting.md): solución de problemas específicos de Argo CD
+  [Solución de problemas con capacidades de kro](kro-troubleshooting.md): solución de problemas específicos de kro
+  [Consideraciones sobre la seguridad para las capacidades de EKS](capabilities-security.md): prácticas recomendadas de seguridad para capacidades