Installazione del componente aggiuntivo Calico - Amazon EKS

Installazione del componente aggiuntivo Calico

Project Calico è un motore di policy di rete per Kubernetes. Con l'applicazione della policy di rete Calico, è possibile implementare la segmentazione della rete e l'isolamento dei tenant. Questa funzione è utile in ambienti multi-tenant, in cui è necessario isolare i tenant tra loro oppure quando si desidera creare ambienti separati per lo sviluppo, la gestione temporanea e la produzione. Le policy di rete sono simili ai gruppi di sicurezza AWS, nel senso che è possibile creare regole di rete in ingresso e in uscita. Invece di assegnare le istanze a un gruppo di sicurezza, si assegnano policy di rete ai pod utilizzando selettori di pod ed etichette.

Considerazioni

  • Calico non è supportato quando si utilizza Fargate con Amazon EKS.

  • Calico aggiunge regole a iptables sul nodo che potrebbero avere una priorità maggiore rispetto alle regole esistenti già implementate al di fuori di Calico. Considerare l'aggiunta di regole iptables alle policy Calico per evitare che le regole al di fuori della policy Calico vengano sovrascritte da Calico.

  • Se si utilizzano gruppi di sicurezza per pod, il flusso di traffico verso i pod sulle interfacce di rete di filiali è soggetto all'applicazione delle policy di rete Calico, ed è limitato esclusivamente all'applicazione dei gruppi di sicurezza Amazon EC2. La community sta compiendo un grosso sforzo per eliminare tale limitazione.

Prerequisiti

  • Un cluster Amazon EKS esistente. Per implementarne uno, consulta Guida introduttiva ad Amazon EKS.

  • Lo strumento a riga di comando kubectl installato sul computer o AWS CloudShell. La versione deve essere la stessa o fino a due versioni successive rispetto alla versione del cluster. Per installare o aggiornare kubectl, consulta Installazione di kubectl.

La procedura seguente illustra come installare Calico sui nodi di lavoro Linux nel cluster Amazon EKS. Per installare Calico sui nodi Windows, consultare Utilizzo di Calico nei container Windows Amazon EKS.

Installazione di Calico sui nodi Amazon EKS Linux

È possibile installare Calico utilizzando la procedura per Helm o i manifesti. I manifesti non vengono aggiornati da Amazon EKS, quindi ti consigliamo di utilizzare Helm perché i grafici sono conservati da Tigera.

Amazon EKS non verifica e verifica il nuovo operatore Tigera e la funzionalità Calico sui cluster Amazon EKS. Se riscontri problemi durante l'installazione e l'utilizzo di Calico, sottoponi i problemi direttamente all'operatore Tigera e a Project Calico. È sempre necessario contattare Tigera per la compatibilità di qualsiasi nuovo operatore Tigera e versione di Calico prima di installarli sul cluster.

Helm

Prerequisito

Helm versione 3.0 o successiva deve essere installato sul computer. Per installare o aggiornare Helm, consultare Utilizzo di Helm con Amazon EKS.

Installazione di Calico con Helm

  1. Aggiungi Project Calico al tuo repository Helm.

    helm repo add projectcalico https://docs.projectcalico.org/charts
  2. Se hai già aggiunto Calico, puoi aggiornarlo all'ultima versione rilasciata.

    helm repo update
  3. Installa la versione 3.21.4 o successiva dell'operatore Tigera Calico e le definizioni delle risorse personalizzate.

    helm install calico projectcalico/tigera-operator --version v3.21.4
  4. Visualizza le risorse nello spazio dei nomi tigera-operator.

    kubectl get all -n tigera-operator

    Output

    I valori nelle colonne DESIRED e READY per il replicaset devono corrispondere. I valori restituiti nel tuo caso sono diversi dai valori nel seguente output.

    NAME READY STATUS RESTARTS AGE pod/tigera-operator-c4b9549c7-h4zp5 1/1 Running 0 110m ... NAME DESIRED CURRENT READY AGE replicaset.apps/tigera-operator-c4b9549c7 1 1 1 2m35s
  5. Visualizza le risorse nello spazio dei nomi calico-system.

    kubectl get all -n calico-system

    Output

    I valori nelle colonne DESIRED e READY per il calico-node daemonset devono corrispondere. Anche i valori nelle colonne DESIRED e READY per i due replicasets devono corrispondere. I valori restituiti nel tuo caso sono diversi dai valori nel seguente output.

    NAME READY STATUS RESTARTS AGE pod/calico-kube-controllers-579b45dcf-z5tsf 1/1 Running 0 100m pod/calico-node-v9dhf 1/1 Running 0 100m pod/calico-typha-6f9c6786d-f2mc7 1/1 Running 0 100m ... NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/calico-node 1 1 1 1 1 kubernetes.io/os=linux 100m ... NAME DESIRED CURRENT READY AGE replicaset.apps/calico-kube-controllers-579b45dcf 1 1 1 100m replicaset.apps/calico-typha-6f9c6786d 1 1 1 100m
  6. Verifica che i registri per uno dei tuoi pod calico-node, calico-typha e tigera-operator non contengano ERROR. Sostituisci i valori nei comandi seguenti con i valori restituiti nell'output dei passaggi precedenti.

    kubectl logs tigera-operator-c4b9549c7-h4zp5 -n tigera-operator | grep ERROR kubectl logs calico-node-v9dhf -n calico-system | grep ERROR kubectl logs calico-typha-6f9c6786d-f2mc7 -n calico-system | grep ERROR

    Se non viene restituito alcun output dai comandi precedenti, nei tuoi registri non dovrebbe esserci alcun ERROR e tutto dovrebbe funzionare correttamente.

Manifests
Importante

Questi grafici non verranno conservati in futuro. Pertanto, ti consigliamo di utilizzare Helm perché i grafici Helm sono conservati.

Installazione di Calico utilizzando i manifesti

  1. Applica i manifesti Calico al cluster. Questi manifesti consentono di creare un DaemonSet nello spazio dei nomi calico-system.

    kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/master/config/master/calico-operator.yaml kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/master/config/master/calico-crs.yaml
  2. Visualizza le risorse nello spazio dei nomi calico-system.

    kubectl get daemonset calico-node --namespace calico-system

    Output

    I valori nelle colonne DESIRED e READY devono corrispondere. I valori restituiti nel tuo caso sono diversi dai valori nel seguente output.

    NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE calico-node 1 1 1 1 1 kubernetes.io/os=linux 26m

Demo policy Stars

Questa sezione illustra la demo della policy Stars fornita dalla documentazione di Project Calico e non è richiesta per la funzionalità Calico sul cluster. La demo consente di creare un servizio client, di front-end e di back-end sul cluster Amazon EKS. Inoltre, la demo consente di creare un'interfaccia utente grafica di gestione che mostra i percorsi di ingresso e uscita disponibili tra ogni servizio. Ti consigliamo di completare la demo su un cluster su cui non esegui carichi di lavoro di produzione.

Prima di creare eventuali policy di rete, tutti i servizi sono in grado di comunicare in modo bidirezionale. Dopo l'applicazione delle policy di rete, puoi vedere che il client può comunicare solo con il servizio di front-end, mentre il back-end accetta traffico solo dal front-end.

