Tutorial: Implemente en Amazon EKS con CodePipeline - AWS CodePipeline

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Tutorial: Implemente en Amazon EKS con CodePipeline

Este tutorial le ayuda a crear una acción de implementación CodePipeline que despliegue el código en un clúster que haya configurado en Amazon EKS.

La acción de EKS admite clústeres de EKS públicos y privados. Los clústeres privados son el tipo recomendado por EKS, pero se admiten ambos.

nota

Como parte de la creación de una canalización en la consola, CodePipeline para los artefactos se utilizará un depósito de artefactos de S3. (Es diferente del bucket que se usa para una acción de origen de S3). Si el depósito de artefactos de S3 está en una cuenta diferente a la de tu canalización, asegúrate de que el depósito de artefactos de S3 pertenezca a una Cuentas de AWS persona segura y fiable.

nota

Esta acción utiliza la CodeBuild informática CodePipeline gestionada para ejecutar comandos en un entorno de compilación. Si ejecuta la acción de Comandos, se le cobrarán cargos por separado en AWS CodeBuild.

nota

La acción de implementación de EKS solo está disponible para canalizaciones de tipo V2.

Requisitos previos

Para poder usar este tutorial para crear su propia canalización de implementación continua debe tener instalados algunos recursos. Esto es lo que necesita para empezar:

nota

Todos estos recursos deben crearse en la misma AWS región.

  • Un repositorio de control de código fuente (se utiliza en este tutorial GitHub) donde agregará un deployment.yaml archivo de muestra.

  • Debe usar un rol de CodePipeline servicio existente que actualizará con los permisos para esta acción que Paso 3: Actualizar la política de roles de CodePipeline servicio en IAM se indican a continuación. Los permisos necesarios dependen del tipo de clúster que cree. Para obtener más información, consulte Permisos para las políticas de roles de servicio.

  • Una imagen funcional y una etiqueta de repositorio que haya insertado en ECR o en su repositorio de imágenes.

Una vez satisfechos estos requisitos previos, puede continuar con el tutorial y crear su canalización de implementación continua.

Paso 1: creación de un clúster en Amazon EKS (opcional)

Si lo desea, puede crear un clúster de EKS con un punto de conexión público o privado.

En los siguientes pasos, se crea un clúster público o privado en EKS. Este paso es opcional si ya ha creado el clúster.

Creación de un clúster público en Amazon EKS

En este paso, se crea un clúster en EKS.

Creación de un clúster público
  1. Abra la consola de EKS y elija Crear clúster.

  2. En Nombre, asigne un nombre al clúster. Elija Next (Siguiente).

  3. Seleccione Create (Crear).

Creación de un clúster privado en Amazon EKS

Si decide crear un clúster con un punto de conexión privado, asegúrese de asociar únicamente las subredes privadas y de que estas tengan conexión a Internet.

Realice los cinco pasos secundarios siguientes para crear un clúster con un punto de conexión privado.

Creación de una VPC en la consola
  1. Abra la consola de VPC y elija Crear VPC.

  2. En Configuración de VPC, seleccione VPC y más.

  3. Elija crear una subred pública y cuatro subredes privadas. Seleccione Creación de VPC.

  4. En la página de subredes, elija Privada.

Determinación de las subredes privadas en la VPC
  1. Navegue hasta la VPC y seleccione el ID de VPC para abrir la página de detalles de la VPC.

  2. En la página de detalles de la VPC, elija la pestaña Mapa de recursos.

  3. Vea el diagrama y anote sus subredes privadas. Las subredes se muestran con etiquetas que indican su estado público o privado, y cada subred está asignada a una tabla de enrutamiento.

    Diagrama de consola donde se muestran las subredes y el mapa de recursos de una VPC.

    Tenga en cuenta que en un clúster privado todas las subredes serán privadas.

  4. Cree una subred pública para alojar la puerta de enlace NAT. Solo puede adjuntar una gateway de Internet a una VPC a la vez.

Creación de una puerta de enlace NAT en la subred pública
  1. En la subred pública, cree una puerta de enlace NAT. Navegue hasta la consola de VPC y, a continuación, elija Puertas de enlace de Internet. Elija Crear puerta de enlace de Internet.

  2. En Nombre, escriba el nombre de la puerta de enlace de Internet. Elija Crear puerta de enlace de Internet.

Actualice la tabla de enrutamiento de la subred privada para que dirija el tráfico a la puerta de enlace NAT.

