Configurare un CNI per nodi ibridi - Amazon EKS

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à.

Configurare un CNI per nodi ibridi

Cilium e Calico sono supportati come Container Networking Interfaces () CNIs per Amazon EKS Hybrid Nodes. È necessario installare un CNI affinché i nodi ibridi siano pronti a servire i carichi di lavoro. I nodi ibridi vengono visualizzati con lo stato Not Ready fino all'esecuzione di un CNI. Puoi gestirli CNIs con strumenti di tua scelta come Helm. Amazon VPC CNI non è compatibile con i nodi ibridi e il CNI VPC è configurato con l'antiaffinità per l'etichetta. eks.amazonaws.com/compute-type: hybrid

Compatibilità della versione CNI

3.29.xLa versione Calico è supportata e consigliata per EKS Hybrid Nodes per ogni versione di Kubernetes supportata in Amazon EKS.

1.16.xLa versione Cilium è supportata e consigliata per i nodi ibridi EKS per ogni versione di Kubernetes supportata in Amazon EKS.

Funzionalità supportate

AWS supporta le seguenti funzionalità di Cilium e Calico per l'uso con nodi ibridi. Se prevedi di utilizzare funzionalità che non rientrano nell'ambito del AWS supporto, ti consigliamo di ottenere assistenza commerciale per il plug-in o di avere l'esperienza interna necessaria per risolvere i problemi e contribuire con correzioni al progetto del plug-in CNI.

Funzionalità Cilium Calico

Conformità della rete Kubernetes

Connettività da piano di controllo a nodo

Connettività da piano di controllo a pod

Gestione del ciclo di vita

Installa, aggiorna, elimina

Installa, aggiorna, elimina

Modalità di rete

VXLAN

VXLAN

Gestione degli indirizzi IP (IPAM)

Ambito del cluster (Cilium IPAM)

Calico IPAM

Famiglia di IP

IPv4

IPv4

BGP

Sì (Cilium Control Plane)

Installa Cilium su nodi ibridi

  1. Assicurati di aver installato la CLI helm nel tuo ambiente a riga di comando. Consulta la documentazione di Helm per le istruzioni di installazione.

  2. Installa il repository Cilium Helm.

    helm repo add cilium https://helm.cilium.io/
  3. Crea un file YAML chiamato. cilium-values.yaml Se hai configurato almeno una rete di pod remota, configura lo stesso pod CIDRs per la tua. clusterPoolIPv4PodCIDRList Non dovresti cambiare il tuo clusterPoolIPv4PodCIDRList dopo aver distribuito Cilium sul tuo cluster. È possibile configurare clusterPoolIPv4MaskSize in base ai pod richiesti per nodo, vedere Espansione del pool di cluster nella documentazione di Cilium. Per un elenco completo dei valori Helm per Cilium, consulta il riferimento Helm nella documentazione di Cilium. L'esempio seguente configura tutti i componenti Cilium per l'esecuzione solo sui nodi ibridi, poiché hanno l'etichetta. eks.amazonaws.com/compute-type: hybrid

    Per impostazione predefinita, Cilium maschera l'indirizzo IP di origine di tutto il traffico dei pod in uscita dal cluster all'indirizzo IP del nodo. Ciò consente a Cilium di funzionare con cluster Amazon EKS con reti di pod remoti configurate e con cluster che non dispongono di reti di pod remoti configurate. Se disabiliti il mascheramento per la tua distribuzione Cilium, devi configurare il cluster Amazon EKS con le tue reti di pod remoti e pubblicizzare gli indirizzi dei tuoi pod con la tua rete locale. Se esegui webhook sui tuoi nodi ibridi, devi configurare il cluster con le tue reti di pod remoti e devi pubblicizzare gli indirizzi dei tuoi pod con la tua rete locale.

    Un modo comune per pubblicizzare gli indirizzi dei pod con la rete locale consiste nell'utilizzare BGP. Per utilizzare BGP con Cilium, devi impostare. bgpControlPlane.enabled: true Per ulteriori informazioni sul supporto BGP di Cilium, consulta Cilium BGP Control Plane nella documentazione di Cilium.

    affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: In values: - hybrid ipam: mode: cluster-pool operator: clusterPoolIPv4MaskSize: 25 clusterPoolIPv4PodCIDRList: - POD_CIDR operator: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: In values: - hybrid unmanagedPodWatcher: restart: false envoy: enabled: false
  4. Installa Cilium sul tuo cluster. CILIUM_VERSIONSostituiscilo con la versione di Cilium desiderata. Si consiglia di eseguire l'ultima versione della patch per la versione secondaria di Cilium. Puoi trovare l'ultima versione della patch per una determinata versione minore di Cilium nella sezione Stable Releases della documentazione di Cilium. Se state abilitando BGP per la vostra implementazione, aggiungete il --set bgpControlPlane.enabled=true flag nel comando seguente. Se stai usando un file kubeconfig specifico, usa il --kubeconfig flag con il comando Helm install.

    helm install cilium cilium/cilium \ --version CILIUM_VERSION \ --namespace kube-system \ --values cilium-values.yaml
  5. Puoi confermare che l'installazione di Cilium è andata a buon fine con i seguenti comandi. Dovresti vedere la cilium-operator distribuzione e l'cilium-agentesecuzione su ciascuno dei tuoi nodi ibridi. Inoltre, i nodi ibridi dovrebbero ora avere lo statoReady. Per informazioni su come configurare BGP per Cilium, procedi al passaggio successivo.

    kubectl get pods -n kube-system
    NAME READY STATUS RESTARTS AGE cilium-jjjn8 1/1 Running 0 11m cilium-operator-d4f4d7fcb-sc5xn 1/1 Running 0 11m
    kubectl get nodes
    NAME STATUS ROLES AGE VERSION mi-04a2cf999b7112233 Ready <none> 19m v1.31.0-eks-a737599
  6. Per utilizzare BGP con Cilium per pubblicizzare gli indirizzi dei pod sulla rete locale, è necessario aver installato Cilium con. bgpControlPlane.enabled: true Per configurare BGP in Cilium, per prima cosa crea un file chiamato cilium-bgp-cluster.yaml con a con l'IP del router locale CiliumBGPClusterConfig con peerAddress cui stai effettuando il peering. Configura localASN e in peerASN base alla configurazione del router locale.

    apiVersion: cilium.io/v2alpha1 kind: CiliumBGPClusterConfig metadata: name: cilium-bgp spec: nodeSelector: matchExpressions: - key: eks.amazonaws.com/compute-type operator: In values: - hybrid bgpInstances: - name: "rack0" localASN: ONPREM_ROUTER_ASN peers: - name: "onprem-router" peerASN: PEER_ASN peerAddress: ONPREM_ROUTER_IP peerConfigRef: name: "cilium-peer"
  7. Applica la configurazione Cilium BGP Cluster al tuo cluster.

    kubectl apply -f cilium-bgp-cluster.yaml
  8. La CiliumBGPPeerConfig risorsa definisce una configurazione peer BGP. Più peer possono condividere la stessa configurazione e fornire un riferimento alla risorsa comune. CiliumBGPPeerConfig Crea un file denominato cilium-bgp-peer.yaml per configurare la configurazione peer per la tua rete locale. Consulta la configurazione peer BGP nella documentazione di Cilium per un elenco completo delle opzioni di configurazione.

    apiVersion: cilium.io/v2alpha1 kind: CiliumBGPPeerConfig metadata: name: cilium-peer spec: timers: holdTimeSeconds: 30 keepAliveTimeSeconds: 10 gracefulRestart: enabled: true restartTimeSeconds: 120 families: - afi: ipv4 safi: unicast advertisements: matchLabels: advertise: "bgp"
  9. Applica la configurazione Cilium BGP Peer al tuo cluster.

    kubectl apply -f cilium-bgp-peer.yaml
  10. La CiliumBGPAdvertisement risorsa viene utilizzata per definire vari tipi di pubblicità e attributi ad essi associati. Crea un file denominato cilium-bgp-advertisement.yaml e configura la CiliumBGPAdvertisement risorsa con le impostazioni desiderate.

    apiVersion: cilium.io/v2alpha1 kind: CiliumBGPAdvertisement metadata: name: bgp-advertisements labels: advertise: bgp spec: advertisements: - advertisementType: "PodCIDR" - advertisementType: "Service" service: addresses: - ClusterIP - ExternalIP - LoadBalancerIP
  11. Applica la configurazione Cilium BGP Advertisement al tuo cluster.

    kubectl apply -f cilium-bgp-advertisement.yaml

    È possibile confermare che il peering BGP ha funzionato con la CLI di Cilium utilizzando il comando. cilium bgp peers Dovresti vedere i valori corretti nell'output per il tuo ambiente e lo stato della sessione come. established Per ulteriori informazioni sulla risoluzione dei problemi, consulta la Guida alla risoluzione dei problemi e alle operazioni nella documentazione di Cilium.

Aggiorna Cilium su nodi ibridi

Prima di aggiornare la distribuzione di Cilium, consulta attentamente la documentazione sull'aggiornamento di Cilium e le note sull'aggiornamento per comprendere le modifiche nella versione di Cilium di destinazione.

  1. Assicurati di aver installato la helm CLI nel tuo ambiente a riga di comando. Consultate la documentazione di Helm per le istruzioni di installazione.

  2. Installa il repository Cilium Helm.

    helm repo add cilium https://helm.cilium.io/
  3. Esegui il controllo pre-volo dell'upgrade a Cilium. Sostituiscilo CILIUM_VERSION con la tua versione di Cilium di destinazione. Ti consigliamo di eseguire la versione patch più recente per la tua versione secondaria di Cilium. Puoi trovare l'ultima versione della patch per una determinata versione minore di Cilium nella sezione Stable Releases della documentazione di Cilium.

    helm install cilium-preflight cilium/cilium --version CILIUM_VERSION \ --namespace=kube-system \ --set preflight.enabled=true \ --set agent=false \ --set operator.enabled=false
  4. Dopo aver applicato ilcilium-preflight.yaml, assicurati che il numero di READY pod sia lo stesso numero di pod Cilium in funzione.

    kubectl get ds -n kube-system | sed -n '1p;/cilium/p'
    NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE cilium 2 2 2 2 2 <none> 1h20m cilium-pre-flight-check 2 2 2 2 2 <none> 7m15s
  5. Una volta che il numero di pod READY è uguale, assicurati che anche il dispiegamento di Cilium prima del volo sia contrassegnato come READY 1/1. Se mostra READY 0/1, consulta la sezione di convalida CNP e risolvi i problemi relativi alla distribuzione prima di continuare con l'aggiornamento.

    kubectl get deployment -n kube-system cilium-pre-flight-check -w
    NAME READY UP-TO-DATE AVAILABLE AGE cilium-pre-flight-check 1/1 1 0 12s
  6. Eliminare il preflight

    helm uninstall cilium-preflight --namespace kube-system
  7. Durante le normali operazioni del cluster, tutti i componenti Cilium devono eseguire la stessa versione. I passaggi seguenti descrivono come aggiornare tutti i componenti da una versione stabile a una versione stabile successiva. Quando si esegue l'aggiornamento da una versione secondaria a un'altra versione minore, si consiglia di eseguire prima l'aggiornamento all'ultima versione di patch per la versione secondaria di Cilium esistente. Per ridurre al minimo le interruzioni, imposta l'upgradeCompatibilityopzione sulla versione iniziale di Cilium installata in questo cluster.

    Prima di eseguire il comando helm upgrade, conservate i valori per la distribuzione in a cilium-values.yaml o utilizzate le opzioni della riga di --set comando per le impostazioni. L'operazione di aggiornamento sovrascrive Cilium ConfigMap, quindi è fondamentale che i valori di configurazione vengano passati durante l'aggiornamento. Se si utilizza BGP, si consiglia di utilizzare l'opzione della --set bgpControlPlane=true riga di comando invece di fornire queste informazioni nel file dei valori.

    helm upgrade cilium cilium/cilium --version CILIUM_VERSION \ --namespace kube-system \ --set upgradeCompatibility=1.X \ -f cilium-values.yaml
  8. (Facoltativo) Se è necessario ripristinare l'aggiornamento a causa di problemi, esegui i seguenti comandi.

    helm history cilium --namespace kube-system helm rollback cilium [REVISION] --namespace kube-system

