Installieren des Calico-Add-ons - Amazon EKS

Installieren des Calico-Add-ons

Project Calico ist eine Netzwerkrichtlinien-Engine für Kubernetes. Durch die Durchsetzung von Netzwerkrichtlinien mit Calico können Sie eine Netzwerksegmentierung implementieren und eine strikte Trennung von Kundendaten gewährleisten. Dies ist in Mehrmandantenumgebungen nützlich, in denen Sie Mandanten voneinander isolieren müssen, oder zum Schaffen separater Umgebungen für Entwicklung, Staging und Produktion. Netzwerkrichtlinien haben mit AWS-Sicherheitsgruppen gemeinsam, dass Sie Regeln für eingehenden und ausgehenden Datenverkehr aufstellen können. Statt aber Sicherheitsgruppen Instances zuzuweisen, weisen Sie pods über pod-Auswahlen und -Bezeichnungen Netzwerkrichtlinien zu.

Überlegungen

  • Calico wird bei der Verwendung von Fargate mit Amazon EKS nicht unterstützt.

  • Calico fügt Regeln zu iptables auf dem Knoten hinzu, die möglicherweise eine höhere Priorität haben als vorhandene Regeln, die Sie bereits außerhalb von Calico implementiert haben. Ziehen Sie in Erwägung, vorhandene iptables-Regeln zu Ihren Calico-Richtlinien hinzuzufügen, um zu vermeiden, dass Regeln außerhalb der Calico-Richtlinie von Calico überschrieben werden.

  • Wenn Sie Amazon-VPC-CNI-Add-on-Version 1.10 oder früher verwenden, unterliegt der Datenverkehr von Sicherheitsgruppen für pods zu pods auf Zweigstellennetzwerkschnittstellen nicht der Durchsetzung von Calico-Netzwerkrichtlinien und ist nur auf die Durchsetzung von Amazon-EC2-Sicherheitsgruppen beschränkt. Wenn Sie 1.11.0 oder höher des Amazon-VPC-CNI-Add-ons verwenden, unterliegt der Datenverkehr zu pods auf Zweigstellennetzwerkschnittstellen der Durchsetzung von Calico-Netzwerkrichtlinien, wenn Sie für das Amazon-VPC-CNI-Add-on POD_SECURITY_GROUP_ENFORCING_MODE=standard eingestellt haben.

Voraussetzungen

  • Ein vorhandener Amazon-EKS-Cluster. Informationen zum Bereitstellen finden Sie unter Erste Schritte mit Amazon EKS.

  • Das kubectl-Befehlszeilen-Tool ist auf Ihrem Computer oder AWS CloudShell installiert. Die Version kann der Kubernetes-Version Ihres Clusters entsprechen oder eine Nebenversion älter oder neuer sein. Wenn Ihre Clusterversion beispielsweise 1.21 ist, können Sie kubectl-Version 1.20,1.21, oder 1.22 damit verwenden. Informationen zum Installieren oder Aktualisieren von kubectl finden Sie unter Installieren oder Aktualisieren von kubectl.

Das folgende Verfahren zeigt Ihnen, wie Sie Calico auf Linux-Knoten in Ihrem Amazon-EKS-Cluster installieren. Um Calico auf Windows-Knoten zu finden, siehe Benutzenvon Calico auf Amazon-EKS-Windows-Containern.

Installieren von Calico auf Linux-Knoten von Amazon EKS

Wichtig

Amazon EKS verwaltet die in den folgenden Verfahren verwendeten Manifeste oder Diagramme nicht. Um Calico auf Amazon EKS zu installieren, empfehlen wir, anstelle dieser Diagramme oder Manifeste den Calico Operator zu verwenden. Weitere Informationen finden Sie unter Important Announcement: Amazon EKS will no longer maintain and update Calico charts in this repository (Wichtige Ankündigung: Amazon EKS wird Calico-Diagramme in diesem Repository nicht mehr pflegen und aktualisieren) auf GitHub. Wenn bei der Installation und Nutzung von Calico Probleme auftreten, senden Sie diese direkt an Calico Operator und das Calico-Projekt. Vor deren Installation in Ihrem Cluster sollten Sie die Kompatibilität neuer Calico-Operator- und Calico-Versionen stets bei Tigera erfragen.

