Aiutaci 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 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à.
Configura Kubernetes Ingress per nodi ibridi
Questo argomento descrive come configurare Kubernetes Ingress per i carichi di lavoro in esecuzione su Amazon EKS Hybrid Nodes. Kubernetes Ingress
AWS supporta AWS Application Load Balancer (ALB) e Cilium for Kubernetes Ingress per carichi di lavoro in esecuzione su nodi ibridi EKS. La decisione di utilizzare ALB o Cilium for Ingress si basa sulla fonte del traffico delle applicazioni. Se il traffico dell'applicazione proviene da una AWS regione, AWS consiglia di utilizzare AWS ALB e il Load AWS Balancer Controller. Se il traffico delle applicazioni proviene dall'ambiente locale locale locale o perimetrale, AWS consiglia di utilizzare le funzionalità Ingress integrate di Cilium, che possono essere utilizzate con o senza l'infrastruttura di bilanciamento del carico nell'ambiente.

AWS Application Load Balancer
Puoi utilizzare AWS Load Balancer Controller e Application Load Balancer (ALB) con il ip
tipo di destinazione per i carichi di lavoro in esecuzione su nodi ibridi. Quando si utilizza il tipo di destinazioneip
, ALB inoltra il traffico direttamente ai pod, aggirando il percorso di rete del livello di servizio. Affinché ALB raggiunga gli obiettivi IP del pod sui nodi ibridi, il CIDR del pod locale deve essere instradabile sulla rete locale. Inoltre, il AWS Load Balancer Controller utilizza webhook e richiede una comunicazione diretta dal piano di controllo EKS. Per ulteriori informazioni, consulta Configurare webhook per nodi ibridi.
Considerazioni
-
Installa il AWS Load Balancer Controller con HelmPer ulteriori informazioni, vedere Indirizza il traffico di applicazioni e HTTP con Application Load Balancer AWS Application Load Balancer e Load Balancer AWS Controller.
-
Consulta Best Practices for Load Balancing per informazioni su come scegliere tra AWS Application Load Balancer AWS e Network Load Balancer.
-
Vedi AWS Load Balancer Controller Ingress annotations per l'elenco delle annotazioni
che possono essere configurate per le risorse Ingress con Application Load Balancer. AWS
Prerequisiti
-
Cilium è stato installato seguendo le istruzioni in. Configurare CNI per nodi ibridi
-
Cilium BGP Control Plane è stato abilitato seguendo le istruzioni contenute in. Configurare Cilium BGP per nodi ibridi Se non si desidera utilizzare BGP, è necessario utilizzare un metodo alternativo per rendere il pod CIDRs locale instradabile sulla rete locale. Se non rendi CIDRs instradabile il pod locale, ALB non sarà in grado di registrarlo o contattare i destinatari IP del pod.
-
Helm è installato nell'ambiente a riga di comando, consulta le istruzioni di Setup Helm per ulteriori informazioni.
Procedura
-
Scarica una policy IAM per il AWS Load Balancer Controller che gli consenta di effettuare chiamate per tuo AWS APIs conto.
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/refs/heads/main/docs/install/iam_policy.json
-
Creare una policy IAM utilizzando le policy scaricate nel passaggio precedente.
aws iam create-policy \ --policy-name AWSLoadBalancerControllerIAMPolicy \ --policy-document file://iam_policy.json
-
Sostituisci il valore per cluster name (
CLUSTER_NAME
), AWS Region (AWS_REGION
) e AWS account ID (AWS_ACCOUNT_ID
) con le tue impostazioni ed esegui il comando seguente.eksctl create iamserviceaccount \ --cluster=CLUSTER_NAME \ --namespace=kube-system \ --name=aws-load-balancer-controller \ --attach-policy-arn=arn:aws:iam::AWS_ACCOUNT_ID:policy/AWSLoadBalancerControllerIAMPolicy \ --override-existing-serviceaccounts \ --region AWS_REGION \ --approve
-
Aggiungi l'archivio di grafici Helm eks-charts e aggiorna il tuo repository Helm locale per assicurarti di avere i grafici più recenti.
helm repo add eks https://aws.github.io/eks-charts
helm repo update eks
-
Installa il AWS Load Balancer Controller. Sostituisci il valore per cluster name (
CLUSTER_NAME
), AWS Region (AWS_REGION
), VPC ID (VPC_ID
) e Load AWS Balancer Controller Helm chart versionAWS_LBC_HELM_VERSION
() con le tue impostazioni ed esegui il comando seguente. Se stai eseguendo un cluster in modalità mista con nodi ibridi e nodi in AWS Cloud, puoi eseguire il AWS Load Balancer Controller sui nodi cloud seguendo le istruzioni riportate all'indirizzo. AWS Controller Load Balancer-
Puoi trovare la versione più recente del grafico Helm eseguendo.
helm search repo eks/aws-load-balancer-controller --versions
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \ -n kube-system \ --version
AWS_LBC_HELM_VERSION
\ --set clusterName=CLUSTER_NAME
\ --set region=AWS_REGION
\ --set vpcId=VPC_ID
\ --set serviceAccount.create=false \ --set serviceAccount.name=aws-load-balancer-controller
-
-
Verifica che il AWS Load Balancer Controller sia stato installato correttamente.
kubectl get -n kube-system deployment aws-load-balancer-controller
NAME READY UP-TO-DATE AVAILABLE AGE aws-load-balancer-controller 2/2 2 2 84s
-
Crea un'applicazione di esempio. L'esempio seguente utilizza l'applicazione di microservizi di esempio Istio Bookinfo
. kubectl apply -f https://raw.githubusercontent.com/istio/istio/refs/heads/master/samples/bookinfo/platform/kube/bookinfo.yaml
-
Crea un file denominato
my-ingress-alb.yaml
con i seguenti contenuti.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress namespace: default annotations: alb.ingress.kubernetes.io/load-balancer-name: "my-ingress-alb" alb.ingress.kubernetes.io/target-type: "ip" alb.ingress.kubernetes.io/scheme: "internet-facing" alb.ingress.kubernetes.io/healthcheck-path: "/details/1" spec: ingressClassName: alb rules: - http: paths: - backend: service: name: details port: number: 9080 path: /details pathType: Prefix
-
Applica la configurazione Ingress al tuo cluster.
kubectl apply -f my-ingress-alb.yaml
-
Il provisioning dell'ALB per la risorsa Ingress potrebbe richiedere alcuni minuti. Una volta effettuato il provisioning dell'ALB, alla risorsa Ingress verrà assegnato un indirizzo che corrisponde al nome DNS della distribuzione ALB. L'indirizzo avrà il formato.
<alb-name>-<random-string>.<region>.elb.amazonaws.com
kubectl get ingress my-ingress
NAME CLASS HOSTS ADDRESS PORTS AGE my-ingress alb * my-ingress-alb-<random-string>.<region>.elb.amazonaws.com 80 23m
-
Accedi al Servizio utilizzando l'indirizzo dell'ALB.
curl -s http//my-ingress-alb-<random-string>.<region>.elb.amazonaws.com:80/details/1 | jq
{ "id": 1, "author": "William Shakespeare", "year": 1595, "type": "paperback", "pages": 200, "publisher": "PublisherA", "language": "English", "ISBN-10": "1234567890", "ISBN-13": "123-1234567890" "details": "This is the details page" }
Panoramica di Cilium Ingress e Cilium Gateway
Le funzionalità Ingress di Cilium sono integrate nell'architettura di Cilium e possono essere gestite con l'API Kubernetes Ingress o l'API Gateway. Se non disponi di risorse Ingress esistenti, ti consigliamo di iniziare con l'API Gateway, AWS poiché è un modo più espressivo e flessibile per definire e gestire le risorse di rete Kubernetes. L'API Kubernetes Gateway
Quando abiliti le funzionalità Ingress o Gateway di Cilium, l'operatore Cilium riconcilia gli oggetti Ingress/Gateway nel cluster e i proxy Envoy su ciascun nodo elaborano il traffico di rete di livello 7 (L7). Cilium non fornisce direttamente l'infrastruttura Ingress/Gateway come i sistemi di bilanciamento del carico. Se si prevede di utilizzare Cilium Ingress/Gateway con un sistema di bilanciamento del carico, è necessario utilizzare gli strumenti del sistema di bilanciamento del carico, in genere un controller Ingress o Gateway, per distribuire e gestire l'infrastruttura del sistema di bilanciamento del carico.
Per il traffico Ingress/Gateway, Cilium gestisce il traffico di rete principale e l'applicazione delle policy L3/L4, mentre i proxy Envoy integrati elaborano il traffico di rete L7. Con Cilium Ingress/Gateway, Envoy è responsabile dell'applicazione delle regole di routing L7, delle politiche e della manipolazione delle richieste, della gestione avanzata del traffico come la suddivisione e il mirroring del traffico e della terminazione e origine del TLS. I proxy Envoy di Cilium vengono distribuiti come proxy separati DaemonSet (cilium-envoy
) per impostazione predefinita, il che consente a Envoy e all'agente Cilium di essere aggiornati, scalati e gestiti separatamente.
Per ulteriori informazioni su come funzionano Cilium Ingress e Cilium Gateway, consultate le pagine Cilium Ingress e Cilium Gateway nella documentazione di Cilium.
Confronto tra Cilium Ingress e Gateway
La tabella seguente riassume le funzionalità di Cilium Ingress e Cilium Gateway a partire dalla versione 1.17.x di Cilium.
Funzionalità | Ingress | Gateway |
---|---|---|
Tipo di servizio LoadBalancer |
Sì |
Sì |
Tipo di servizio NodePort |
Sì |
No1 |
Rete host |
Sì |
Sì |
Sistema di bilanciamento del carico condiviso |
Sì |
Sì |
Sistema di bilanciamento del carico dedicato |
Sì |
N. 2 |
Policy di rete |
Sì |
Sì |
Protocolli |
Livello 7 (HTTP (S), gRPC) |
Livello 7 (HTTP (S), gRPC) 3 |
Passthrough TLS |
Sì |
Sì |
Gestione del traffico |
Routing del percorso e dell'host |
Routing del percorso e dell'host, reindirizzamento e riscrittura degli URL, suddivisione del traffico, modifica dell'intestazione |
2 Supporto Cilium Gateway per sistemi di bilanciamento del carico dedicati (#25567)
3 Supporto Cilium Gateway per (#21929) TCP/UDP
Installa Cilium Gateway
Considerazioni
-
Cilium deve essere configurato con
nodePort.enabled
set totrue
come mostrato negli esempi seguenti. Se si utilizza la funzione di sostituzione kube-proxy di Cilium, non è necessario impostarla su.nodePort.enabled
true
-
Cilium deve essere configurato con
envoy.enabled
set totrue
come mostrato negli esempi seguenti. -
Cilium Gateway può essere distribuito in modalità di bilanciamento del carico (impostazione predefinita) o in modalità rete host.
-
Quando si utilizza Cilium Gateway in modalità load balancer, l'
service.beta.kubernetes.io/aws-load-balancer-type: "external"
annotazione deve essere impostata sulla risorsa Gateway per impedire al provider AWS cloud legacy di creare un Classic Load Balancer for the Service del LoadBalancer tipo che Cilium crea per la risorsa Gateway. -
Quando si utilizza Cilium Gateway in modalità rete host, la modalità Service of type è disabilitata. LoadBalancer La modalità di rete host è utile per gli ambienti che non dispongono di un'infrastruttura di bilanciamento del carico, vedi Rete host per ulteriori informazioni.
Prerequisiti
-
Helm installato nell'ambiente a riga di comando, consulta le istruzioni di Setup Helm.
-
Cilium è stato installato seguendo le istruzioni in. Configurare CNI per nodi ibridi
Procedura
-
Installa le definizioni delle risorse personalizzate dell'API Kubernetes Gateway (). CRDs
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.2.1/config/crd/standard/gateway.networking.k8s.io_gatewayclasses.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.2.1/config/crd/standard/gateway.networking.k8s.io_gateways.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.2.1/config/crd/standard/gateway.networking.k8s.io_httproutes.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.2.1/config/crd/standard/gateway.networking.k8s.io_referencegrants.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.2.1/config/crd/standard/gateway.networking.k8s.io_grpcroutes.yaml
-
Crea un file denominato
cilium-gateway-values.yaml
con i seguenti contenuti. L'esempio seguente configura Cilium Gateway per utilizzare la modalità di bilanciamento del carico predefinita e per utilizzare un proxy separatocilium-envoy
DaemonSet per Envoy configurato per l'esecuzione solo su nodi ibridi.gatewayAPI: enabled: true # uncomment to use host network mode # hostNetwork: # enabled: true nodePort: enabled: true envoy: enabled: true affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: In values: - hybrid
-
Applica il file dei valori Helm al tuo cluster.
helm upgrade cilium oci://public.ecr.aws/eks/cilium/cilium \ --namespace kube-system \ --reuse-values \ --set operator.rollOutPods=true \ --values cilium-gateway-values.yaml
-
Conferma che l'operatore, l'agente e i pod Envoy Cilium siano in funzione.
kubectl -n kube-system get pods --selector=app.kubernetes.io/part-of=cilium
NAME READY STATUS RESTARTS AGE cilium-envoy-5pgnd 1/1 Running 0 6m31s cilium-envoy-6fhg4 1/1 Running 0 6m30s cilium-envoy-jskrk 1/1 Running 0 6m30s cilium-envoy-k2xtb 1/1 Running 0 6m31s cilium-envoy-w5s9j 1/1 Running 0 6m31s cilium-grwlc 1/1 Running 0 4m12s cilium-operator-68f7766967-5nnbl 1/1 Running 0 4m20s cilium-operator-68f7766967-7spfz 1/1 Running 0 4m20s cilium-pnxcv 1/1 Running 0 6m29s cilium-r7qkj 1/1 Running 0 4m12s cilium-wxhfn 1/1 Running 0 4m1s cilium-z7hlb 1/1 Running 0 6m30s
Configura Cilium Gateway
Cilium Gateway è abilitato sugli oggetti Gateway impostando su. gatewayClassName
cilium
Il servizio creato da Cilium per le risorse Gateway può essere configurato con campi sull'oggetto Gateway. Le annotazioni comuni utilizzate dai controller Gateway per configurare l'infrastruttura di bilanciamento del carico possono essere configurate con il campo dell'oggetto Gateway. infrastructure
Quando si utilizza l' LoadBalancer IPAM di Cilium (vedere l'esempio inTipo di servizio LoadBalancer), l'indirizzo IP da utilizzare per il Service of type LoadBalancer può essere configurato nel campo dell'oggetto Gateway. addresses
Per ulteriori informazioni sulla configurazione del gateway, consulta la specifica dell'API Kubernetes
apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: my-gateway spec: gatewayClassName: cilium infrastructure: annotations: service.beta.kubernetes.io/... service.kuberentes.io/... addresses: - type: IPAddress value: <LoadBalancer IP address> listeners: ...
Cilium e le specifiche Kubernetes Gateway supportano le risorse, Gateway GatewayClass,, e. HTTPRoute GRPCRoute ReferenceGrant
-
Vedi HTTPRoute
e GRPCRoute specifiche per l'elenco dei campi disponibili. -
Vedi gli esempi nella Implementa Cilium Gateway sezione seguente e gli esempi nella documentazione di Cilium
per come utilizzare e configurare queste risorse.
Implementa Cilium Gateway
-
Crea un'applicazione di esempio. L'esempio seguente utilizza l'applicazione di microservizi di esempio Istio Bookinfo
. kubectl apply -f https://raw.githubusercontent.com/istio/istio/refs/heads/master/samples/bookinfo/platform/kube/bookinfo.yaml
-
Conferma che l'applicazione funzioni correttamente.
kubectl get pods
NAME READY STATUS RESTARTS AGE details-v1-766844796b-9965p 1/1 Running 0 81s productpage-v1-54bb874995-jmc8j 1/1 Running 0 80s ratings-v1-5dc79b6bcd-smzxz 1/1 Running 0 80s reviews-v1-598b896c9d-vj7gb 1/1 Running 0 80s reviews-v2-556d6457d-xbt8v 1/1 Running 0 80s reviews-v3-564544b4d6-cpmvq 1/1 Running 0 80s
-
Crea un file denominato
my-gateway.yaml
con i seguenti contenuti. L'esempio seguente utilizza l'service.beta.kubernetes.io/aws-load-balancer-type: "external"
annotazione per impedire al provider AWS cloud legacy di creare un Classic Load Balancer per il servizio del LoadBalancer tipo creato da Cilium per la risorsa Gateway.--- apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: my-gateway spec: gatewayClassName: cilium infrastructure: annotations: service.beta.kubernetes.io/aws-load-balancer-type: "external" listeners: - protocol: HTTP port: 80 name: web-gw allowedRoutes: namespaces: from: Same --- apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: http-app-1 spec: parentRefs: - name: my-gateway namespace: default rules: - matches: - path: type: PathPrefix value: /details backendRefs: - name: details port: 9080
-
Applica la risorsa Gateway al tuo cluster.
kubectl apply -f my-gateway.yaml
-
Conferma che la risorsa Gateway e il servizio corrispondente sono stati creati. In questa fase, si prevede che il
ADDRESS
campo della risorsa Gateway non sia popolato con un indirizzo IP o un nome host e che al servizio di tipo LoadBalancer relativo alla risorsa Gateway non sia assegnato un indirizzo IP o un nome host.kubectl get gateway my-gateway
NAME CLASS ADDRESS PROGRAMMED AGE my-gateway cilium True 10s
kubectl get svc cilium-gateway-my-gateway
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE cilium-gateway-my-gateway LoadBalancer 172.16.227.247 <pending> 80:30912/TCP 24s
-
Procedi Tipo di servizio LoadBalancer alla configurazione della risorsa Gateway per utilizzare un indirizzo IP allocato da Cilium Load Balancer IPAM Rete host e/o alla configurazione della risorsa Gateway per NodePort utilizzare o ospitare indirizzi di rete. Tipo di servizio NodePort
Installa Cilium Ingress
Considerazioni
-
Cilium deve essere configurato con
nodePort.enabled
set totrue
come mostrato negli esempi seguenti. Se si utilizza la funzione di sostituzione kube-proxy di Cilium, non è necessario impostarla su.nodePort.enabled
true
-
Cilium deve essere configurato con
envoy.enabled
set totrue
come mostrato negli esempi seguenti. -
Con
ingressController.loadbalancerMode
set todedicated
, Cilium crea servizi dedicati per ogni risorsa Ingress. ConingressController.loadbalancerMode
set toshared
, Cilium crea un servizio condiviso di tipo LoadBalancer per tutte le risorse Ingress nel cluster. Quando si utilizza la modalità di bilanciamento delshared
carico, le impostazioni per il servizio condiviso comelabels
,annotations
type
, eloadBalancerIP
sono configurate nellaingressController.service
sezione dei valori Helm. Per ulteriori informazioni, consulta il riferimento ai valori di Cilium Helm. -
Con
ingressController.default
set totrue
, Cilium è configurato come controller Ingress predefinito per il cluster e creerà voci Ingress anche quando noningressClassName
è specificato nelle risorse Ingress. -
Cilium Ingress può essere distribuito in modalità di bilanciamento del carico (impostazione predefinita), porta nodo o rete host. Quando Cilium è installato in modalità rete host, le modalità Servizio di tipo LoadBalancer e Servizio di tipo sono disabilitate. NodePort Per ulteriori informazioni, consulta Rete host.
-
Imposta sempre su
ingressController.service.annotations
service.beta.kubernetes.io/aws-load-balancer-type: "external"
nei valori Helm per impedire al provider AWS cloud legacy di creare un Classic Load Balancer per il serviziocilium-ingress
predefinito creato dal grafico CiliumHelm.
Prerequisiti
-
Helm installato nell'ambiente a riga di comando, consulta le istruzioni di Setup Helm.
-
Cilium è stato installato seguendo le istruzioni in. Configurare CNI per nodi ibridi
Procedura
-
Crea un file denominato
cilium-ingress-values.yaml
con i seguenti contenuti. L'esempio seguente configura Cilium Ingress per utilizzare ladedicated
modalità di bilanciamento del carico predefinita e per utilizzare un proxy Envoy separato configuratocilium-envoy
DaemonSet per l'esecuzione solo su nodi ibridi.ingressController: enabled: true loadbalancerMode: dedicated service: annotations: service.beta.kubernetes.io/aws-load-balancer-type: "external" nodePort: enabled: true envoy: enabled: true affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: In values: - hybrid
-
Applica il file dei valori Helm al tuo cluster.
helm upgrade cilium oci://public.ecr.aws/eks/cilium/cilium \ --namespace kube-system \ --reuse-values \ --set operator.rollOutPods=true \ --values cilium-ingress-values.yaml
-
Conferma che l'operatore, l'agente e i pod Envoy Cilium siano in funzione.
kubectl -n kube-system get pods --selector=app.kubernetes.io/part-of=cilium
NAME READY STATUS RESTARTS AGE cilium-envoy-5pgnd 1/1 Running 0 6m31s cilium-envoy-6fhg4 1/1 Running 0 6m30s cilium-envoy-jskrk 1/1 Running 0 6m30s cilium-envoy-k2xtb 1/1 Running 0 6m31s cilium-envoy-w5s9j 1/1 Running 0 6m31s cilium-grwlc 1/1 Running 0 4m12s cilium-operator-68f7766967-5nnbl 1/1 Running 0 4m20s cilium-operator-68f7766967-7spfz 1/1 Running 0 4m20s cilium-pnxcv 1/1 Running 0 6m29s cilium-r7qkj 1/1 Running 0 4m12s cilium-wxhfn 1/1 Running 0 4m1s cilium-z7hlb 1/1 Running 0 6m30s
Configura Cilium Ingress
Cilium Ingress è abilitato sugli oggetti Ingress impostando su. ingressClassName
cilium
I servizi che Cilium crea per le risorse Ingress possono essere configurati con annotazioni sugli oggetti Ingress quando si utilizza la modalità di bilanciamento del dedicated
carico e nella configurazione Cilium/Helm quando si utilizza la modalità di bilanciamento del carico. shared
Queste annotazioni vengono comunemente utilizzate dai controller Ingress per configurare l'infrastruttura del bilanciamento del carico o altri attributi del Servizio come il tipo di servizio, la modalità di bilanciamento del carico, le porte e il passthrough TLS. Le annotazioni chiave sono descritte di seguito. Per un elenco completo delle annotazioni supportate, consulta le annotazioni Cilium Ingress
Annotazione | Descrizione |
---|---|
|
|
|
|
|
|
|
Elenco di indirizzi IP da allocare da Cilium IPAM LoadBalancer |
Cilium e le specifiche Kubernetes Ingress supportano regole di corrispondenza specifiche per Exact, Prefix e Implementation per i percorsi Ingress. Cilium supporta regex come regola di corrispondenza specifica per l'implementazione. Per ulteriori informazioni, consulta gli esempi di tipi e priorità dei percorsi di Ingress
Di seguito è riportato un esempio di oggetto Cilium Ingress.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress annotations: service.beta.kuberentes.io/... service.kuberentes.io/... spec: ingressClassName: cilium rules: ...
Implementa Cilium Ingress
-
Crea un'applicazione di esempio. L'esempio seguente utilizza l'applicazione di microservizi di esempio Istio Bookinfo
. kubectl apply -f https://raw.githubusercontent.com/istio/istio/refs/heads/master/samples/bookinfo/platform/kube/bookinfo.yaml
-
Conferma che l'applicazione funzioni correttamente.
kubectl get pods
NAME READY STATUS RESTARTS AGE details-v1-766844796b-9965p 1/1 Running 0 81s productpage-v1-54bb874995-jmc8j 1/1 Running 0 80s ratings-v1-5dc79b6bcd-smzxz 1/1 Running 0 80s reviews-v1-598b896c9d-vj7gb 1/1 Running 0 80s reviews-v2-556d6457d-xbt8v 1/1 Running 0 80s reviews-v3-564544b4d6-cpmvq 1/1 Running 0 80s
-
Crea un file denominato
my-ingress.yaml
con i seguenti contenuti. L'esempio seguente utilizza l'service.beta.kubernetes.io/aws-load-balancer-type: "external"
annotazione per impedire al provider AWS cloud legacy di creare un Classic Load Balancer per il servizio del LoadBalancer tipo creato da Cilium per la risorsa Ingress.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress namespace: default annotations: service.beta.kubernetes.io/aws-load-balancer-type: "external" spec: ingressClassName: cilium rules: - http: paths: - backend: service: name: details port: number: 9080 path: /details pathType: Prefix
-
Applica la risorsa Ingress al tuo cluster.
kubectl apply -f my-ingress.yaml
-
Conferma che la risorsa Ingress e il servizio corrispondente sono stati creati. In questa fase, si prevede che il
ADDRESS
campo della risorsa Ingress non sia popolato con un indirizzo IP o un nome host e che al servizio condiviso o dedicato, tipo LoadBalancer per la risorsa Ingress, non sia assegnato un indirizzo IP o un nome host.kubectl get ingress my-ingress
NAME CLASS HOSTS ADDRESS PORTS AGE my-ingress cilium * 80 8s
Per la modalità di bilanciamento del carico
shared
kubectl -n kube-system get svc cilium-ingress
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE cilium-ingress LoadBalancer 172.16.217.48 <pending> 80:32359/TCP,443:31090/TCP 10m
Per la modalità di bilanciamento del carico
dedicated
kubectl -n default get svc cilium-ingress-my-ingress
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE cilium-ingress-my-ingress LoadBalancer 172.16.193.15 <pending> 80:32088/TCP,443:30332/TCP 25s
-
Procedi Tipo di servizio LoadBalancer alla configurazione della risorsa Ingress per utilizzare un indirizzo IP allocato da Cilium Load Balancer IPAM Tipo di servizio NodePort e/o Rete host alla configurazione della risorsa Ingress per utilizzare o ospitare gli indirizzi di rete. NodePort
Tipo di servizio LoadBalancer
Infrastruttura di bilanciamento del carico esistente
Per impostazione predefinita, sia per Cilium Ingress che per Cilium Gateway, Cilium crea uno o più servizi Kubernetes di tipo per le risorse Ingress/Gateway. LoadBalancer Gli attributi dei servizi creati da Cilium possono essere configurati tramite le risorse Ingress e Gateway. Quando si creano risorse Ingress o Gateway, l'indirizzo IP o i nomi host esposti esternamente per Ingress o Gateway vengono allocati dall'infrastruttura di bilanciamento del carico, che in genere viene fornita da un controller Ingress o Gateway.
Molti controller Ingress e Gateway utilizzano le annotazioni per rilevare e configurare l'infrastruttura di bilanciamento del carico. Le annotazioni per questi controller Ingress e Gateway sono configurate sulle risorse Ingress o Gateway, come mostrato negli esempi precedenti precedenti. Fai riferimento alla documentazione del controller Ingress o Gateway per le annotazioni che supporta e consulta la documentazione di Kubernetes Ingress e la documentazione di Kubernetes
Importante
Cilium Ingress and Gateway non possono essere utilizzati con Load AWS Balancer Controller AWS e Network Load Balancer NLBs () con EKS Hybrid Nodes. Il tentativo di utilizzarli insieme porta a obiettivi non registrati, poiché l'NLB tenta di connettersi direttamente al Pod IPs che supporta il tipo di servizio LoadBalancer quando l'NLB target-type
è impostato su ip
(requisito per l'utilizzo di NLB con carichi di lavoro in esecuzione su nodi ibridi EKS).
Nessuna infrastruttura di bilanciamento del carico
Se non si dispone di un'infrastruttura di bilanciamento del carico e del corrispondente controller Ingress/Gateway nel proprio ambiente, è LoadBalancer possibile configurare le risorse Ingress/Gateway e i servizi di tipo corrispondente per utilizzare gli indirizzi IP allocati dalla gestione degli indirizzi IP Load Balancer
L'esempio seguente mostra come configurare l'IPAM LB di Cilium con un indirizzo IP da utilizzare per le risorse Ingress/Gateway e come configurare Cilium BGP Control Plane per pubblicizzare l'indirizzo LoadBalancer IP con la rete locale. La funzionalità LB IPAM di Cilium è abilitata per impostazione predefinita, ma non viene attivata finché non viene creata una risorsa. CiliumLoadBalancerIPPool
Prerequisiti
-
Cilium Ingress o Gateway installati seguendo le istruzioni in o. Installa Cilium Ingress Installa Cilium Gateway
-
Risorse Cilium Ingress o Gateway con applicazione di esempio distribuita seguendo le istruzioni in o. Implementa Cilium Ingress Implementa Cilium Gateway
-
Cilium BGP Control Plane è stato abilitato seguendo le istruzioni in. Configurare Cilium BGP per nodi ibridi Se non si desidera utilizzare BGP, è possibile ignorare questo prerequisito, ma non sarà possibile accedere alla risorsa Ingress o Gateway finché l'indirizzo LoadBalancer IP assegnato da Cilium LB IPAM non sarà instradabile sulla rete locale.
Procedura
-
Facoltativamente, applica una patch alla risorsa Ingress o Gateway per richiedere un indirizzo IP specifico da utilizzare per il tipo di servizio. LoadBalancer Se non richiedi un indirizzo IP specifico, Cilium assegnerà un indirizzo IP dall'intervallo di indirizzi IP configurato nella
CiliumLoadBalancerIPPool
risorsa nel passaggio successivo. Nei comandi seguenti, sostituisciloLB_IP_ADDRESS
con l'indirizzo IP per richiedere il servizio di tipo. LoadBalancerGateway
kubectl patch gateway -n default my-gateway --type=merge -p '{ "spec": { "addresses": [{"type": "IPAddress", "value": "LB_IP_ADDRESS"}] } }'
Ingresso
kubectl patch ingress my-ingress --type=merge -p '{ "metadata": {"annotations": {"lbipam.cilium.io/ips": "LB_IP_ADDRESS"}} }'
-
Crea un file denominato
cilium-lbip-pool-ingress.yaml
con unaCiliumLoadBalancerIPPool
risorsa per configurare l'intervallo di indirizzi IP Load Balancer per le tue risorse Ingress/Gateway.-
Se utilizzi Cilium Ingress, Cilium applica automaticamente l'
cilium.io/ingress: "true"
etichetta ai Servizi che crea per le risorse Ingress. È possibile utilizzare questa etichetta nelserviceSelector
campo della definizione delleCiliumLoadBalancerIPPool
risorse per selezionare i Servizi idonei per LB IPAM. -
Se si utilizza Cilium Gateway, è possibile utilizzare l'
gateway.networking.k8s.io/gateway-name
etichetta neiserviceSelector
campi della definizione delle risorse per selezionare leCiliumLoadBalancerIPPool
risorse Gateway idonee per LB IPAM. -
Sostituire
LB_IP_CIDR
con l'intervallo di indirizzi IP da utilizzare per gli indirizzi IP di Load Balancer. Per selezionare un singolo indirizzo IP, utilizza un/32
CIDR. Per ulteriori informazioni, consulta Gestione degli indirizzi LoadBalancer IP nella documentazionedi Cilium. apiVersion: cilium.io/v2alpha1 kind: CiliumLoadBalancerIPPool metadata: name: bookinfo-pool spec: blocks: - cidr: "LB_IP_CIDR" serviceSelector: # if using Cilium Gateway matchExpressions: - { key: gateway.networking.k8s.io/gateway-name, operator: In, values: [ my-gateway ] } # if using Cilium Ingress matchLabels: cilium.io/ingress: "true"
-
-
Applica la
CiliumLoadBalancerIPPool
risorsa al tuo cluster.kubectl apply -f cilium-lbip-pool-ingress.yaml
-
Conferma che un indirizzo IP è stato allocato da Cilium LB IPAM per la risorsa Ingress/Gateway.
Gateway
kubectl get gateway my-gateway
NAME CLASS ADDRESS PROGRAMMED AGE my-gateway cilium
LB_IP_ADDRESS
True 6m41sIngresso
kubectl get ingress my-ingress
NAME CLASS HOSTS ADDRESS PORTS AGE my-ingress cilium *
LB_IP_ADDRESS
80 10m -
Crea un file denominato
cilium-bgp-advertisement-ingress.yaml
con unaCiliumBGPAdvertisement
risorsa per pubblicizzare l'indirizzo LoadBalancer IP per le risorse Ingress/Gateway. Se non utilizzi Cilium BGP, puoi saltare questo passaggio. L'indirizzo LoadBalancer IP utilizzato per la risorsa Ingress/Gateway deve essere instradabile sulla rete locale per poter interrogare il servizio nel passaggio successivo.apiVersion: cilium.io/v2alpha1 kind: CiliumBGPAdvertisement metadata: name: bgp-advertisement-lb-ip labels: advertise: bgp spec: advertisements: - advertisementType: "Service" service: addresses: - LoadBalancerIP selector: # if using Cilium Gateway matchExpressions: - { key: gateway.networking.k8s.io/gateway-name, operator: In, values: [ my-gateway ] } # if using Cilium Ingress matchLabels: cilium.io/ingress: "true"
-
Applica la
CiliumBGPAdvertisement
risorsa al tuo cluster.kubectl apply -f cilium-bgp-advertisement-ingress.yaml
-
Accedi al servizio utilizzando l'indirizzo IP assegnato da Cilium LB IPAM.
curl -s http://
LB_IP_ADDRESS
:80/details/1 | jq{ "id": 1, "author": "William Shakespeare", "year": 1595, "type": "paperback", "pages": 200, "publisher": "PublisherA", "language": "English", "ISBN-10": "1234567890", "ISBN-13": "123-1234567890" }
Tipo di servizio NodePort
Se non disponi di un'infrastruttura di bilanciamento del carico e del corrispondente controller Ingress nel tuo ambiente, o se gestisci autonomamente l'infrastruttura di bilanciamento del carico o utilizzi il bilanciamento del carico basato su DNS, puoi configurare Cilium Ingress per creare servizi di tipo per le risorse Ingress. NodePort Quando si utilizza NodePort con Cilium Ingress, il tipo di servizio è esposto su una porta su ciascun nodo nell'intervallo di porte NodePort 30000-32767. In questa modalità, quando il traffico raggiunge qualsiasi nodo del cluster sul NodePort, viene quindi inoltrato a un pod che supporta il servizio, che può trovarsi sullo stesso nodo o su un nodo diverso.
Prerequisiti
-
Cilium Ingress è stato installato seguendo le istruzioni in. Installa Cilium Ingress
-
Risorse Cilium Ingress con applicazione di esempio distribuita seguendo le istruzioni contenute in. Implementa Cilium Ingress
Procedura
-
Aggiorna la risorsa Ingress esistente
my-ingress
per cambiarla da Tipo di servizio a. LoadBalancer NodePortkubectl patch ingress my-ingress --type=merge -p '{ "metadata": {"annotations": {"ingress.cilium.io/service-type": "NodePort"}} }'
Se non hai creato la risorsa Ingress, puoi crearla applicando la seguente definizione di Ingress al tuo cluster. Nota, la definizione Ingress riportata di seguito utilizza l'applicazione di esempio Istio Bookinfo descritta in. Implementa Cilium Ingress
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress namespace: default annotations: service.beta.kubernetes.io/aws-load-balancer-type: "external" "ingress.cilium.io/service-type": "NodePort" spec: ingressClassName: cilium rules: - http: paths: - backend: service: name: details port: number: 9080 path: /details pathType: Prefix
-
Conferma che il servizio per la risorsa Ingress è stato aggiornato per utilizzare il tipo di servizio. NodePort Nota la porta per il protocollo HTTP nell'output. Nell'esempio seguente, questa è la porta HTTP
32353
, che verrà utilizzata in un passaggio successivo per interrogare il servizio. Il vantaggio dell'utilizzo di Cilium Ingress with Service of type NodePort è che è possibile applicare il routing basato su percorsi e host, nonché politiche di rete per il traffico in ingresso, cosa che non è possibile eseguire per un servizio standard di tipo senza Ingress. NodePortkubectl -n default get svc cilium-ingress-my-ingress
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE cilium-ingress-my-ingress NodePort 172.16.47.153 <none> 80:32353/TCP,443:30253/TCP 27m
-
Ottieni gli indirizzi IP dei tuoi nodi nel tuo cluster.
kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME mi-026d6a261e355fba7 Ready <none> 23h v1.32.3-eks-473151a 10.80.146.150 <none> Ubuntu 22.04.5 LTS 5.15.0-142-generic containerd://1.7.27 mi-082f73826a163626e Ready <none> 23h v1.32.3-eks-473151a 10.80.146.32 <none> Ubuntu 22.04.4 LTS 5.15.0-142-generic containerd://1.7.27 mi-09183e8a3d755abf6 Ready <none> 23h v1.32.3-eks-473151a 10.80.146.33 <none> Ubuntu 22.04.4 LTS 5.15.0-142-generic containerd://1.7.27 mi-0d78d815980ed202d Ready <none> 23h v1.32.3-eks-473151a 10.80.146.97 <none> Ubuntu 22.04.4 LTS 5.15.0-142-generic containerd://1.7.27 mi-0daa253999fe92daa Ready <none> 23h v1.32.3-eks-473151a 10.80.146.100 <none> Ubuntu 22.04.4 LTS 5.15.0-142-generic containerd://1.7.27
-
Accedi al tipo di servizio NodePort utilizzando gli indirizzi IP dei tuoi nodi e quelli NodePort acquisiti sopra. Nell'esempio seguente l'indirizzo IP del nodo utilizzato è
10.80.146.32
e lo NodePort è32353
. Sostituiscili con i valori del tuo ambiente.curl -s http://10.80.146.32:32353/details/1 | jq
{ "id": 1, "author": "William Shakespeare", "year": 1595, "type": "paperback", "pages": 200, "publisher": "PublisherA", "language": "English", "ISBN-10": "1234567890", "ISBN-13": "123-1234567890" }
Rete host
Analogamente al tipo di servizio NodePort, se non disponi di un'infrastruttura di bilanciamento del carico e di un controller Ingress o Gateway o se gestisci automaticamente il bilanciamento del carico con un bilanciamento del carico esterno, puoi configurare Cilium Ingress e Cilium Gateway per esporre le risorse Ingress e Gateway direttamente sulla rete host. Quando la modalità di rete host è abilitata per una risorsa Ingress o Gateway, il tipo LoadBalancer e le NodePort modalità del Servizio vengono automaticamente disabilitati, la modalità di rete host si esclude a vicenda con queste modalità alternative per ogni risorsa Ingress o Gateway. Rispetto alla NodePort modalità Service of type, la modalità di rete host offre una flessibilità aggiuntiva per la gamma di porte che possono essere utilizzate (non è limitata alla NodePort gamma 30000-32767) ed è possibile configurare un sottoinsieme di nodi in cui i proxy Envoy vengono eseguiti sulla rete host.
Prerequisiti
-
Cilium Ingress o Gateway installato seguendo le istruzioni in o. Installa Cilium Ingress Installa Cilium Gateway
Procedura
Gateway
-
Creare un archivio denominato
cilium-gateway-host-network.yaml
con i seguenti contenuti.gatewayAPI: enabled: true hostNetwork: enabled: true # uncomment to restrict nodes where Envoy proxies run on the host network # nodes: # matchLabels: # role: gateway
-
Applica la configurazione Cilium Gateway della rete host al cluster.
helm upgrade cilium oci://public.ecr.aws/eks/cilium/cilium \ --namespace kube-system \ --reuse-values \ --set operator.rollOutPods=true \ -f cilium-gateway-host-network.yaml
Se non hai creato la risorsa Gateway, puoi crearla applicando la seguente definizione di Gateway al tuo cluster. La definizione di Gateway riportata di seguito utilizza l'applicazione di esempio Istio Bookinfo descritta in. Implementa Cilium Gateway Nell'esempio seguente, la risorsa Gateway è configurata per utilizzare la
8111
porta per il listener HTTP, che è la porta listener condivisa per i proxy Envoy in esecuzione sulla rete host. Se stai utilizzando una porta privilegiata (inferiore a 1023) per la risorsa Gateway, fai riferimento alla documentazione di Cilium per le istruzioni.--- apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: my-gateway spec: gatewayClassName: cilium listeners: - protocol: HTTP port: 8111 name: web-gw allowedRoutes: namespaces: from: Same --- apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: http-app-1 spec: parentRefs: - name: my-gateway namespace: default rules: - matches: - path: type: PathPrefix value: /details backendRefs: - name: details port: 9080
È possibile osservare la configurazione Cilium Envoy applicata con il seguente comando.
kubectl get cec cilium-gateway-my-gateway -o yaml
È possibile ottenere la porta del listener Envoy per il servizio con il
cilium-gateway-my-gateway
seguente comando. In questo esempio, la porta del listener condiviso è.8111
kubectl get cec cilium-gateway-my-gateway -o jsonpath={.spec.services[0].ports[0]}
-
Ottieni gli indirizzi IP dei tuoi nodi nel cluster.
kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME mi-026d6a261e355fba7 Ready <none> 23h v1.32.3-eks-473151a 10.80.146.150 <none> Ubuntu 22.04.5 LTS 5.15.0-142-generic containerd://1.7.27 mi-082f73826a163626e Ready <none> 23h v1.32.3-eks-473151a 10.80.146.32 <none> Ubuntu 22.04.4 LTS 5.15.0-142-generic containerd://1.7.27 mi-09183e8a3d755abf6 Ready <none> 23h v1.32.3-eks-473151a 10.80.146.33 <none> Ubuntu 22.04.4 LTS 5.15.0-142-generic containerd://1.7.27 mi-0d78d815980ed202d Ready <none> 23h v1.32.3-eks-473151a 10.80.146.97 <none> Ubuntu 22.04.4 LTS 5.15.0-142-generic containerd://1.7.27 mi-0daa253999fe92daa Ready <none> 23h v1.32.3-eks-473151a 10.80.146.100 <none> Ubuntu 22.04.4 LTS 5.15.0-142-generic containerd://1.7.27
-
Accedi al servizio utilizzando gli indirizzi IP dei tuoi nodi e la porta del listener per la
cilium-gateway-my-gateway
risorsa. Nell'esempio seguente l'indirizzo IP del nodo utilizzato è10.80.146.32
e la porta del listener è.8111
Sostituiscili con i valori del tuo ambiente.curl -s http://10.80.146.32:8111/details/1 | jq
{ "id": 1, "author": "William Shakespeare", "year": 1595, "type": "paperback", "pages": 200, "publisher": "PublisherA", "language": "English", "ISBN-10": "1234567890", "ISBN-13": "123-1234567890" }
Ingress
A causa di un problema con Cilium upstream (#34028loadbalancerMode: shared
, che crea un unico servizio di tipo ClusterIP per tutte le risorse Ingress nel cluster. Se stai utilizzando una porta privilegiata (inferiore a 1023) per la risorsa Ingress, consulta la documentazione di Cilium per le istruzioni.
-
Creare un archivio denominato
cilium-ingress-host-network.yaml
con i seguenti contenuti.ingressController: enabled: true loadbalancerMode: shared # This is a workaround for the upstream Cilium issue service: externalTrafficPolicy: null type: ClusterIP hostNetwork: enabled: true # ensure the port does not conflict with other services on the node sharedListenerPort: 8111 # uncomment to restrict nodes where Envoy proxies run on the host network # nodes: # matchLabels: # role: ingress
-
Applica la configurazione Cilium Ingress della rete host al tuo cluster.
helm upgrade cilium oci://public.ecr.aws/eks/cilium/cilium \ --namespace kube-system \ --reuse-values \ --set operator.rollOutPods=true \ -f cilium-ingress-host-network.yaml
Se non hai creato la risorsa Ingress, puoi crearla applicando la seguente definizione di Ingress al tuo cluster. La definizione Ingress riportata di seguito utilizza l'applicazione di esempio Istio Bookinfo descritta in. Implementa Cilium Ingress
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress namespace: default spec: ingressClassName: cilium rules: - http: paths: - backend: service: name: details port: number: 9080 path: /details pathType: Prefix
È possibile osservare la configurazione Cilium Envoy applicata con il seguente comando.
kubectl get cec -n kube-system cilium-ingress -o yaml
È possibile ottenere la porta del listener Envoy per il servizio con il
cilium-ingress
seguente comando. In questo esempio, la porta del listener condiviso è.8111
kubectl get cec -n kube-system cilium-ingress -o jsonpath={.spec.services[0].ports[0]}
-
Ottieni gli indirizzi IP dei tuoi nodi nel cluster.
kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME mi-026d6a261e355fba7 Ready <none> 23h v1.32.3-eks-473151a 10.80.146.150 <none> Ubuntu 22.04.5 LTS 5.15.0-142-generic containerd://1.7.27 mi-082f73826a163626e Ready <none> 23h v1.32.3-eks-473151a 10.80.146.32 <none> Ubuntu 22.04.4 LTS 5.15.0-142-generic containerd://1.7.27 mi-09183e8a3d755abf6 Ready <none> 23h v1.32.3-eks-473151a 10.80.146.33 <none> Ubuntu 22.04.4 LTS 5.15.0-142-generic containerd://1.7.27 mi-0d78d815980ed202d Ready <none> 23h v1.32.3-eks-473151a 10.80.146.97 <none> Ubuntu 22.04.4 LTS 5.15.0-142-generic containerd://1.7.27 mi-0daa253999fe92daa Ready <none> 23h v1.32.3-eks-473151a 10.80.146.100 <none> Ubuntu 22.04.4 LTS 5.15.0-142-generic containerd://1.7.27
-
Accedi al servizio utilizzando gli indirizzi IP dei tuoi nodi e il comando
sharedListenerPort
per lacilium-ingress
risorsa. Nell'esempio seguente l'indirizzo IP del nodo utilizzato è10.80.146.32
e la porta del listener è8111
. Sostituiscili con i valori del tuo ambiente.curl -s http://10.80.146.32:8111/details/1 | jq
{ "id": 1, "author": "William Shakespeare", "year": 1595, "type": "paperback", "pages": 200, "publisher": "PublisherA", "language": "English", "ISBN-10": "1234567890", "ISBN-13": "123-1234567890" }