Agregación de la puerta de enlace NAT a las tablas de enrutamiento de las subredes privadas
  1. Navegue hasta la consola de VPC y, a continuación, elija Subredes.

  2. Elija cada subred privada y, a continuación, la tabla de enrutamiento de esa subred en la página de detalles. Elija Editar tabla de enrutamiento.

  3. Actualice la tabla de enrutamiento de la subred privada para que dirija el tráfico de Internet a la puerta de enlace NAT. Seleccione Añadir ruta. Elija Puerta de enlace NAT entre las opciones para agregar. Elija la puerta de enlace de Internet que creó.

  4. Para la subred pública, cree una tabla de enrutamiento personalizada. Verifique que la lista de control de acceso (ACL) de red de la subred pública permita el tráfico de entrada de la subred privada.

  5. Seleccione Save changes (Guardar cambios).

En este paso, se crea un clúster en EKS.

Creación de un clúster privado
  1. Abra la consola de EKS y elija Crear clúster.

  2. En Nombre, asigne un nombre al clúster. Elija Siguiente.

  3. Especifique su VPC y otra información de configuración. Seleccione Crear.

El clúster de EKS puede ser público o privado. Este paso es para clústeres que tienen SOLO un punto de conexión privado. Asegúrese de que el clúster sea privado.

Paso 2: configuración de un clúster privado en Amazon EKS

Este paso solo es aplicable si ha creado un clúster privado. Este paso es para clústeres que tienen SOLO un punto de conexión privado.

Configuración de su clúster
  1. Asocie las subredes privadas únicamente en el clúster de EKS bajo la pestaña Redes. Asocie las subredes privadas capturadas en la sección Determinación de las subredes privadas en la VPC de Paso 1: creación de un clúster en Amazon EKS (opcional).

  2. Asegúrese de que las subredes privadas tengan acceso a Internet, ya que CodePipeline almacenan y recuperan los artefactos del depósito de artefactos de S3 para su canalización.

Paso 3: Actualizar la política de roles de CodePipeline servicio en IAM

En este paso, actualizará un rol de CodePipeline servicio existente, por ejemplocp-service-role, con los permisos necesarios CodePipeline para conectarse a su clúster. Si no dispone de un rol, cree uno.

Actualice su rol de CodePipeline servicio con los siguientes pasos.

