Implementación de un clúster de Amazon EKS en AWS Outposts - Amazon EKS

Ayude a mejorar esta página

¿Quiere contribuir a esta guía del usuario? Desplácese hasta el final de esta página y seleccione Editar esta página en GitHub. Sus contribuciones ayudarán a que nuestra guía del usuario sea mejor para todos.

Implementación de un clúster de Amazon EKS en AWS Outposts

En este tema, se proporciona información general sobre lo que debe tener en cuenta al ejecutar un clúster local en un Outpost. El tema también contiene instrucciones sobre cómo implementar un clúster local en un Outpost.

Consideraciones
importante
  • Estas consideraciones no se replican en la documentación relacionada de Amazon EKS. Si otros temas de la documentación de Amazon EKS entran en conflicto con las consideraciones que se presentan aquí, siga las consideraciones que se indican a continuación.

  • Estas consideraciones están sujetas a modificaciones y pueden cambiar con frecuencia. Por lo tanto, le recomendamos que revise este tema con regularidad.

  • Muchas de las consideraciones son diferentes a las consideraciones para crear un clúster en la Nube de AWS.

  • Los clústeres locales solo admiten bastidores de Outpost. Un único clúster local puede ejecutarse en varios bastidores de Outpost físicos que comprenden un único Outpost lógico. Un único clúster local no puede ejecutarse en varios Outposts lógicos. Cada Outpost lógico tiene un único ARN de Outpost.

  • Los clústeres locales ejecutan y administran el plano de control de Kubernetes en su cuenta en Outpost. No se pueden ejecutar cargas de trabajo en instancias del plano de control de Kubernetes ni modificar los componentes del plano de control de Kubernetes. Estos nodos están administrados por el servicio de Amazon EKS. Los cambios en el plano de control de Kubernetes no persisten a través de las acciones de administración automáticas de Amazon EKS, como la aplicación de parches.

  • Los clústeres locales admiten complementos autoadministrados y grupos de nodos autoadministrados de Amazon Linux. Los complementos Amazon VPC CNI plugin for Kubernetes, kube-proxy y CoreDNS se instalan automáticamente en los clústeres locales.

  • Los clústeres locales requieren el uso de Amazon EBS en Outposts. Su Outpost debe tener Amazon EBS disponible para el almacenamiento del plano de control de Kubernetes.

  • Los clústeres locales usan Amazon EBS en Outposts. Su Outpost debe tener Amazon EBS disponible para el almacenamiento del plano de control de Kubernetes. Los Outposts admiten únicamente volúmenes gp2 de Amazon EBS.

  • Los PersistentVolumes de Kubernetes respaldados por Amazon EBS se admiten mediante el controlador de CSI de Amazon EBS.

Requisitos previos

Cuando se crea un clúster local de Amazon EKS, la entidad principal de IAM que crea el clúster se agrega de manera permanente. La entidad principal de IAM se agrega específicamente a la tabla de autorizaciones RBAC de Kubernetes como administrador. Esta entidad tiene permisos system:masters. La identidad de esta entidad no está visible en la configuración del clúster. Por lo tanto, es importante anotar la entidad que creó el clúster y asegurarse de no eliminarlo nunca. Al principio, solo la entidad principal que creó el servidor puede realizar llamadas al servidor de la API de Kubernetes con kubectl. Si usa la consola para crear el clúster, debe asegurarse de que las mismas credenciales de IAM se encuentren en la cadena de credenciales del SDK de AWS al ejecutar comandos de kubectl en el clúster. Una vez que se crea el clúster, puede conceder acceso a su clúster a otras entidades principales de IAM.

Para crear un clúster local de Amazon EKS