Elimina Cilium dai nodi ibridi

  1. Esegui il seguente comando per disinstallare tutti i componenti Cilium dal tuo cluster. Nota, la disinstallazione del CNI può influire sulla salute di nodi e pod e non deve essere eseguita sui cluster di produzione.

    helm uninstall cilium --namespace kube-system

    Le interfacce e le rotte configurate da Cilium non vengono rimosse per impostazione predefinita quando il CNI viene rimosso dal cluster, consulta il problema per ulteriori informazioni. GitHub

  2. Per ripulire i file e le risorse di configurazione su disco, se si utilizzano le directory di configurazione standard, è possibile rimuovere i file come mostrato dallo cni-uninstall.shscript nel repository Cilium su. GitHub

  3. Per rimuovere Cilium Custom Resource Definitions (CRDs) dal tuo cluster, puoi eseguire i seguenti comandi.

    kubectl get crds -oname | grep "cilium" | xargs kubectl delete

Installa Calico su nodi ibridi

  1. Assicurati di aver installato la CLI helm nel tuo ambiente a riga di comando. Consulta la documentazione di Helm per le istruzioni di installazione.

  2. Installa il repository Cilium Helm.

    helm repo add projectcalico https://docs.tigera.io/calico/charts
  3. Crea un file YAML chiamato calico-values.yaml che configura Calico con affinità per l'esecuzione su nodi ibridi. Per ulteriori informazioni sulle diverse modalità di rete di Calico, consulta Determinazione della migliore opzione di rete nella documentazione di Calico.

    1. POD_CIDRSostituiscila con le gamme CIDR per i tuoi pod. Se hai configurato il tuo cluster Amazon EKS con reti di pod remoti, POD_CIDR ciò che specifichi per Calico dovrebbe essere lo stesso delle reti di pod remoti. Ad esempio 10.100.0.0/24.

    2. Sostituisci CIDR_SIZE con la dimensione del segmento CIDR che desideri allocare a ciascun nodo. Ad esempio, 25 per una dimensione del segmento /25. Per ulteriori informazioni su CIDR blockSize e sulla modifica diblockSize, consulta Modifica della dimensione dei blocchi del pool IP nella documentazione di Calico.

    3. Nell'esempio seguente, natOutgoing è abilitato e bgp disabilitato. In questa configurazione, Calico può essere eseguito su cluster Amazon EKS con Remote Pod Network configurato e può essere eseguito su cluster che non hanno Remote Pod Network configurato. Se l'natOutgoingimpostazione è disattivata, è necessario configurare il cluster con le reti di pod remoti e la rete locale deve essere in grado di indirizzare correttamente il traffico destinato al pod. CIDRs Un modo comune per pubblicizzare gli indirizzi dei pod con la rete locale consiste nell'utilizzare BGP. Per usare BGP con Calico, devi abilitarlo. bgp L'esempio seguente configura tutti i componenti di Calico per funzionare solo sui nodi ibridi, poiché hanno l'etichetta. eks.amazonaws.com/compute-type: hybrid Se esegui webhook sui tuoi nodi ibridi, devi configurare il cluster con le tue reti di pod remoti e devi pubblicizzare gli indirizzi dei tuoi pod con la tua rete locale. L'esempio seguente configuracontrolPlaneReplicas: 1, aumenta il valore se hai più nodi ibridi e desideri eseguire i componenti del piano di controllo di Calico in modo altamente disponibile.

      installation: enabled: true cni: type: Calico ipam: type: Calico calicoNetwork: bgp: Disabled ipPools: - cidr: POD_CIDR blockSize: CIDR_SIZE encapsulation: VXLAN natOutgoing: Enabled nodeSelector: eks.amazonaws.com/compute-type == "hybrid" controlPlaneReplicas: 1 controlPlaneNodeSelector: eks.amazonaws.com/compute-type: hybrid calicoNodeDaemonSet: spec: template: spec: nodeSelector: eks.amazonaws.com/compute-type: hybrid csiNodeDriverDaemonSet: spec: template: spec: nodeSelector: eks.amazonaws.com/compute-type: hybrid calicoKubeControllersDeployment: spec: template: spec: nodeSelector: eks.amazonaws.com/compute-type: hybrid typhaDeployment: spec: template: spec: nodeSelector: eks.amazonaws.com/compute-type: hybrid
  4. Installa Calico sul tuo cluster. Sostituiscilo CALICO_VERSION con la versione di Calico desiderata (ad esempio 3.29.0), consulta le versioni di Calico per trovare l'ultima versione di patch per la tua versione secondaria di Calico. Si consiglia di eseguire l'ultima versione della patch per la versione secondaria di Calico. Se stai usando un kubeconfig file specifico, usa il --kubeconfig flag.

    helm install calico projectcalico/tigera-operator \ --version CALICO_VERSION \ --namespace kube-system \ -f calico-values.yaml
  5. Puoi confermare che l'installazione di Calico è andata a buon fine con i seguenti comandi. Dovresti vedere la tigera-operator distribuzione, l'calico-nodeagente in esecuzione su ciascuno dei tuoi nodi ibridi, il calico-apiservercsi-node-driver, e quello calico-kube-controllers distribuito. Inoltre, i nodi ibridi dovrebbero ora avere lo statoReady. Se lo utilizzinatOutgoing: Disabled, tutti i componenti di Calico non potranno avviarsi correttamente finché non pubblicizzerai gli indirizzi dei tuoi pod nella tua rete locale. Per informazioni su come configurare BGP per Calico, procedi al passaggio successivo.

    kubectl get pods -A
    NAMESPACE NAME READY STATUS RESTARTS AGE calico-apiserver calico-apiserver-6c77bb6d46-2n8mq 1/1 Running 0 69s calico-system calico-kube-controllers-7c5f8556b5-7h267 1/1 Running 0 68s calico-system calico-node-s5nnk 1/1 Running 0 68s calico-system calico-typha-6487cc9d8c-wc5jm 1/1 Running 0 69s calico-system csi-node-driver-cv42d 2/2 Running 0 68s kube-system coredns-7bb495d866-2lc9v 1/1 Running 0 6m27s kube-system coredns-7bb495d866-2t8ln 1/1 Running 0 157m kube-system kube-proxy-lxzxh 1/1 Running 0 18m kube-system tigera-operator-f8bc97d4c-28b4d 1/1 Running 0 90s
    kubectl get nodes
    NAME STATUS ROLES AGE VERSION mi-0c6ec2f6f79176565 Ready <none> 5h13m v1.31.0-eks-a737599
  6. Se hai installato Calico senza BGP, salta questo passaggio. Per configurare BGP, crea un file chiamato calico-bgp.yaml con una configurazione e un. BGPPeer BGPConfiguration È importante distinguere BGPPeer e. BGPConfiguration BGPPeerÈ il router o la risorsa remota abilitata per BGP con cui i nodi di un cluster Calico effettueranno il peering. La BGPPeer configurazione è simile asNumber all'impostazione di Cilium. peerASN BGPConfigurationViene applicato a ciascun nodo Calico e il asNumber for the BGPConfiguration è equivalente all'impostazione Cilium. localASN Sostituisci ONPREM_ROUTER_IPONPREM_ROUTER_ASN, e LOCAL_ASN nell'esempio seguente con i valori per il tuo ambiente locale. L'keepOriginalNextHop: trueimpostazione viene utilizzata per garantire che ogni nodo pubblicizzi solo la rete di pod CIDR di sua proprietà.

    apiVersion: projectcalico.org/v3 kind: BGPPeer metadata: name: calico-hybrid-nodes spec: peerIP: ONPREM_ROUTER_IP asNumber: ONPREM_ROUTER_ASN keepOriginalNextHop: true --- apiVersion: projectcalico.org/v3 kind: BGPConfiguration metadata: name: default spec: nodeToNodeMeshEnabled: false asNumber: LOCAL_ASN
  7. Applica il file al tuo cluster.

    kubectl apply -f calico-bgp.yaml
  8. Conferma che i pod di Calico siano in esecuzione con il seguente comando.

    kubectl get pods -n calico-system -w
    NAMESPACE NAME READY STATUS RESTARTS AGE calico-apiserver calico-apiserver-598bf99b6c-2vltk 1/1 Running 0 3h24m calico-system calico-kube-controllers-75f84bbfd6-zwmnx 1/1 Running 31 (59m ago) 3h20m calico-system calico-node-9b2pg 1/1 Running 0 5h17m calico-system calico-typha-7d55c76584-kxtnq 1/1 Running 0 5h18m calico-system csi-node-driver-dmnmm 2/2 Running 0 5h18m kube-system coredns-7bb495d866-dtn4z 1/1 Running 0 6h23m kube-system coredns-7bb495d866-mk7j4 1/1 Running 0 6h19m kube-system kube-proxy-vms28 1/1 Running 0 6h12m kube-system tigera-operator-55f9d9d565-jj9bg 1/1 Running 0 73m

Se hai riscontrato problemi durante questi passaggi, consulta la guida alla risoluzione dei problemi nella documentazione di Calico.

Aggiorna Calico su nodi ibridi

Prima di aggiornare la distribuzione di Calico, consulta attentamente la documentazione di aggiornamento di Calico e le note di rilascio per comprendere le modifiche nella versione di destinazione di Calico. I passaggi di aggiornamento variano a seconda che si utilizzi Helm, l'operatore Calico e il tipo di datastore. I passaggi seguenti presuppongono l'uso di Helm.

  1. Scarica il manifesto dell'operatore per la versione di Calico a cui stai effettuando l'aggiornamento. CALICO_VERSIONSostituiscilo con la versione a cui stai effettuando l'aggiornamento, ad esempio. v3.29.0 Assicurati di anteporre il file a major.minor.patchv.

    kubectl apply --server-side --force-conflicts \ -f https://raw.githubusercontent.com/projectcalico/calico/CALICO_VERSION/manifests/operator-crds.yaml
  2. Esegui per aggiornare la tua distribuzione di Calico. helm upgrade Sostituisci CALICO_VERSION con la versione a cui stai effettuando l'aggiornamento, ad esempio. v3.29.0 Crea il calico-values.yaml file dai valori di configurazione che hai usato per installare Calico.

    helm upgrade calico projectcalico/tigera-operator \ --version CALICO_VERSION \ --namespace kube-system \ -f calico-values.yaml

Elimina Calico dai nodi ibridi

  1. Esegui il seguente comando per disinstallare i componenti di Calico dal tuo cluster. Tieni presente che la disinstallazione del CNI potrebbe influire sulla salute di nodi e pod e non dovrebbe essere eseguita sui cluster di produzione. Se hai installato Calico in uno spazio dei nomi diverso, kube-system modifica lo spazio dei nomi nel comando seguente.

    helm uninstall calico --namespace kube-system

    Nota che le interfacce e le route configurate da Calico non vengono rimosse di default quando rimuovi il CNI dal cluster.

  2. Per ripulire i file e le risorse di configurazione su disco, rimuovete i file Calico dalle directory and. /opt/cni /etc/cni

  3. Per rimuovere Calico CRDs dal tuo cluster, esegui i seguenti comandi.

    kubectl get crds -oname | grep "calico" | xargs kubectl delete
    kubectl get crds -oname | grep "tigera" | xargs kubectl delete