Para actualizar su política CodePipeline de roles de servicio
  1. Abra la consola de IAM en https://console.aws.amazon.com/iam/).

  2. En el panel de la consola, elija Roles.

  3. Busque su función CodePipeline de servicio, por ejemplo. cp-service-role

  4. Agregue una nueva política insertada.

  5. En el Editor de políticas, especifique lo siguiente.

    • Para un clúster público, agregue los siguientes permisos.

      JSON
      { "Version":"2012-10-17", "Statement": [ { "Sid": "EksClusterPolicy", "Effect": "Allow", "Action": "eks:DescribeCluster", "Resource": "arn:aws:eks:us-east-1:111122223333:cluster/my-cluster" }, { "Sid": "EksVpcClusterPolicy", "Effect": "Allow", "Action": [ "ec2:DescribeDhcpOptions", "ec2:DescribeNetworkInterfaces", "ec2:DescribeRouteTables", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:DescribeVpcs" ], "Resource": [ "*" ] } ] }
    • Para un clúster privado, agregue los siguientes permisos. Los clústeres privados requerirán permisos adicionales para su VPC, según corresponda.

      JSON
      { "Version":"2012-10-17", "Statement": [ { "Sid": "EksClusterPolicy", "Effect": "Allow", "Action": "eks:DescribeCluster", "Resource": "arn:aws:eks:us-east-1:111122223333:cluster/my-cluster" }, { "Sid": "EksVpcClusterPolicy", "Effect": "Allow", "Action": [ "ec2:DescribeDhcpOptions", "ec2:DescribeNetworkInterfaces", "ec2:DescribeRouteTables", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:DescribeVpcs" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": "ec2:CreateNetworkInterface", "Resource": "*", "Condition": { "StringEqualsIfExists": { "ec2:Subnet": [ "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-03ebd65daeEXAMPLE", "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-0e377f6036EXAMPLE", "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-0db658ba1cEXAMPLE", "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-0db658ba1cEXAMPLE" ] } } }, { "Effect": "Allow", "Action": "ec2:CreateNetworkInterfacePermission", "Resource": "*", "Condition": { "ArnEquals": { "ec2:Subnet": [ "arn:aws:ec2:us-east-1:111122223333:subnet/subnet-03ebd65daeEXAMPLE", "arn:aws:ec2:us-east-1:111122223333:subnet/subnet-0e377f6036EXAMPLE", "arn:aws:ec2:us-east-1:111122223333:subnet/subnet-0db658ba1cEXAMPLE", "arn:aws:ec2:us-east-1:111122223333:subnet/subnet-0db658ba1cEXAMPLE" ] } } }, { "Effect": "Allow", "Action": "ec2:DeleteNetworkInterface", "Resource": "*", "Condition": { "StringEqualsIfExists": { "ec2:Subnet": [ "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-03ebd65daeEXAMPLE", "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-0e377f6036EXAMPLE", "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-0db658ba1cEXAMPLE", "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-0db658ba1cEXAMPLE" ] } } } ] }
  6. Elija Actualizar política.

Paso 4: Cree una entrada de acceso para el rol CodePipeline de servicio

En este paso, crea una entrada de acceso en su clúster que agregará el rol de CodePipeline servicio que actualizó en el paso 3, junto con una política de acceso administrado.

  1. Abra la consola de EKS y navegue hasta el clúster.

  2. Elija la pestaña Acceso.

  3. En Entradas de acceso de IAM, elija Crear entrada de acceso.

  4. En ARN de entidad principal de IAM, introduzca el rol que acaba de actualizar para la acción, como cp-service-role. Elija Siguiente.

  5. En la página Paso 2: agregación de una política de acceso, en Nombre de la política, elija la política administrada para el acceso, como AmazonEKSClusterAdminPolicy. Elija Add Policy (Agregar política). Elija Siguiente.

    nota

    Esta es la política que utiliza la CodePipeline acción para comunicarse con Kubernetes. Como práctica recomendada, para limitar los permisos de la política con privilegio mínimo, en lugar de la política administrativa, asocie una política personalizada.

  6. En la página Revisar, elija Crear.

Paso 5: creación de un repositorio de origen y agregación de los archivos de configuración helm chart

En este paso, se crea un archivo de configuración adecuado para la acción (archivo de manifiesto de Kubernetes o gráfico de Helm) y luego se almacena en el repositorio de origen. Utilice el archivo de configuración adecuado. Para obtener más información, consulta https://kubernetes. io/docs/reference/kubectl/quick-reference/ o https://helm. sh/docs/topics/charts/.

  • Para Kubernetes, utilice un archivo de manifiesto.

  • Para Helm, utilice un gráfico de Helm.

  1. Cree o utilice un GitHub repositorio existente.

  2. Cree una nueva estructura en su repositorio para los archivos de gráfico de Helm, como se muestra en el siguiente ejemplo.

    mychart |-- Chart.yaml |-- charts |-- templates | |-- NOTES.txt | |-- _helpers.tpl | |-- deployment.yaml | |-- ingress.yaml | `-- service.yaml `-- values.yaml
  3. Agregue el archivo en el nivel raíz del repositorio.

Paso 6: creación de una canalización

Usa el CodePipeline asistente para crear las etapas de tu canalización y conectar tu repositorio de origen.

Para crear la canalización
  1. Abre la CodePipeline consola en https://console.aws.amazon.com/codepipeline/.

  2. En la página Bienvenido, Introducción o Canalizaciones, elija Crear canalización.

  3. En la página Paso 1: elección de la opción de creación, en Opciones de creación, seleccione la opción Crear una canalización personalizada. Elija Siguiente.

  4. En Paso 2: elegir la configuración de la canalización, en Nombre de la canalización, escriba MyEKSPipeline.

  5. CodePipeline proporciona tuberías de tipo V1 y V2, que difieren en características y precio. El tipo V2 es el único tipo que puede elegir en la consola. Para obtener más información, consulte Tipos de canalización. Para obtener información sobre los precios de CodePipeline, consulte Precios.

  6. En Rol de servicio, seleccione el rol de servicio que actualizó en el paso 3.

  7. En Advanced settings (Configuración avanzada), deje los valores predeterminados y elija Next (Siguiente).

  8. En la página Paso 3: Añadir la fase de origen, en Source provider, selecciona crear una conexión con tu GitHub repositorio.

  9. En la página Paso 4: agregación de la etapa de compilación, seleccione Omitir.

  10. En la página Paso 5: agregación de la etapa de implementación, elija Amazon EKS.

    Deploy configuration form with Helm selected, showing fields for release name and chart location.
    1. En Tipo de configuración de implementación, elija Helm.

    2. En Ubicación del gráfico de Helm, introduzca el nombre de la versión, como my-release. Para Ubicación del gráfico de Helm, introduzca la ruta de los archivos de gráfico de Helm, como mychart.

    3. Elija Siguiente.

  11. En la página Step 6: Review, revise la configuración de la canalización y elija Create pipeline para crear la canalización.

    Diagrama de consola donde se muestra la ejecución correcta de una canalización con la acción de implementación agregada a la misma
  12. Cuando la canalización se haya ejecutado correctamente, elija Ver detalles para ver los registros de la acción y su salida.