Puede crear un clúster local con eksctl, la AWS Management Console, la AWS CLI, la API de Amazon EKS, los SDK de AWS, AWS CloudFormation o Terraform.

  1. Cree un clúster local.

    eksctl
    Requisito previo

    La versión 0.189.0 o posterior de la herramienta de línea de comandos eksctl instalada en su dispositivo o AWS CloudShell. Para instalar o actualizar eksctl, consulte Instalación en la documentación de eksctl.

    Para crear el clúster con eksctl
    1. Copie los siguientes contenidos en su dispositivo. Reemplace los siguientes valores y, a continuación, ejecute el comando modificado para crear el archivo outpost-control-plane.yaml:

      cat >outpost-control-plane.yaml <<EOF apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-cluster region: region-code version: "1.24" vpc: clusterEndpoints: privateAccess: true id: "vpc-vpc-ExampleID1" subnets: private: outpost-subnet-1: id: "subnet-subnet-ExampleID1" outpost: controlPlaneOutpostARN: arn:aws:outposts:region-code:111122223333:outpost/op-uniqueid controlPlaneInstanceType: m5.large EOF

      Para obtener una lista completa de todas las opciones y valores predeterminados disponibles, consulte Soporte de AWS Outposts y Esquema del archivo de configuración en la documentación de eksctl.

    2. Para crear el clúster, use el archivo de configuración que creó en el paso anterior. eksctl crea una VPC y una subred en su Outpost para implementar el clúster.

      eksctl create cluster -f outpost-control-plane.yaml

      El aprovisionamiento de clústeres tarda varios minutos. Mientras se crea el clúster, aparecen varias líneas de salida. La última línea de salida es similar a la siguiente línea de ejemplo.

      [✓]  EKS cluster "my-cluster" in "region-code" region is ready
    sugerencia

    Para ver la mayoría de las opciones que se pueden especificar al crear un clúster con eksctl, utilice el comando eksctl create cluster --help. Para ver todas las opciones disponibles, puede utilizar un archivo config. Para obtener más información, consulte Uso de archivos de configuración y el esquema de archivos de configuración en la documentación de eksctl. Puede encontrar ejemplos de archivos de configuración en GitHub.

    Eksctl creó automáticamente una entrada de acceso para la entidad principal de IAM (usuario o rol) que creó el clúster y concedió al administrador de la entidad principal de IAM permisos para los objetos de Kubernetes en el clúster. Si no desea que el creador del clúster tenga acceso de administrador a los objetos de Kubernetes en el clúster, agregue el siguiente texto al archivo de configuración anterior: bootstrapClusterCreatorAdminPermissions: false (al mismo nivel que metadata, vpc y outpost). Si agregó la opción, después de crear el clúster, tendrá que crear una entrada de acceso para al menos una entidad principal de IAM; de lo contrario, ninguna entidad principal de IAM tendrá acceso a los objetos de Kubernetes en el clúster.

    AWS Management Console
    Requisito previo

    Una VPC y subred existentes que cumplen con los requisitos de Amazon EKS. Para obtener más información, consulte Creación de una VPC y subredes para clústeres de Amazon EKS en AWS Outposts.

    Para crear el clúster con la AWS Management Console
    1. Si ya tiene un rol de IAM de clúster local o va a crear su clúster con eksctl, puede omitir este paso. Por defecto, eksctl crea un rol.

      1. Ejecute el siguiente comando para crear un archivo de política de confianza JSON de IAM.

        cat >eks-local-cluster-role-trust-policy.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF
      2. Cree el rol de IAM del clúster de Amazon EKS. Para crear un rol de IAM, a la entidad principal de IAM que está creando el rol se le debe asignar la acción iam:CreateRole (permiso).

        aws iam create-role --role-name myAmazonEKSLocalClusterRole --assume-role-policy-document file://"eks-local-cluster-role-trust-policy.json"
      3. Adjunte la política administrada de IAM por Amazon EKS denominada AmazonEKSLocalOutpostClusterPolicy al rol. Para adjuntar una política de IAM a una entidad principal de IAM, se debe asignar una de las siguientes acciones de IAM (permisos) a la entidad principal que adjunta la política: iam:AttachUserPolicy o iam:AttachRolePolicy.

        aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSLocalOutpostClusterPolicy --role-name myAmazonEKSLocalClusterRole
    2. Abra la consola de Amazon EKS en https://console.aws.amazon.com/eks/home#/clusters.

    3. En la parte superior de la pantalla de la consola, asegúrese de haber seleccionado una Región de AWS admitida.

    4. Elija Agregar clúster y, a continuación, elija Crear.

    5. En la página Configurar clúster, rellene o seleccione los valores para los siguientes campos:

      • Ubicación del plano de control deKubernetes: elija AWS Outposts.

      • ID de Outpost: elija el ID del Outpost en el que desea crear su plano de control.

      • Tipo de instancia: seleccione un tipo de instancia. Solo se muestran los tipos de instancias disponibles en su Outpost. En la lista desplegable, cada tipo de instancia describe para cuántos nodos se recomienda el tipo de instancia. Antes de elegir un tipo de instancia, consulte Selección de los tipos de instancias y los grupos de ubicación para los clústeres de Amazon EKS en AWS Outposts en función de consideraciones de capacidad. Todas las réplicas se implementan con el mismo tipo de instancia. Después de crear el clúster, no se puede cambiar el tipo de instancia. Se implementan tres instancias del plano de control. No puede cambiar este número.

      • Nombre: un nombre único para el clúster. Debe ser único en su Cuenta de AWS. El nombre solo puede contener caracteres alfanuméricos (con distinción de mayúsculas y minúsculas) y guiones. Debe comenzar con un carácter alfanumérico y no puede tener más de 100 caracteres. El nombre debe ser único dentro de la Región de AWS y la Cuenta de AWS en las que va a crear el clúster. El nombre debe ser único dentro de la Región de AWS y la Cuenta de AWS en las que va a crear el clúster.

      • Versión de Kubernetes: elija la versión de Kubernetes que desea utilizar para el clúster. Le recomendamos seleccionar la versión más reciente, a menos que necesite usar una versión anterior.

      • Rol de servicio del clúster: elija el rol de IAM del clúster de Amazon EKS que creó en un paso anterior para permitir que el plano de control de Kubernetes administre los recursos de AWS.

      • Acceso de administrador del clúster de Kubernetes: si desea que la entidad principal de IAM (rol o usuario) que está creando el clúster tenga acceso de administrador a los objetos de Kubernetes en el clúster, acepte la opción predeterminada (permitir). Amazon EKS crea una entrada de acceso para la entidad principal de IAM y concede permisos de administrador de clúster a la entrada de acceso. Para obtener más información acerca de las entradas de acceso, consulte Concesión de acceso a los usuarios de IAM a las entradas de acceso de Kubernetes con EKS.

        Si desea que una entidad principal de IAM diferente a la entidad principal que creó el clúster tenga acceso de administrador a los objetos del clúster de Kubernetes, seleccione la opción no permitir. Después de crear el clúster, cualquier entidad principal de IAM que tenga permisos de IAM para crear entradas de acceso puede añadir una entrada de acceso para cualquier entidad principal de IAM que necesite acceder a los objetos del clúster de Kubernetes. Para obtener más información sobre los permisos necesarios de IAM, consulte Acciones definidas por Amazon Elastic Kubernetes Service en la Referencia de autorización de servicios. Si elige la opción de no permitir y no crea ninguna entrada de acceso, ninguna entidad principal de IAM tendrá acceso a los objetos del clúster de Kubernetes.

      • Etiquetas: (opcional) agregue las etiquetas a su clúster. Para obtener más información, consulte Organización de los recursos de Amazon EKS con etiquetas.

      Cuando haya terminado con esta página, seleccione Siguiente.

    6. En la página Especificar red, seleccione valores para los siguientes campos:

      • VPC: elija una VPC existente. La VPC debe tener un número suficiente de direcciones IP disponibles para el clúster, los nodos y otros recursos de Kubernetes que desee crear. La VPC debe cumplir los requisitos de Requisitos y consideraciones de la VPC.

      • Subredes: de forma predeterminada, se preseleccionan todas las subredes disponibles de la VPC especificada en el campo anterior. Las subredes que elija deben cumplir los requisitos de Requisitos y consideraciones de la subred.

        Grupos de seguridad: (opcional) especifique uno o varios grupos de seguridad que desea que Amazon EKS asocie a las interfaces de red que crea. Amazon EKS crea automáticamente un grupo de seguridad que habilita la comunicación entre el clúster y la VPC. Amazon EKS asocia este grupo de seguridad, y el que elija, a las interfaces de red que crea. Para obtener más información acerca del grupo de seguridad de clúster que crea Amazon EKS, consulte Revisión de requisitos de grupos de seguridad de Amazon EKS para clústeres. Puede modificar las reglas del grupo de seguridad del clúster que crea Amazon EKS. Si elige agregar sus propios grupos de seguridad, no puede cambiar los que elija tras la creación del clúster. Para que los hosts en las instalaciones se comuniquen con el punto de conexión del clúster, debe permitir el tráfico saliente desde el grupo de seguridad del clúster. Para los clústeres que no tienen una conexión a Internet de entrada y salida (también conocidos como clústeres privados), debe realizar una de las siguientes acciones:

        • Agregue el grupo de seguridad asociado a los puntos de conexión de VPC requeridos. Para obtener más información acerca de los puntos de conexión requeridos, consulte Puntos de conexión de VPC de interfaz en Acceso de la subred a Servicios de AWS.

        • Modifique el grupo de seguridad que creó Amazon EKS para permitir el tráfico del grupo de seguridad asociado a los puntos de conexión de VPC.

      Cuando haya terminado con esta página, seleccione Siguiente.

    7. En la página Configurar observabilidad, si lo desea, puede elegir qué opciones de métricas y registro de plano de control quiere activar. De forma predeterminada, cada tipo de registro está desactivado.

      Cuando haya terminado con esta página, seleccione Siguiente.

    8. En la página Revisar y crear, revise la información que introdujo o seleccionó en las páginas anteriores. Si necesita realizar cambios, seleccione Edit (Editar). Cuando esté satisfecho, seleccione Create (Crear). El campo Estado muestra CREANDO mientras se aprovisiona el clúster.

      El aprovisionamiento de clústeres tarda varios minutos.

  2. Una vez creado el clúster, puede ver las instancias del plano de control de Amazon EC2 que se crearon.

    aws ec2 describe-instances --query 'Reservations[*].Instances[*].{Name:Tags[?Key==`Name`]|[0].Value}' | grep my-cluster-control-plane

    Un ejemplo de salida sería el siguiente.

    "Name": "my-cluster-control-plane-id1"
    "Name": "my-cluster-control-plane-id2"
    "Name": "my-cluster-control-plane-id3"

    Cada instancia tiene un taint node-role.eks-local.amazonaws.com/control-plane aplicado, de modo que nunca se programen cargas de trabajo en las instancias del plano de control. Para obtener más información sobre las taints, consulte Taints y toleraciones en la documentación de Kubernetes. Amazon EKS supervisa continuamente el estado de los clústeres locales. Realizamos acciones de administración automáticas, como la aplicación de parches de seguridad y la reparación de instancias en mal estado. Cuando los clústeres locales se desconectan de la nube, realizamos acciones para garantizar que el clúster vuelva a un buen estado al volver a conectarse.

  3. Si ha creado el clúster mediante eksctl, puede omitir este paso. eksctl completa este paso. Habilite kubectl para comunicarse con el clúster agregando un nuevo contexto al archivo kubectl config. Para obtener instrucciones acerca de cómo crear y actualizar el archivo, consulte Conexión de kubectl a un clúster de EKS mediante la creación de un archivo kubeconfig.

    aws eks update-kubeconfig --region region-code --name my-cluster

    Un ejemplo de salida sería el siguiente.

    Added new context arn:aws:eks:region-code:111122223333:cluster/my-cluster to /home/username/.kube/config
  4. Para conectarse al servidor de la API de Kubernetes de su clúster local, debe tener acceso a la puerta de enlace local de la subred o conectarse desde la VPC. Para obtener más información acerca de la conexión de un bastidor de Outpost a su red en las instalaciones, consulte Cómo funcionan las puertas de enlace locales para bastidores en la Guía del usuario de AWS Outposts. Si usa el enrutamiento directo de VPC y la subred de Outpost tiene una ruta a la puerta de enlace local, las direcciones IP privadas de las instancias del plano de control de Kubernetes se transmiten automáticamente a través de la red local. El punto de conexión del servidor de la API de Kubernetes del clúster local está alojado en Amazon Route 53 (Route 53). Los servidores de DNS públicos pueden resolver el punto de conexión del servicio de API en las direcciones IP privadas de los servidores de la API de Kubernetes.

    Las instancias del plano de control de Kubernetes de los clústeres locales se configuran con interfaces de red elásticas estáticas con direcciones IP privadas fijas que no cambian a lo largo del ciclo de vida del clúster. Es posible que las máquinas que interactúan con el servidor de API de Kubernetes no tengan conectividad con Route 53 durante desconexiones de red. Si este es el caso, recomendamos configurar /etc/hosts con las direcciones IP privadas estáticas para continuar con las operaciones. También recomendamos configurar servidores de DNS locales y conectarlos a su Outpost. Para obtener más información, consulte la Documentación de AWS Outposts. Ejecute el siguiente comando para confirmar que se ha establecido la comunicación con el clúster.

    kubectl get svc

    Un ejemplo de salida sería el siguiente.

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 28h
  5. (Opcional) Pruebe la autenticación en su clúster local cuando se encuentra desconectado de la Nube de AWS. Para obtener instrucciones, consulte Preparación de los clústeres locales de Amazon EKS en AWS Outposts para las desconexiones de la red.

