View a markdown version of this page

Creare e IngressClass configurare un Application Load Balancer - Amazon EKS

Contribuisci a migliorare questa pagina

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Per contribuire a questa guida per l'utente, scegli il GitHub link Modifica questa pagina su che si trova nel riquadro destro di ogni pagina.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Creare e IngressClass configurare un Application Load Balancer

La modalità automatica di EKS automatizza le attività di routine per il bilanciamento del carico, inclusa l’esposizione delle app del cluster a Internet.

AWS suggerisce di utilizzare Application Load Balancer (ALB) per gestire il traffico HTTP e HTTPS. Gli Application Load Balancer possono instradare le richieste in base al contenuto della richiesta. Per ulteriori informazioni sugli Application Load Balancer, consulta What is Elastic Load Balancing?

La modalità automatica di EKS crea e configura Application Load Balancer (ALB). Ad esempio, EKS Auto Mode crea un load balancer quando si crea un oggetto Ingress Kubernetes e lo configura per indirizzare il traffico verso il carico di lavoro del cluster.

Panoramica

  1. Crea un carico di lavoro da esporre a Internet.

  2. Crea una IngressClassParams risorsa, specificando valori di configurazione AWS specifici come il certificato da utilizzare e le sottoreti VPC. SSL/TLS

  3. Creare una risorsa IngressClass, specificando che modalità automatica di EKS sarà il controller della risorsa.

  4. Crea una Ingress risorsa che associ un percorso e una porta HTTP a un carico di lavoro del cluster.

La modalità automatica di EKS creerà un Application Load Balancer che punta al carico di lavoro specificato nella risorsa Ingress, utilizzando la configurazione del bilanciatore del carico specificata nella risorsa IngressClassParams.

Prerequisiti

  • La modalità automatica di EKS su un cluster Amazon EKS

  • Kubectl configurato per connettersi al cluster

    • Puoi usare kubectl apply -f <filename> per applicare i file di configurazione di esempio YAML riportati di seguito al cluster.

Nota

La modalità automatica di EKS richiede i tag di sottorete per identificare le sottoreti pubbliche e private.

Se hai creato il cluster con eksctl, disponi già di questi tag.

Informazioni su come Assegnazione di tag alle sottoreti per la modalità automatica EKS.

Fase 1: Creare un carico di lavoro

Per iniziare, crea un carico di lavoro da esporre a Internet. Può trattarsi di qualsiasi risorsa di Kubernetes che serve il traffico HTTP, ad esempio un’implementazione o un servizio.

Questo esempio utilizza un semplice servizio HTTP chiamato service-2048 che ascolta sulla porta 80. Creare questo servizio e la sua implementazione applicando il seguente manifesto, 2048-deployment-service.yaml:

--- apiVersion: apps/v1 kind: Deployment metadata: name: deployment-2048 spec: selector: matchLabels: app.kubernetes.io/name: app-2048 replicas: 2 template: metadata: labels: app.kubernetes.io/name: app-2048 spec: containers: - image: public.ecr.aws/l6m2t8p7/docker-2048:latest imagePullPolicy: Always name: app-2048 ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: service-2048 spec: ports: - port: 80 targetPort: 80 protocol: TCP type: NodePort selector: app.kubernetes.io/name: app-2048

Applica la configurazione al cluster:

kubectl apply -f 2048-deployment-service.yaml

Le risorse sopra elencate verranno create nel namespace predefinito. Puoi verificarlo eseguendo il comando seguente:

kubectl get all -n default

Fase 2: Creazione IngressClassParams

Crea un IngressClassParams oggetto per specificare opzioni di configurazione AWS specifiche per Application Load Balancer. In questo esempio, creiamo una risorsa IngressClassParams denominata alb (che verrà utilizzata nella fase successiva) che specifica lo schema del bilanciatore del carico come internet-facing in un file chiamato alb-ingressclassparams.yaml.

apiVersion: eks.amazonaws.com/v1 kind: IngressClassParams metadata: name: alb spec: scheme: internet-facing

Applica la configurazione al cluster:

kubectl apply -f alb-ingressclassparams.yaml

Fase 3: Creazione IngressClass

Crea un IngressClass modulo che faccia riferimento ai valori di configurazione AWS specifici impostati nella IngressClassParams risorsa in un file denominatoalb-ingressclass.yaml. Annotare il nome della IngressClass. In questo esempio, sia IngressClass che IngressClassParams sono denominati alb.

Utilizzare l’annotazione is-default-class per controllare se le risorse Ingress devono utilizzare questa classe per impostazione predefinita.

apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb annotations: # Use this annotation to set an IngressClass as Default # If an Ingress doesn't specify a class, it will use the Default ingressclass.kubernetes.io/is-default-class: "true" spec: # Configures the IngressClass to use EKS Auto Mode controller: eks.amazonaws.com/alb parameters: apiGroup: eks.amazonaws.com kind: IngressClassParams # Use the name of the IngressClassParams set in the previous step name: alb

Per ulteriori informazioni sulle opzioni di configurazione, consultare IngressClassParams Riferimento.

Applica la configurazione al cluster:

