Come posso impedire che le regole del gruppo di sicurezza, gli ascoltatori o altre modifiche vengano ripristinati su un sistema di bilanciamento del carico in Amazon EKS?

5 minuti di lettura
0

Quando provo ad apportare modifiche al mio sistema di bilanciamento del carico per Amazon Elastic Kubernetes Service (Amazon EKS), le modifiche vengono ripristinate automaticamente.

Breve descrizione

Quando usi AWS Load Balancer Controller per creare un servizio di bilanciamento del carico o una risorsa in ingresso, il controller configura molti parametri predefiniti. Ciò include tutti i parametri che non specifichi nel file manifesto, come un percorso di controllo dell'integrità, un timeout predefinito o le regole del gruppo di sicurezza.

Tuttavia, puoi utilizzare una chiamata API AWS per modificare direttamente la configurazione predefinita. Puoi effettuare questa chiamata API dalla console Amazon Elastic Compute Cloud (Amazon EC2), dall'interfaccia della linea di comando AWS (AWS CLI) o da un altro strumento di terze parti. In questo caso, il controller ripristina queste modifiche ai valori originali durante la successiva riconciliazione del cluster. Per ulteriori informazioni, consulta Controllers and Reconciliation sul sito Web Kubernetes Cluster API.

I seguenti problemi si verificano in genere a causa di modifiche annullate al sistema di bilanciamento del carico in Amazon EKS:

  • Le regole personalizzate del gruppo di sicurezza del sistema di bilanciamento del carico tornano automaticamente a 0.0.0.0/0 o scompaiono.
  • Il sistema di bilanciamento del carico elimina o aggiunge automaticamente le regole dell'ascoltatore.
  • I valori di timeout di inattività personalizzati tornano automaticamente ai valori predefiniti.
  • Il certificato torna automaticamente alla versione precedente.
  • Non puoi aggiornare il percorso di controllo dell'integrità perché Amazon EKS ne ha ripristinato i valori.
  • Amazon EKS modifica i ruoli tramite le proprietà del sistema di bilanciamento del carico.

Per risolvere questi problemi, stabilisci innanzitutto perché il tuo sistema di bilanciamento del carico ha apportato queste modifiche. In particolare, trova la chiamata API pertinente per la risorsa modificata e lo strumento che ha effettuato la chiamata. Quindi, implementa le tue modifiche nel file manifesto.

Nota: nella risoluzione seguente, "load balancer" si riferisce a un servizio di bilanciamento del carico, come Network Load Balancer o Classic Load Balancer. In alternativa, un sistema di bilanciamento del carico può essere una risorsa in ingresso, come Application Load Balancer.

Risoluzione

Per definire lo stato previsto di un sistema di bilanciamento del carico, è necessario specificare le modifiche nelle annotazioni del file manifesto. In caso contrario, le annotazioni forzano le modifiche a ripristinare i valori predefiniti e invariati.

Se provi a utilizzare una chiamata API AWS per modificare direttamente questi valori, il controller considera questa modifica fuori banda. Durante la riconciliazione successiva, il controller ripristina le modifiche ai valori originali per sincronizzarle con la configurazione del manifesto del servizio Kubernetes. A seconda dell'attributo che il controller ripristina, ciò potrebbe comportare lunghi tempi di inattività del servizio.

AWS Load Balancer Controller utilizza più percorsi logici per la riconciliazione. I seguenti scenari potrebbero causare il riavvio dei pod aws-load-balancer-controller:

  • Un aggiornamento per il piano di controllo (control plane), il nodo worker o la piattaforma
  • Aggiornamento di un'istanza a causa di problemi sottostanti come guasti hardware o problemi di integrità
  • Qualsiasi attività che comporti una chiamata API di aggiornamento, eliminazione o patch sui pod del controller
  • Riconciliazione automatica e periodica
    Nota: per impostazione predefinita, il periodo di riconciliazione del controller è di 1 ora. Tuttavia, questa funzionalità non è disponibile nelle versioni 2.4.7 e precedenti di Amazon EKS.

In questi casi, AWS Load Balancer Controller avvia la riconciliazione e il sistema di bilanciamento del carico fa riferimento alla configurazione del file manifesto più recente. Se in precedenza hai apportato modifiche al tuo sistema di bilanciamento del carico tramite una chiamata API, tali modifiche vengono ripristinate.

Identifica la fonte delle modifiche

Trova la chiamata API relativa alla risorsa aggiornata. Cerca in AWS CloudTrail l'intervallo di tempo in cui sono state apportate le modifiche. Per tutte le chiamate API AWS Load Balancer, consulta il riferimento API Elastic Load Balancing (ELB). Per le chiamate API Amazon EC2, consulta il riferimento API Amazon EC2.

Ad esempio, se il controller ripristina le regole di SecurityGroup, viene richiamata l'API RevokeSecurityGroupIngress. È quindi possibile utilizzare l'evento CloudTrail corrispondente per identificare l'utente dell'API. Se il controller utilizza i ruoli WorkerNode, viene visualizzato il ruolo del nodo che ha effettuato la chiamata API:

....
"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"
                            }]
                        }]

Se utilizzi ruoli dedicati per AWS Load Balancer Controller, vedrai il ruolo AWS Identity and Access Management (IAM) dell'account di servizio.

Evita modifiche indesiderate

Non apportare modifiche fuori banda a nessun parametro del tuo sistema di bilanciamento del carico. Ciò include modifiche dalla console Amazon EC2, dall'interfaccia della linea di comando di AWS o da qualsiasi strumento che richiami direttamente le API AWS.

Ad esempio, desideri aggiornare le regole del gruppo di sicurezza. Usa le annotazioni .spec.loadBalancerSourceRanges o service.beta.kubernetes.io/load-balancer-source-ranges. È possibile utilizzare queste annotazioni per limitare gli indirizzi IP CIDR per un sistema di bilanciamento del carico. Per ulteriori informazioni su queste annotazioni, consulta Controllo degli accessi sul sito Web GitHub di AWS Load Balancer Controller.

Utilizza solo le annotazioni appropriate nel file manifesto per aggiornare i valori di timeout, i percorsi di controllo dell'integrità, gli ARN dei certificati e altre proprietà. Per tutti i servizi e le annotazioni in ingresso supportati, consulta Annotazioni di servizio e Annotazioni in ingresso sul sito Web GitHub di AWS Load Balancer Controller.

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa