Déployer des clusters privés avec un accès Internet limité - Amazon EKS

Aidez à améliorer cette page

Pour contribuer à ce guide de l’utilisateur, cliquez sur le lien Modifier cette page sur GitHub qui se trouve dans le volet droit de chaque page.

Déployer des clusters privés avec un accès Internet limité

Cette rubrique décrit comment déployer un cluster Amazon EKS qui est déployé sur le cloud AWS, mais qui ne dispose pas d’accès Internet sortant. Si vous disposez d’un cluster local sur AWS Outposts, consultez Créez des nœuds Amazon Linux sur AWS Outposts, plutôt que cette rubrique.

Si vous n’êtes pas familier avec la mise en réseau Amazon EKS, consultez Démystifier la mise en réseau des clusters pour les composants master Amazon EKS. Si votre cluster ne dispose pas d’un accès Internet sortant, il doit répondre aux exigences suivantes :

Exigences en matière d’architecture de cluster

  • Votre cluster doit extraire les images d’un registre de conteneurs situé dans votre VPC. Vous pouvez créer un registre de conteneurs Amazon Elastic Container Registry dans votre VPC et y copier des images de conteneurs pour que vos nœuds puissent les extraire. Pour de plus amples informations, consultez Copier une image de conteneur d'un référentiel vers un autre référentiel.

  • Votre cluster doit avoir un accès privé au point de terminaison activé. Ceci est nécessaire pour que les nœuds s'enregistrent auprès du point de terminaison du cluster. L'accès public au point de terminaison est facultatif. Pour de plus amples informations, consultez Point de terminaison du serveur d’API du cluster.

Exigences relatives aux nœuds

  • Les nœuds Linux et Windows autogérés doivent inclure les arguments de démarrage suivants avant leur lancement. Ces arguments contournent l’introspection Amazon EKS et ne nécessitent pas d’accès à l’API Amazon EKS depuis le VPC.

    1. Déterminez la valeur du point de terminaison de votre cluster à l’aide de la commande suivante. Remplacez my-cluster par le nom de votre cluster.

      aws eks describe-cluster --name my-cluster --query cluster.endpoint --output text

      L'exemple qui suit illustre un résultat.

      https://EXAMPLE108C897D9B2F1B21D5EXAMPLE.sk1.region-code.eks.amazonaws.com
    2. Déterminez la valeur de l’autorité de certification de votre cluster à l’aide de la commande suivante. Remplacez my-cluster par le nom de votre cluster.

      aws eks describe-cluster --name my-cluster --query cluster.certificateAuthority --output text

      La sortie renvoyée est une longue chaîne.

    3. Remplacez cluster-endpoint et certificate-authority dans les commandes suivantes par les valeurs renvoyées dans la sortie des commandes précédentes. Pour plus d'informations sur la spécification des arguments d'amorçage lors du lancement de nœuds autogérés, consultez Créer des nœuds Amazon Linux autogérés et Créer des nœuds Microsoft Windows autogérés.

      • Pour les nœuds Linux :

        --apiserver-endpoint cluster-endpoint --b64-cluster-ca certificate-authority

        Pour des arguments supplémentaires, consultez le script d'amorçage sur GitHub.

      • Pour les nœuds Windows :

        Note

        Si vous utilisez un CIDR de service personnalisé, vous devez le spécifier à l’aide du paramètre -ServiceCIDR. Sinon, la résolution DNS pour les pods dans le cluster échouera.

        -APIServerEndpoint cluster-endpoint -Base64ClusterCA certificate-authority

        Pour des arguments supplémentaires, consultez Paramètres de configuration du script d'amorçage.

  • Le aws-auth ConfigMap de votre cluster doit être créé à partir de votre VPC. Pour plus d'informations sur la création et l'ajout d'entrées dans la ConfigMap aws-auth, entrez eksctl create iamidentitymapping --help dans votre terminal. Si le ConfigMap n’existe pas sur votre serveur, eksctl le créera lorsque vous utiliserez la commande pour ajouter un mappage d’identité.