Calico lässt sich mit dem Verfahren für Helm oder für Manifeste installieren.

Helm

Voraussetzung

Helm-Version 3.0 oder höher ist auf Ihrem Computer installiert. Informationen zum Installieren oder Aktualisieren von Helm finden Sie unter Verwendung von Helm mit Amazon EKS.

So installieren Sie Calico mit Helm

  1. Fügen Sie Project Calico Ihrem Helm-Repository hinzu.

    helm repo add projectcalico https://docs.projectcalico.org/charts
  2. Wenn Sie Calico bereits hinzugefügt haben, sollten Sie es auf die neueste veröffentlichte Version aktualisieren.

    helm repo update
  3. Installieren Sie die Version 3.21.4 oder höher des Tigera-Calico-Operators sowie benutzerdefinierte Ressourcendefinitionen.

    helm install calico projectcalico/tigera-operator --version v3.21.4
  4. Zeigen Sie die Ressourcen im Namespace tigera-operator an.

    kubectl get all -n tigera-operator

    Die Beispielausgabe lautet wie folgt.

    Die Werte in den Spalten DESIRED und READY für das replicaset sollten übereinstimmen. Die bei Ihnen zurückgegebenen values unterscheiden sich von den Werten in der folgenden Ausgabe.

    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. Zeigen Sie die Ressourcen im Namespace calico-system an.

    kubectl get all -n calico-system

    Die Beispielausgabe lautet wie folgt.

    Die Werte in den Spalten DESIRED und READY für das DaemonSet von calico-node sollten übereinstimmen. Die Werte in den Spalten DESIRED und READY für die beiden replicasets sollten ebenfalls übereinstimmen. Die bei Ihnen zurückgegebenen values unterscheiden sich von den Werten in der folgenden Ausgabe.

    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. Vergewissern Sie sich, dass die Protokolle für einen Ihrer calico-node-, calico-typha- und tigera-operator pods-Pods nicht ERROR enthalten. Ersetzen Sie die Werte in den folgenden Befehlen durch die Werte, die in der Ausgabe für die vorherigen Schritte zurückgegeben wurden.

    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

    Wenn bei den vorherigen Befehlen keine Ausgabe zurückgegeben wird, dann ist ERROR in Ihren Protokollen nicht vorhanden und alles sollte korrekt ausgeführt werden.

Manifests

So installieren Sie Calico mit dem Manifest

  1. Wenden Sie das Calico-Manifest auf Ihren Cluster an. Diese Manifeste erstellen ein DaemonSet im Namespace 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. Zeigen Sie die Ressourcen im Namespace calico-system an.

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

    Die Beispielausgabe lautet wie folgt.

    Die Werte in den Spalten DESIRED und READY sollten übereinstimmen. Die bei Ihnen zurückgegebenen values unterscheiden sich von den Werten in der folgenden Ausgabe.

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

Stars Policy-Demo

In diesem Abschnitt wird die Stars-Policy-Demo der Project-Calico-Dokumentation Schritt für Schritt erläutert. Die Demo ist für Calico-Funktionalität in Ihrem Cluster nicht erforderlich. Die Demo erstellt einen Front-End-, Back-End- und Client-Service in Ihrem Amazon-EKS-Cluster. Außerdem wird in der Demo eine grafische Benutzeroberfläche für die Verwaltung erstellt, in der die verfügbaren Wege für ein- und ausgehenden Datenverkehr zwischen den einzelnen Services dargestellt werden. Wir empfehlen, die Demo in einem Cluster durchzuführen, in dem keine Produktions-Workloads ausgeführt werden.

Bevor Sie Netzwerkrichtlinien erstellen, können alle Services bidirektional kommunizieren. Nachdem Sie die Netzwerkrichtlinien angewendet haben, können Sie feststellen, dass der Client nur mit dem Front-End-Service kommuniziert und das Back-End nur Datenverkehr vom Front-End akzeptiert.