Recursos internos

Amazon EKS crea los siguientes recursos en su clúster. Los recursos son para uso interno de Amazon EKS. Para que el clúster funcione correctamente, no edite ni modifique estos recursos.

  • Los siguientes Pods de reflejo:

    • aws-iam-authenticator-node-hostname

    • eks-certificates-controller-node-hostname

    • etcd-node-hostname

    • kube-apiserver-node-hostname

    • kube-controller-manager-node-hostname

    • kube-scheduler-node-hostname

  • Los siguientes complementos autoadministrados:

    • kube-system/coredns

    • kube-system/kube-proxy (no se crean hasta que agregue su primer nodo)

    • kube-system/aws-node (no se crea hasta que agregue su primer nodo). Los clústeres locales usan el complemento Amazon VPC CNI plugin for Kubernetes para redes de clústeres. No cambie la configuración de las instancias del plano de control (pods denominados aws-node-controlplane-*). Hay variables de configuración que puede usar para cambiar el valor predeterminado para cuando el complemento crea interfaces de red nuevas. Para obtener más información, consulte la documentación en GitHub.

  • Los siguientes servicios:

    • default/kubernetes

    • kube-system/kube-dns

  • Una PodSecurityPolicy denominada eks.system

  • Una ClusterRole denominada eks:system:podsecuritypolicy

  • Una ClusterRoleBinding denominada eks:system

  • Una PodSecurityPolicy predeterminada

  • Además del grupo de seguridad del clúster, Amazon EKS crea un grupo de seguridad en su Cuenta de AWS llamado eks-local-internal-do-not-use-or-edit-cluster-name-uniqueid. Este grupo de seguridad permite que el tráfico fluya libremente entre los componentes de Kubernetes que se ejecutan en las instancias del plano de control.

Siguientes pasos recomendados: