Beschränken Sie den Pod-Netzwerkverkehr mit Kubernetes Netzwerkrichtlinien - Amazon EKS

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Beschränken Sie den Pod-Netzwerkverkehr mit Kubernetes Netzwerkrichtlinien

Sie können eine verwenden Kubernetes Netzwerkrichtlinie zur Beschränkung des Netzwerkverkehrs von und zu Ihrem Pods. Weitere Informationen finden Sie unter Netzwerkrichtlinien in der Kubernetes -Dokumentation.

Sie müssen Folgendes konfigurieren, um diese Funktion verwenden zu können:

  1. Richten Sie die Richtliniendurchsetzung ein unter Pod Inbetriebnahme. Du machst das im aws-node Container des VPC CNIDaemonSet.

  2. Aktivieren Sie den Netzwerkrichtlinienparameter für das Add-on.

  3. Konfigurieren Sie Ihren Cluster für die Verwendung von Kubernetes Netzwerkrichtlinie

Bevor Sie beginnen, überprüfen Sie die Überlegungen. Weitere Informationen finden Sie unter Überlegungen.

Voraussetzungen

Die folgenden Voraussetzungen müssen für die Funktion erfüllt sein:

* .Minimale Clusterversion Ein vorhandener EKS Amazon-Cluster. Informationen zum Bereitstellen finden Sie unter Erste Schritte mit Amazon EKS. Der Cluster muss Kubernetes Version 1.25 oder höher. Auf dem Cluster muss einer der folgenden ausgeführt werden Kubernetes Versionen und Plattformversionen, die in der folgenden Tabelle aufgeführt sind. Beachten Sie, dass irgendwelche Kubernetes und Plattformversionen, die später als die aufgeführten sind, werden ebenfalls unterstützt. Sie können Ihre aktuelle Version überprüfen Kubernetes Version durch Ersetzen my-cluster geben Sie den folgenden Befehl mit dem Namen Ihres Clusters ein und führen Sie dann den geänderten Befehl aus:

+

aws eks describe-cluster --name my-cluster --query cluster.version --output text

+

Kubernetes-Version Plattformversion

1.27.4

eks.5

1.26.7

eks.6

1.25.12

eks.7

* VPC CNI .Mindestversion Version 1.14 oder höher von Amazon VPC CNI plugin for Kubernetes auf Ihrem Cluster. Sie können Ihre aktuelle Version mit dem folgenden Befehl überprüfen:

+

kubectl describe daemonset aws-node --namespace kube-system | grep amazon-k8s-cni: | cut -d : -f 3

+ Wenn Ihre Version älter als ist1.14, finden Sie Informationen Amazon aktualisieren VPC CNI (EKSAmazon-Add-on) zum Upgrade auf Version 1.14 oder höher. * .Minimale Linux-Kernelversion Ihre Knoten müssen über eine Linux-Kernelversion 5.10 oder eine neuere Version verfügen. Sie können Ihre Kernelversion mit uname -r überprüfen. Wenn Sie die neuesten Versionen von Amazon Optimized Amazon Linux, Amazon EKS Optimized Accelerated Amazon EKS Linux und Bottlerocket AMIs verwendenAMIs, verfügen diese bereits über die erforderliche Kernel-Version.

+ Die von Amazon EKS optimierte beschleunigte Amazon AMI Linux-Version v20231116 oder höher haben eine Kernel-Version5.10.

Schritt 1: Richten Sie die Richtliniendurchsetzung ein unter Pod Startup

Das Tool Amazon VPC CNI plugin for Kubernetes konfiguriert Netzwerkrichtlinien für Pods parallel zur Pod-Bereitstellung. Bis alle Richtlinien für den neuen Pod konfiguriert sind, beginnen Container im neuen Pod mit einer standardmäßigen Zulassungsrichtlinie. Dies wird als Standardmodus bezeichnet. Eine standardmäßige Zulassungsrichtlinie bedeutet, dass der gesamte eingehende und ausgehende Datenverkehr zu und von den neuen Pods zugelassen ist. Für die Pods werden beispielsweise keine Firewallregeln durchgesetzt (der gesamte Datenverkehr ist zulässig), bis der neue Pod mit den aktiven Richtlinien aktualisiert wurde.

