Comment empêcher que les règles des groupes de sécurité, les écouteurs ou d'autres modifications ne soient répercutées sur un équilibreur de charge dans Amazon EKS ?

Lecture de 5 minute(s)
0

Lorsque j'essaie d'apporter des modifications à mon équilibreur de charge pour Amazon Elastic Kubernetes Service (Amazon EKS), les modifications sont automatiquement annulées.

Brève description

Lorsque vous utilisez AWS Load Balancer Controller pour créer un service d'équilibrage de charge ou une ressource d'entrée, le contrôleur configure de nombreux paramètres par défaut. Cela inclut tous les paramètres que vous ne spécifiez pas dans le fichier manifeste, tels qu'un chemin de vérification de l'état, un délai d'expiration par défaut ou des règles de groupe de sécurité.

Toutefois, vous pouvez utiliser un appel d'API AWS pour modifier directement la configuration par défaut. Vous pouvez effectuer cet appel d'API depuis la console Amazon Elastic Compute Cloud (Amazon EC2), l'interface de la ligne de commande AWS (AWS CLI) ou un autre outil tiers. Dans ce cas, le contrôleur rétablit ces modifications à leurs valeurs d'origine lors de la prochaine réconciliation du cluster. Pour plus d'informations, consultez Contrôleurs et réconciliation sur le site Web de l'API Kubernetes Cluster.

Les problèmes suivants se produisent fréquemment en raison de modifications annulées de l'équilibreur de charge dans Amazon EKS :

  • Les règles de groupe de sécurité personnalisées de l'équilibreur de charge reviennent automatiquement à 0.0.0.0/0, sinon elles disparaissent.
  • L'équilibreur de charge supprime ou ajoute automatiquement des règles d'écoute.
  • Les valeurs de délai d'inactivité personnalisées reviennent automatiquement aux valeurs par défaut.
  • Le certificat revient automatiquement à la version précédente.
  • Vous ne pouvez pas mettre à jour le chemin de vérification de l'état car Amazon EKS a rétabli ses valeurs.
  • Amazon EKS modifie les rôles via les propriétés de l'équilibreur de charge.

Pour résoudre ces problèmes, déterminez d'abord pourquoi votre équilibreur de charge a effectué ces modifications. Plus précisément, recherchez l'appel d'API pertinent pour la ressource modifiée et l'outil qui a effectué l'appel. Implémentez ensuite vos modifications dans le fichier manifeste.

Remarque : Dans la résolution suivante, un « équilibreur de charge » fait référence à un service d'équilibrage de charge, tel que Network Load Balancer ou Classic Load Balancer. Un équilibreur de charge peut également être une ressource d'entrée, telle qu'un équilibreur de charge d'application.

Résolution

Pour définir l'état attendu d'un équilibreur de charge, vous devez spécifier les modifications à apporter aux annotations du fichier manifeste. Dans le cas contraire, les annotations forcent les modifications à revenir aux valeurs inchangées par défaut.

Si vous essayez d'utiliser un appel d'API AWS pour modifier directement ces valeurs, le contrôleur considère qu'il s'agit d'une modification hors bande. Lors de la réconciliation suivante, le contrôleur rétablit les modifications à leurs valeurs d'origine afin de les synchroniser avec la configuration du manifeste de votre service Kubernetes. Selon l'attribut rétabli par le contrôleur, cela peut entraîner une longue interruption de votre service.

AWS Load Balancer Controller utilise plusieurs chemins logiques pour la réconciliation. Les scénarios suivants peuvent entraîner le redémarrage des pods aws-load-balancer-controller :

  • Une mise à niveau du plan de contrôle, du nœud de travail ou de la plate-forme
  • Une actualisation de l'instance en raison de problèmes sous-jacents tels qu'une panne matérielle ou des problèmes de santé
  • Toute activité qui entraîne un appel d'API de mise à jour, de suppression ou de correction sur les pods du contrôleur
  • Rapprochement automatique et périodique
    Remarque : Par défaut, la période de réconciliation du contrôleur est d'une heure. Toutefois, cette fonctionnalité ne fonctionne pas sur les versions 2.4.7 et antérieures d'Amazon EKS.

Dans ces cas, AWS Load Balancer Controller initie le rapprochement, et votre équilibreur de charge fait référence à la configuration du fichier manifeste la plus récente. Si vous avez précédemment apporté des modifications à votre équilibreur de charge via un appel d'API, ces modifications sont annulées.

Identifier la source des modifications

Trouvez l'appel d'API qui se rapporte à la ressource mise à jour. Recherchez dans AWS CloudTrail la période pendant laquelle les modifications se sont produites. Pour tous les appels d'API AWS Load Balancer, consultez la référence de l'API Elastic Load Balancing (ELB). Pour les appels d'API Amazon EC2, consultez la référence de l'API Amazon EC2.

Par exemple, si le contrôleur annule les règles SecurityGroup, vous voyez que l'API RevokeSecurityGroupIngress est invoquée. Vous pouvez ensuite utiliser l'événement CloudTrail correspondant pour identifier l'utilisateur de l'API. Si le contrôleur utilise des rôles WorkerNode, le rôle de nœud qui a effectué l'appel d'API s'affiche :

....
"type": "AssumedRole",
"arn": "arn:aws:sts::***********:assumed-role/eksctl-mycluster-NodeInstanceRole/i-***********",
"sessionContext": {
    "sessionIssuer": {
        "type": "Role",
        "arn": "arn:aws:iam::***********:role/eksctl-mycluster-nodegr-NodeInstanceRole",
        "userName": "eksctl-mycluster-nodegr-NodeInstanceRole"
    },
    ...
    eventName ": "
    RevokeSecurityGroupIngress ",
    "userAgent": "elbv2.k8s.aws/v2.4.5 aws-sdk-go/1.42.27 (go1.19.3; linux; amd64)",
    "requestParameters": {
        "groupId": "sg-****",
        "ipPermissions": {
            "items": [{
                        "ipProtocol": "tcp",
                        "fromPort": 443,
                        "toPort": 443,
                        "groups": {},
                        "ipRanges": {
                            "items": [{
                                "cidrIp": "0.0.0.0/0"
                            }]
                        }]

Si vous utilisez des rôles dédiés pour AWS Load Balancer Controller, le rôle AWS Identity and Access Management (IAM) du compte de service s'affiche.

Évitez les modifications indésirables

N'apportez aucune modification hors bande à aucun paramètre de votre équilibreur de charge. Cela inclut les modifications apportées à la console Amazon EC2, à l'AWS CLI ou à tout outil qui appelle directement les API AWS.

Par exemple, vous souhaitez mettre à jour les règles du groupe de sécurité. Utilisez les annotations .spec.loadBalancerSourceRanges ou service.beta.kubernetes.io/load-balancer-source-ranges. Vous pouvez utiliser ces annotations pour restreindre les adresses IP CIDR d'un équilibreur de charge. Pour plus d'informations sur ces annotations, consultez la section Contrôle d'accès sur le site Web GitHub d'AWS Load Balancer Controller.

Utilisez uniquement les annotations appropriées dans le fichier manifeste pour mettre à jour les valeurs de délai d'expiration, les chemins de vérification de l'état, les ARN des certificats et d'autres propriétés. Pour toutes les annotations de service et d'entrée prises en charge, consultez la section Annotations de service et annotations d'entrée sur le site Web GitHub d'AWS Load Balancer Controller.

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an