Per eseguire la demo policy Stars

  1. Applica i servizi di front-end, back-end, client e dell'interfaccia utente di gestione:

    kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/00-namespace.yaml kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/01-management-ui.yaml kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/02-backend.yaml kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/03-frontend.yaml kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/04-client.yaml
  2. Visualizza tutti i pod nel cluster.

    kubectl get pods --all-namespaces

    Output

    Nell'output, dovresti vedere i pod negli spazi dei nomi mostrati nel seguente output. Nel tuo caso, i pod NAMES e il numero di pod nella colonna READY sono diversi da quelli del seguente output. Non continuare finché non vedi pod con nomi simili e tutti hanno il valore Running nella colonna STATUS.

    NAMESPACE NAME READY STATUS RESTARTS AGE ... client client-xlffc 1/1 Running 0 5m19s ... management-ui management-ui-qrb2g 1/1 Running 0 5m24s stars backend-sz87q 1/1 Running 0 5m23s stars frontend-cscnf 1/1 Running 0 5m21s ...
  3. Per connetterti all'interfaccia utente di gestione, inoltra la porta locale 9001 al servizio management-ui in esecuzione sul cluster:

    kubectl port-forward service/management-ui -n management-ui 9001
  4. Aprire un browser sul sistema locale e specificare l'indirizzo http://localhost:9001/. Dovresti visualizzare l'interfaccia utente di gestione seguente. Il nodo C è il servizio client, il nodo F è il servizio front-end e il nodo B è il servizio di back-end. Ogni nodo dispone di accesso di comunicazione completo a tutti gli altri nodi, come indicato dalle righe colorate in grassetto.

    
                        Apri policy di rete
  5. Applicare le seguenti policy di rete per isolare tra loro i servizi:

    kubectl apply -n stars -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/policies/default-deny.yaml kubectl apply -n client -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/policies/default-deny.yaml
  6. Aggiorna il tuo browser. Poiché l'interfaccia utente di gestione non può più raggiungere i nodi, essi non vengono visualizzati nell'interfaccia utente.

  7. Applica le seguenti policy di rete per consentire all'interfaccia utente di gestione di accedere ai servizi:

    kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/policies/allow-ui.yaml kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/policies/allow-ui-client.yaml
  8. Aggiorna il tuo browser. L'interfaccia utente di gestione può raggiungere nuovamente i nodi, ma i nodi non sono in grado di comunicare tra loro.

    
                        Policy di rete accesso interfaccia utente
  9. Applicare le seguenti policy di rete per consentire il traffico dal servizio front-end al servizio back-end:

    kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/policies/backend-policy.yaml
  10. Aggiorna il tuo browser. Puoi vedere che il front-end può comunicare con il back-end.

    
                        Policy da front-end a back-end
  11. Applica la seguente policy di rete per consentire il traffico dal client al servizio di front-end.

    kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/policies/frontend-policy.yaml
  12. Aggiorna il tuo browser. Puoi vedere che il client può comunicare con il servizio di front-end. Il servizio di front-end può ancora comunicare con il servizio di back-end.

    
                        Policy di rete finale
  13. (Facoltativo) Al termine della demo, puoi eliminare le relative risorse.

    kubectl delete -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/04-client.yaml kubectl delete -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/03-frontend.yaml kubectl delete -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/02-backend.yaml kubectl delete -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/01-management-ui.yaml kubectl delete -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/manifests/00-namespace.yaml

    Anche dopo l'eliminazione delle risorse, possono essere presenti regole iptables sui nodi di lavoro che potrebbero interferire in modo imprevisto con la rete nel cluster. L'unico modo sicuro per rimuovere Calico è terminare tutti i nodi e riciclarli. Per terminare tutti i nodi, impostare il conteggio desiderato del Gruppo Auto Scaling su 0, quindi eseguire il backup al numero desiderato oppure terminare semplicemente i nodi. Se non si riesce a riciclare i nodi, vedere Disabilitazione e rimozione della Policy Calico nel repository GitHub di Calico per una procedura di ultima istanza.

Rimozione di Calico

Rimuovi Calico utilizzando il metodo con cui lo hai installato.

Helm

Rimuovi Calico dal tuo cluster.

helm uninstall calico
Manifests

Rimuovi Calico dal tuo cluster.

kubectl delete -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/master/config/master/calico-crs.yaml kubectl delete -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/master/config/master/calico-operator.yaml