Wenn die NETWORK_POLICY_ENFORCING_MODE Variable auf gesetzt ist, VPC CNI beginnen Podsstrict, die den Pod verwenden, mit einer standardmäßigen Ablehnungsrichtlinie, dann werden die Richtlinien konfiguriert. Dies wird als strikter Modus bezeichnet. Im strikten Modus benötigen Sie eine Netzwerkrichtlinie für jeden Endpunkt, auf den Ihre Pods in Ihrem Cluster zugreifen müssen. Beachten Sie, dass diese Anforderung gilt für CoreDNS Hülsen. Die standardmäßige Ablehnungsrichtlinie ist nicht für Pods mit Host-Netzwerk konfiguriert.

Sie können die Standard-Netzwerkrichtlinie ändern, indem Sie die Umgebungsvariable NETWORK_POLICY_ENFORCING_MODE strict im aws-node Container von auf setzen VPC CNIDaemonSet.

env: - name: NETWORK_POLICY_ENFORCING_MODE value: "strict"

Schritt 2: Aktivieren Sie den Netzwerkrichtlinienparameter für das Add-on

Das Netzwerkrichtlinien-Feature verwendet standardmäßig den Port 8162 auf dem Knoten für Metriken. Außerdem verwendete das Feature den Port 8163 für Zustandstests. Wenn Sie eine andere Anwendung auf die Knoten oder innerhalb von Pods ausführen, die diese Ports verwenden müssen, kann die App nicht ausgeführt werden. In der VPC CNI Version v1.14.1 oder höher können Sie diese Ports ändern.

Gehen Sie wie folgt vor, um den Netzwerkrichtlinienparameter für das Add-on zu aktivieren.

AWS Management Console
  1. Öffnen Sie die EKSAmazon-Konsole.

  2. Wählen Sie im linken Navigationsbereich Clusters und dann den Namen des Clusters aus, für den Sie das VPC CNI Amazon-Add-on konfigurieren möchten.

  3. Wählen Sie die Registerkarte Add-ons.

  4. Wählen Sie das Kästchen oben rechts in der Add-On-Box aus und wählen Sie dann Edit (Bearbeiten).

  5. Auf der Seite Configure name of add-on Seite:

    1. Wählen Sie in der Versionsliste eine v1.14.0-eksbuild.3 oder eine neuere Version aus.

    2. Erweitern Sie Optionale Konfigurationseinstellungen.

    3. Geben Sie den JSON Schlüssel "enableNetworkPolicy": und den Wert "true" in das Feld Konfigurationswerte ein. Der resultierende Text muss ein gültiges JSON Objekt sein. Wenn dieser Schlüssel und dieser Wert die einzigen Daten im Textfeld sind, setzen Sie den Schlüssel und den Wert in geschweifte Klammern { }.

      Im folgenden Beispiel ist die Netzwerkrichtlinien-Funktion aktiviert und Metriken und Integritätstests sind auf die Standard-Portnummern eingestellt:

      { "enableNetworkPolicy": "true", "nodeAgent": { "healthProbeBindAddr": "8163", "metricsBindAddr": "8162" } }
Helm

Wenn Sie das installiert haben Amazon VPC CNI plugin for Kubernetes über helm können Sie die Konfiguration aktualisieren, um die Ports zu ändern.

  1. Führen Sie den folgenden Befehl aus, um die Ports zu ändern. Legen Sie die Portnummer im Wert für Schlüssel nodeAgent.metricsBindAddr bzw. Schlüssel nodeAgent.healthProbeBindAddr fest.

    helm upgrade --set nodeAgent.metricsBindAddr=8162 --set nodeAgent.healthProbeBindAddr=8163 aws-vpc-cni --namespace kube-system eks/aws-vpc-cni