kubectl apply -f alb-ingressclass.yaml

Fase 4: Creare Ingress

Creare una risorsa Ingress in un file denominato alb-ingress.yaml. Lo scopo di questa risorsa è associare percorsi e porte sull’Application Load Balancer ai carichi di lavoro del cluster. Per questo esempio, creiamo una risorsa Ingress denominata 2048-ingress che instrada il traffico verso un servizio denominato service-2048 sulla porta 80.

Per ulteriori informazioni sulla configurazione di questa risorsa, consultare Ingress nella documentazione su Kubernetes.

apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: 2048-ingress spec: # this matches the name of IngressClass. # this can be omitted if you have a default ingressClass in cluster: the one with ingressclass.kubernetes.io/is-default-class: "true" annotation ingressClassName: alb rules: - http: paths: - path: /* pathType: ImplementationSpecific backend: service: name: service-2048 port: number: 80

Applica la configurazione al cluster:

kubectl apply -f alb-ingress.yaml

Fase 5: Controllare lo stato

Utilizza kubectl per trovare lo stato di Ingress. Prima che il bilanciatore del carico sia disponibile, potrebbero essere necessari alcuni minuti.

Utilizza il nome della risorsa Ingress impostata nella fase precedente. Ad esempio:

kubectl get ingress 2048-ingress

Una volta che la risorsa è pronta, recuperare il nome di dominio del bilanciatore del carico.

kubectl get ingress 2048-ingress -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'

Per visualizzare il servizio in un browser Web, esaminate la porta e il percorso specificati nella Ingress risorsa.

Fase 6: Eliminazione

Per eliminare il bilanciatore del carico, utilizza il seguente comando:

kubectl delete ingress 2048-ingress kubectl delete ingressclass alb kubectl delete ingressclassparams alb

EKS Auto Mode eliminerà automaticamente il load balancer associato nel tuo AWS account.

IngressClassParams Riferimento

La tabella seguente elenca i campi che è possibile impostare in una IngressClassParams risorsa. Le impostazioni si applicano a tutti gli ingressi che utilizzano. IngressClass

Campo Description Valore di esempio

scheme

Definisce se l’ALB è interno o esposto a Internet

internet-facing

loadBalancerName

Imposta il nome dell'ALB. Il nome può contenere fino a 32 caratteri. Sostituisce l'annotazione. alb.ingress.kubernetes.io/load-balancer-name

my-alb

namespaceSelector

Limita i namespace che possono utilizzarlo IngressClass

environment: prod

group.name

Raggruppa più ingressi per condividere un singolo ALB

retail-apps

ipAddressType

Imposta il tipo di indirizzo IP per l'ALB. I valori validi sono ipv4, dualstack e dualstack-without-public-ipv4.

dualstack

subnets.ids

Elenco di ID di sottorete per l’implementazione di ALB

subnet-xxxx, subnet-yyyy

subnets.matchTags

Filtri di tag per selezionare le sottoreti per ALB. Ogni filtro ha un key e un elenco di. values

key: Environment, values: [prod]

certificateARNs

ARN di certificati SSL da utilizzare

arn:aws: acm:region:account:certificate/id

sslPolicy

Imposta la politica di sicurezza per i listener HTTPS. Sostituisce l'annotazione. alb.ingress.kubernetes.io/ssl-policy

ELBSecurityPolicy-TLS13-1-2-2021-06

inboundCIDRs

Blocchi CIDR autorizzati ad accedere all'ALB. Sostituisce l'annotazione. alb.ingress.kubernetes.io/inbound-cidrs

10.0.0.0/16, 192.168.0.0/24

prefixListsIDs

ID degli elenchi di prefissi gestiti a cui è consentito accedere all'ALB. Sostituisce l'annotazione. alb.ingress.kubernetes.io/security-group-prefix-lists

pl-00000000, pl-11111111

targetType

Imposta il tipo di destinazione per i gruppi target. I valori validi sono instance e ip. Il valore predefinito è ip.

instance

tags

Tag personalizzati per AWS le risorse

Environment: prod, Team: platform

loadBalancerAttributes

Attributi specifici del bilanciatore del carico

idle_timeout.timeout_seconds: 60

listeners

Imposta gli attributi dei listener sui listener definiti dai tuoi Ingresses. Ogni voce corrisponde a un ascoltatore con port e protocol (HTTPoHTTPS) ed elenca attributes come e coppie. key value Questo campo non crea ascoltatori. Sostituisce l'alb.ingress.kubernetes.io/listener-attributes.${Protocol}-${Port}annotazione per la stessa chiave di attributo.

port: 443, protocol: HTTPS, attributes: routing.http.response.server.enabled: "false"

minimumLoadBalancerCapacity.capacityUnits

Riserva una capacità minima per l'ALB, in unità di capacità di bilanciamento del carico (LCU). Impostato su per 0 rimuovere la prenotazione. Sostituisce l'annotazione. alb.ingress.kubernetes.io/minimum-load-balancer-capacity

1000

ipamConfiguration.ipv4IPAMPoolId