So führen Sie die Stars Policy-Demo aus

  1. Wenden Sie die Services für Front-End, Back-End, Client und Verwaltungs-Benutzeroberfläche an:

    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. Zeigen Sie alle pods im Cluster an.

    kubectl get pods -A

    Die Beispielausgabe lautet wie folgt.

    In Ihrer Ausgabe sollten pods in den Namespaces aufgeführt sein, die in der folgenden Ausgabe angezeigt werden. Die pod-NAMEN Ihrer und die Anzahl der pods in der Spalte READY unterscheiden sich von den Namen und der Anzahl in der folgenden Ausgabe. Fahren Sie erst dann fort, wenn pods mit ähnlichen Namen angezeigt werden und bei allen Running in der Spalte STATUS aufgeführt wird.

    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. Zum Herstellen einer Verbindung zur Verwaltungs-Benutzeroberfläche leiten Sie den lokalen Port 9001 an den management-ui-Service weiter, der in Ihrem Cluster ausgeführt wird:

    kubectl port-forward service/management-ui -n management-ui 9001
  4. Öffnen Sie einen Browser auf Ihrem lokalen System und verweisen Sie ihn an http://localhost:9001/. Die Verwaltungs-Benutzeroberfläche sollte angezeigt werden. Der C--Knoten ist der Client-Service, der F-Knoten ist der Front-End-Service und der B--Knoten ist der Back-End-Service. Jeder Knoten verfügt über vollständigen Kommunikationszugriff auf alle anderen Knoten, wie durch die fett markierten, farbigen Zeilen angegeben.

    
                        Öffnen der Netzwerkrichtlinie
  5. Wenden Sie die folgenden Netzwerkrichtlinien an, um die Services voneinander zu isolieren:

    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. Aktualisieren Sie Ihren Browser. Wie Sie feststellen, kann nun keiner der Knoten mehr über die Verwaltungs-Benutzeroberfläche erreicht werden. Die Knoten werden daher nicht mehr in der Benutzeroberfläche angezeigt.

  7. Wenden Sie die folgenden Netzwerkrichtlinien an, um der Verwaltungs-Benutzeroberfläche den Zugriff auf die Services zu erlauben:

    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. Aktualisieren Sie Ihren Browser. Wie Sie feststellen, können die Knoten nun wieder über die Verwaltungs-Benutzeroberfläche erreicht werden, sie können jedoch nicht miteinander kommunizieren.

    
                        Benutzeroberflächen-Zugriff – Netzwerkrichtlinie
  9. Wenden Sie die folgende Netzwerkrichtlinie an, um Verkehr vom Front-End-Service zum Back-End-Service zuzulassen:

    kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/policies/backend-policy.yaml
  10. Aktualisieren Sie Ihren Browser. Wie Sie feststellen, kann das Front-End mit dem Back-End kommunizieren.

    
                        Richtlinie für Datenverkehr zwischen Front-End und Back-End
  11. Wenden Sie die folgende Netzwerkrichtlinie an, um Datenverkehr vom Client zum Front-End-Service zuzulassen:

    kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/tutorials/stars-policy/policies/frontend-policy.yaml
  12. Aktualisieren Sie Ihren Browser. Wie Sie feststellen, kann der Client mit dem Front-End-Service kommunizieren. Der Front-End-Service kann nach wie vor mit dem Back-End-Service kommunizieren.

    
                        Endgültige Netzwerkrichtlinie
  13. (Optional) Wenn Sie die Demo abgeschlossen haben, können Sie die zugehörigen Ressourcen löschen.

    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

    Auch nach dem Löschen der Ressourcen können weiter iptables-Regeln für die Knoten vorhanden sein, die mit dem Netzwerk in Ihrem Cluster auf unerwartete Weise interagieren könnten. Der einzige sichere Weg, Calico zu entfernen, besteht darin, alle Knoten zu beenden und zu recyceln. Um alle Knoten zu beenden, legen Sie entweder die Anzahl der gewünschten Auto Scaling-Gruppen auf 0 und anschließend wieder auf die gewünschte Zahl fest oder beenden einfach die Knoten. Wenn Sie die Knoten nicht recyceln können, finden Sie unter Deaktivieren und Entfernen von Calico-Richtlinien im GitHub-Repository für Calico Informationen zu einem Verfahren, das nur angewendet werden sollte, wenn keine andere Möglichkeit besteht.

Remove Calico

Entfernen Sie Calico mit der gleichen Methode, mit der Sie Calico installiert haben.

Helm

Entfernen Sie Calico von Ihrem Cluster.

helm uninstall calico
Manifests

Entfernen Sie Calico von Ihrem 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