kubectl
  1. Öffnen Sie das DaemonSet aws-node in Ihrem Editor.

    kubectl edit daemonset -n kube-system aws-node
  2. Ersetzen Sie die Portnummern in den folgenden Befehlsargumenten args: im aws-network-policy-agent Container im VPC CNI aws-node Daemonset-Manifest.

    - args: - --metrics-bind-addr=:8162 - --health-probe-bind-addr=:8163

Schritt 3: Mounten Sie das Berkeley Packet Filter (BPF) -Dateisystem auf Ihren Knoten

Sie müssen das Berkeley Packet Filter (BPF) -Dateisystem auf jedem Ihrer Knoten mounten.

Anmerkung

Wenn es sich bei Ihrem Cluster um eine Version 1.27 oder höher handelt, können Sie diesen Schritt überspringen, da alle für Amazon EKS optimierten Versionen von Amazon Linux und Bottlerocket AMIs für 1.27 oder später bereits über diese Funktion verfügen.

Bei allen anderen Cluster-Versionen können Sie diesen Schritt überspringen, wenn Sie das für Amazon EKS optimierte Amazon Linux auf Version v20230703 oder höher aktualisieren oder wenn Sie das Bottlerocket AMI auf Version v1.0.2 oder höher aktualisieren.

  1. Mounten Sie das Berkeley Packet Filter (BPF) -Dateisystem auf jedem Ihrer Knoten.

    sudo mount -t bpf bpffs /sys/fs/bpf
  2. Fügen Sie dann denselben Befehl zu Ihren Benutzerdaten in Ihrer Startvorlage für Ihre Amazon EC2 Auto Scaling Scaling-Gruppen hinzu.

Schritt 4: Konfigurieren Sie Ihren zu verwendenden Cluster Kubernetes Netzwerkrichtlinien

Konfigurieren Sie den zu verwendenden Cluster Kubernetes Netzwerkrichtlinien. Sie können dies für ein EKS Amazon-Add-on oder ein selbstverwaltetes Add-On festlegen.

AWS Management Console
  1. Öffnen Sie die EKSAmazon-Konsole.

  2. Wählen Sie im linken Navigationsbereich Clusters und dann den Namen des Clusters aus, für den Sie das VPC CNI Amazon-Add-on konfigurieren möchten.

  3. Wählen Sie die Registerkarte Add-ons.

  4. Wählen Sie das Kästchen oben rechts in der Add-On-Box aus und wählen Sie dann Edit (Bearbeiten).

  5. Auf der Seite Configure name of addon Seite:

    1. Wählen Sie in der Versionsliste eine v1.14.0-eksbuild.3 oder eine neuere Version aus.

    2. Erweitern Sie Optionale Konfigurationseinstellungen.

    3. Geben Sie den JSON Schlüssel "enableNetworkPolicy": und den Wert "true" in das Feld Konfigurationswerte ein. Der resultierende Text muss ein gültiges JSON Objekt sein. Wenn dieser Schlüssel und dieser Wert die einzigen Daten im Textfeld sind, setzen Sie den Schlüssel und den Wert in geschweifte Klammern { }. Das folgende Beispiel zeigt, dass die Netzwerkrichtlinie aktiviert ist:

      { "enableNetworkPolicy": "true" }

      Der folgende Screenshot zeigt ein Beispiel für dieses Szenario.

      <shared id="consolelong"/>zeigt das VPC CNI Add-on mit Netzwerkrichtlinie in der optionalen Konfiguration.
AWS CLI
  1. Führen Sie den folgenden AWS CLI Befehl aus. my-clusterErsetzen Sie durch den Namen Ihres Clusters und die IAM Rolle ARN durch die Rolle, die Sie verwenden.

    aws eks update-addon --cluster-name my-cluster --addon-name vpc-cni --addon-version v1.14.0-eksbuild.3 \ --service-account-role-arn arn:aws: iam::123456789012:role/AmazonEKSVPCCNIRole \ --resolve-conflicts PRESERVE --configuration-values '{"enableNetworkPolicy": "true"}'