Exigences relatives aux pods

  • Identité du pod : les pods configurés avec l’identité du pod EKS obtiennent leurs informations d’identification à partir de l’API EKS Auth. S’il n’y a pas d’accès Internet sortant, vous devez créer et utiliser un point de terminaison d’un VPC pour l’API EKS Auth : com.amazonaws.region-code.eks-auth. Pour plus d’informations sur les points de terminaison d’un VPC EKS et EKS Auth, consultez Accéder à Amazon EKS à l’aide d’AWS PrivateLink.

  • IRSA : les pods configurés avec les rôles IAM pour les comptes de service obtiennent des informations d’identification à partir d’un appel d’API du Service de jetons de sécurité AWS (AWS STS) S’il n’y a pas d’accès Internet sortant, vous devez créer et utiliser un point de terminaison d’un VPC AWS STS dans votre VPC. La plupart des kit SDK AWS v1 utilisent par défaut le point de terminaison global AWS STS (sts.amazonaws.com), qui n’utilise pas le point de terminaison d’un VPC AWS STS. Pour utiliser le point de terminaison d’un VPC AWS STS, vous devrez peut-être configurer votre kit SDK afin qu’il utilise le point de terminaison régional AWS STS (sts.region-code.amazonaws.com). Pour de plus amples informations, consultez Configurer le point de terminaison du service de jetons de sécurité AWS pour un compte de service.

  • Les sous-réseaux VPC de votre cluster doivent disposer d’un point de terminaison d’un VPC pour tous les services AWS auxquels vos pods doivent accéder. Pour plus d'informations, consultez Accès à un service AWS à l'aide du point de terminaison d'un VPC d'interface. Certains services et points de terminaison couramment utilisés sont répertoriés dans le tableau suivant. Pour obtenir la liste complète des points de terminaison, consultez Services AWS qui s’intègrent à AWS PrivateLink dans le Guide AWS PrivateLink.

    Nous vous recommandons d’activer les noms DNS privés pour vos points de terminaison d’un VPC, afin que les charges de travail puissent continuer à utiliser les points de terminaison des services publics AWS sans problème.

    Service Point de terminaison

    Amazon EC2

    com.amazonaws.region-code.ec2

    Amazon Elastic Container Registry (pour extraire des images de conteneurs)

    com.amazonaws.region-code.ecr.api, com.amazonaws.region-code.ecr.dkr, and com.amazonaws.region-code.s3

    Application Load Balancers et Network Load Balancers Amazon

    com.amazonaws.region-code.elasticloadbalancing

    (Facultatif) AWS X-Ray (requis pour le traçage envoyé à AWS X-Ray)

    com.amazonaws.region-code.xray

    (Facultatif) Amazon SSM (requis pour l’agent SSM pour les tâches de gestion des nœuds. Alternative à SSH)

    com.amazonaws.region-code.ssm

    Amazon CloudWatch Logs (requis pour les journaux des nœuds et des pods envoyés à Amazon CloudWatch Logs)

    com.amazonaws.region-code.logs

    Service de jetons de sécurité AWS (requis lors de l’utilisation de rôles IAM pour les comptes de service)

    com.amazonaws.region-code.sts

    Amazon EKS Auth (requis lors de l’utilisation d’associations d’identités du pod)

    com.amazonaws.region-code.eks-auth

    Amazon EKS

    com.amazonaws.region-code.eks

  • Tous les nœuds autogérés doivent être déployés sur des sous-réseaux qui disposent des points de terminaison de l'interface VPC dont vous avez besoin. Si vous créez un groupe de nœuds gérés, le groupe de sécurité des points de terminaison de l'interface VPC doit autoriser le CIDR pour les sous-réseaux, ou vous devez ajouter le groupe de sécurité des nœuds créé au groupe de sécurité des points de terminaison de l'interface VPC.

  • Stockage EFS : si vos pods utilisent des volumes Amazon EFS, avant de déployer le Stockage d’un système de fichiers Elastic avec Amazon EFS, le fichier kustomization.yaml du pilote doit être modifié afin de configurer les images de conteneur pour qu’elles utilisent la même région AWS que le cluster Amazon EKS.

  • Route53 ne prend pas en charge AWS PrivateLink. Vous ne pouvez pas gérer les enregistrements DNS Route53 à partir d’un cluster Amazon EKS privés. Cela a un impact sur Kubernetes external-dns.

  • Si vous utilisez l’AMI optimisée EKS, vous devez activer le point de terminaison ec2 dans le tableau ci-dessus. Vous pouvez également définir manuellement le nom DNS du nœud. L’AMI optimisée utilise les API EC2 pour définir automatiquement le nom DNS du nœud.

  • Vous pouvez utiliser AWS Load Balancer Controller pour déployer des AWS Application Load Balancers (ALB) et des Network Load Balancers sur votre cluster privé. Lors de son déploiement, vous devez utiliser les indicateurs de ligne de commande pour définir enable-shield, enable-waf et enable-wafv2 sur false. La détection de certificats avec des noms d’hôte provenant d’objets Ingress n’est pas prise en charge. En effet, le contrôleur doit accéder à AWS Certificate Manager, qui ne dispose pas d’un point de terminaison d’un VPC.

    Le contrôleur prend en charge les Network Load Balancers avec des cibles IP, qui sont nécessaires pour une utilisation avec Fargate. Pour plus d’informations, consultez Routage du trafic des applications et du trafic HTTP avec des équilibreurs de charge Application Load Balancer et Créer un équilibreur de charge de réseau.

  • Cluster Autoscaler est pris en charge. Lors du déploiement de pods Cluster Autoscaler, assurez-vous que la ligne de commande inclut --aws-use-static-instance-list=true. Pour plus d'informations, consultez Utiliser la liste d'instances statiques sur GitHub. Le composant master VPC doit également inclure le point de terminaison d’un VPC AWS STS et le point de terminaison d’un VPC d’autoscaling.

  • Certains logiciels de conteneurs utilisent des appels d’API qui accèdent au service de mesure AWS Marketplace pour surveiller l’utilisation. Les clusters privés n’autorisent pas ces appels, vous ne pouvez donc pas utiliser ces types de conteneurs dans les clusters privés.