ID del pool di Amazon VPC IP Address Manager (IPAM) utilizzato da un ALB con connessione a Internet per i suoi indirizzi IPv4 pubblici. Sostituisce l'annotazione. alb.ingress.kubernetes.io/ipam-ipv4-pool-id

ipam-pool-0123456789abcdef0

Considerazioni

  • Non è possibile utilizzare Annotations su e IngressClass per configurare i sistemi di bilanciamento del carico con la modalità automatica EKS. IngressClass la configurazione deve essere effettuata tramite. IngressClassParams Tuttavia, è possibile utilizzare le annotazioni sulle singole risorse Ingress per configurare il comportamento del sistema di bilanciamento del carico (ad esempio alb.ingress.kubernetes.io/security-group-prefix-lists o). alb.ingress.kubernetes.io/conditions.*

  • Per impostare ListenerAttribute i valori per tutti gli Ingress in un IngressClass, usa il campo in. listeners IngressClassParams Per ulteriori informazioni, consulta IngressClassParams Riferimento.

  • È necessario aggiornare il ruolo IAM del cluster per abilitare la propagazione dei tag da Kubernetes alle risorse di Load Balancer. AWS Per ulteriori informazioni, consulta Personalizzato AWS tag per le risorse EKS Auto.

  • Per informazioni sull'associazione delle risorse a EKS Auto Mode o al Load Balancer Controller AWS autogestito, vedere. Materiale di riferimento per le migrazioni

  • Per informazioni sulla risoluzione dei problemi con i bilanciatori del carico, consulta Risoluzione dei problemi della modalità automatica di EKS.

  • Per ulteriori considerazioni sull’utilizzo della funzionalità di bilanciamento del carico della modalità automatica di EKS, consulta Sistema di bilanciamento del carico.

Le tabelle seguenti forniscono un confronto dettagliato delle modifiche IngressClassParams, delle annotazioni di Ingress e delle TargetGroupBinding configurazioni per EKS Auto Mode. Queste tabelle evidenziano le principali differenze tra la capacità di bilanciamento del carico della modalità automatica di EKS e il controller del bilanciatore del carico open source, comprese le modifiche alla versione dell’API, le funzionalità obsolete e i nomi dei parametri aggiornati.

IngressClassParams

Precedente Novità Description

elbv2.k8s.aws/v1beta1

eks.amazonaws.com/v1

Modifica alla versione dell’API

spec.certificateArn

spec.certificateARNs

Supporto per più ARN dei certificati

spec.subnets.tags

spec.subnets.matchTags

Schema di corrispondenza delle sottoreti modificato

spec.listeners.listenerAttributes

spec.listeners.attributes

Campo rinominato per gli attributi del listener

spec.PrefixListsIDs

spec.prefixListsIDs

È supportata solo l'prefixListsIDsortografia

spec.sslRedirectPort

Non supportata

Usa l'alb.ingress.kubernetes.io/ssl-redirectannotazione sugli oggetti Ingress

spec.wafv2AclArn

Non supportata

Utilizzate l'alb.ingress.kubernetes.io/wafv2-acl-arnannotazione sugli oggetti Ingress

spec.wafv2AclName

Non supportata

Utilizzate l'alb.ingress.kubernetes.io/wafv2-acl-nameannotazione sugli oggetti Ingress

Annotazioni di ingresso

Precedente Novità Description

kubernetes.io/ingress.class

Non supportata

Utilizzare spec.ingressClassName su oggetti di ingresso

alb.ingress.kubernetes.io/group.name

Non supportata

Specifica i gruppi solo in IngressClass

alb.ingress.kubernetes.io/waf-acl-id

Non supportata

Usare invece WAF v2

alb.ingress.kubernetes.io/web-acl-id

Non supportata

Usare invece WAF v2

alb.ingress.kubernetes.io/dry-run-plan

Non supportata

Dry-run il piano non è attualmente supportato

alb.ingress.kubernetes.io/create-acm-cert

Non supportata

La creazione di certificati ACM non è attualmente supportata

alb.ingress.kubernetes.io/acm-pca-arn

Non supportata

ACM PCA ARN non è attualmente supportato

alb.ingress.kubernetes.io/auth-type: oidc

Supportato con RBAC aggiuntivo

Concedi al controller del load balancer get l'accesso all'OIDC. Secret Per ulteriori informazioni, consulta Concedi al controller di bilanciamento del carico EKS Auto Mode l'accesso a un segreto specifico.

TargetGroupBinding

Precedente Novità Description

elbv2.k8s.aws/v1beta1

eks.amazonaws.com/v1

Modifica alla versione dell’API

spec.targetType facoltativo

spec.targetType obbligatorio

Specifica esplicita del tipo di destinazione

spec.networking.ingress.from

Non supportata

Non supporta più NLB senza gruppi di sicurezza

Per utilizzare la TargetGroupBinding funzionalità personalizzata, devi contrassegnare il gruppo target con il tag eks:eks-cluster-name con il nome del cluster per concedere al controller le autorizzazioni IAM necessarie. Tieni presente che il controller eliminerà il gruppo di destinazione quando la risorsa o il cluster vengono eliminati TargetGroupBinding .