Helm

Wenn Sie das installiert haben Amazon VPC CNI plugin for Kubernetes über können Sie die Konfiguration aktualisierenhelm, um die Netzwerkrichtlinie zu aktivieren.

  1. Führen Sie den folgenden Befehl aus, um die Netzwerkrichtlinie zu aktivieren.

    helm upgrade --set enableNetworkPolicy=true aws-vpc-cni --namespace kube-system eks/aws-vpc-cni
kubectl
  1. Öffnen Sie das ConfigMap amazon-vpc-cni in Ihrem Editor.

    kubectl edit configmap -n kube-system amazon-vpc-cni -o yaml
  2. Fügen Sie data in ConfigMap die folgende Zeile hinzu:

    enable-network-policy-controller: "true"

    Nachdem Sie die Zeile hinzugefügt haben, ConfigMap sollte sie wie im folgenden Beispiel aussehen.

    apiVersion: v1 kind: ConfigMap metadata: name: amazon-vpc-cni namespace: kube-system data: enable-network-policy-controller: "true"
  3. Öffnen Sie das DaemonSet aws-node in Ihrem Editor.

    kubectl edit daemonset -n kube-system aws-node
  4. Ersetzen Sie das false durch true im Befehlsargument --enable-network-policy=false args: im aws-network-policy-agent Container im VPC CNI aws-node Daemonset-Manifest.

    - args: - --enable-network-policy=true

Schritt 5. Nächste Schritte

Nachdem Sie die Konfiguration abgeschlossen haben, vergewissern Sie sich, dass die aws-node Pods auf Ihrem Cluster ausgeführt werden.

kubectl get pods -n kube-system | grep 'aws-node\|amazon'

Eine Beispielausgabe sieht wie folgt aus.

aws-node-gmqp7 2/2 Running 1 (24h ago) 24h aws-node-prnsh 2/2 Running 1 (24h ago) 24h

In den Versionen 1.14 und höher befinden sich 2 Container in den aws-node Pods. In früheren Versionen und wenn die Netzwerkrichtlinie deaktiviert ist, gibt es nur einen einzigen Container in den aws-node-Pods.

Sie können jetzt bereitstellen Kubernetes Netzwerkrichtlinien für Ihren Cluster.

Zu implementieren Kubernetes Netzwerkrichtlinien, die Sie erstellen Kubernetes NetworkPolicyObjekte und stellen sie in Ihrem Cluster bereit. NetworkPolicyObjekte sind auf einen Namespace beschränkt. Sie implementieren Richtlinien, um den Verkehr zwischen Pods basierend auf Labelselektoren, Namespaces und IP-Adressbereichen. Weitere Informationen zum Erstellen von NetworkPolicy Objekten finden Sie unter Netzwerkrichtlinien im Kubernetes -Dokumentation.

Durchsetzung von Kubernetes NetworkPolicyObjekte wird implementiert mit dem Extended Berkeley Packet Filter (eBPF). Im Vergleich zu iptables basierten Implementierungen bietet es eine geringere Latenz und geringere Leistungsmerkmale, einschließlich einer geringeren CPU Auslastung und der Vermeidung sequentieller Suchvorgänge. Darüber hinaus eBPF Sonden bieten Zugriff auf kontextreiche Daten, mit deren Hilfe komplexe Probleme auf Kernelebene behoben und die Beobachtbarkeit verbessert werden können. Amazon EKS unterstützt eine eBPFEin basiertes Exportprogramm, das die Tests nutzt, um die Richtlinienergebnisse auf jedem Knoten zu protokollieren und die Daten zur Unterstützung beim Debuggen an externe Log-Collectors zu exportieren. Weitere Informationen finden Sie in der E-Dokumentation. BPF