View a markdown version of this page

Verwenden Sie das AWS FIS aws:eks:pod-Aktionen - AWS Service zur Fehlerinjektion

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.

Verwenden Sie das AWS FIS aws:eks:pod-Aktionen

Sie können die Aktionen aws:eks:pod verwenden, um Fehler in die Kubernetes-Pods einzuschleusen, die in Ihren EKS-Clustern laufen.

Wenn eine Aktion initiiert wird, ruft FIS das FIS-Pod-Container-Image ab. eks-pod-actions.html#eks-pod-container-images Dieses Image wird dann verwendet, um einen Pod im EKS-Zielcluster zu erstellen. Der neu erstellte Pod ist für das Injizieren, Steuern und Überwachen des Fehlers verantwortlich. Bei allen FIS-EKS-Aktionen, mit Ausnahme von aws:eks:pod-delete, wird die Fehlerinjektion durch die Verwendung von ephemeren Containern erreicht, einer Kubernetes-Funktion, die die Erstellung temporärer Container innerhalb eines vorhandenen Pods ermöglicht. Der kurzlebige Container wird im selben Namespace wie der Zielcontainer gestartet und führt die gewünschten Fault-Injection-Aufgaben aus. Wenn kein Zielcontainer angegeben ist, wird der erste Container in der Pod-Spezifikation als Ziel ausgewählt.

FIS-Pod-Erstellungs-Workflow, der die kurzlebige Container-Injektion in Ziel-Pod-Container zeigt.
  1. FIS erstellt den FIS-Pod in dem Zielcluster, der in der Versuchsvorlage angegeben ist.

  2. Der FIS-Pod erstellt einen kurzlebigen Container im Ziel-Pod im selben Namespace wie der Zielcontainer.

  3. Der kurzlebige Container injiziert Fehler in den Namespace des Zielcontainers.

  4. Der FIS-Pod steuert und überwacht die Fehlerinjektion des ephemeren Containers und FIS steuert und überwacht den FIS-Pod.

Nach Abschluss des Experiments oder wenn ein Fehler auftritt, werden der kurzlebige Behälter und der FIS-Pod entfernt.

Aktionen

Einschränkungen

  • Die folgenden Aktionen funktionieren nicht mit: AWS Fargate

    • aws:eks:pod-network-blackhole-port

    • aws:eks:pod-network-latency

    • aws:eks:pod-network-packet-loss

  • Die folgenden Aktionen unterstützen den bridge Netzwerkmodus nicht:

    • aws:eks:pod-network-blackhole-port

    • aws:eks:pod-network-latency

    • aws:eks:pod-network-packet-loss

  • Für die folgenden Aktionen sind Root-Berechtigungen innerhalb des kurzlebigen Containers erforderlich.

    • aws:eks:pod-network-blackhole-port

    • aws:eks:pod-network-latency

    • aws:eks:pod-network-packet-loss

    Der temporäre Container erbt seine Berechtigungen aus dem Sicherheitskontext des Ziel-Pods. Wenn Sie die Container im Pod als Nicht-Root-Benutzer ausführen müssen, können Sie separate Sicherheitskontexte für die Container im Ziel-Pod einrichten.

  • Sie können Ziele vom Typ aws:eks:pod in Ihrer Experimentvorlage nicht mithilfe von Ressourcen-ARNs oder Ressourcen-Tags identifizieren. Sie müssen Ziele anhand der erforderlichen Ressourcenparameter identifizieren.

  • Die Aktionen aws:eks:pod-network-latency und aws:eks:pod-network-packet-loss sollten nicht parallel ausgeführt werden und auf denselben Pod abzielen. Abhängig vom Wert des von Ihnen angegebenen Parameters kann die Aktion im Status „Abgeschlossen“ oder „Fehlgeschlagen“ enden: maxErrors

    • maxErrorsPercentIst 0 (Standard), endet die Aktion im Status Fehlgeschlagen.

    • Andernfalls summiert sich der Fehler auf das maxErrorsPercent Budget. Wenn die Anzahl der fehlgeschlagenen Injektionen die angegebene Anzahl nicht erreichtmaxErrors, wird die Aktion abgeschlossen.

    • Sie können diese Fehler anhand der Protokolle des injizierten temporären Containers im Ziel-Pod identifizieren. Es wird scheitern mit. Exit Code: 16

  • Die Aktion aws:eks:pod-network-blackhole-port sollte nicht parallel zu anderen Aktionen ausgeführt werden, die auf denselben Pod abzielen und denselben verwenden. trafficType Parallele Aktionen, die unterschiedliche Verkehrstypen verwenden, werden unterstützt.

  • FIS kann den Status der Fehlerinjektion nur überwachen, wenn der securityContext der Ziel-Pods auf readOnlyRootFilesystem: false eingestellt ist. Ohne diese Konfiguration schlagen alle EKS-Pod-Aktionen fehl.

Voraussetzungen

  • Installieren Sie das AWS CLI auf Ihrem Computer. Dies ist nur erforderlich, wenn Sie das AWS CLI zum Erstellen von IAM-Rollen verwenden. Weitere Informationen finden Sie unter Installieren oder Aktualisieren von. AWS CLI

  • Installieren Sie kubectl auf Ihrem Computer. Dies ist nur für die Interaktion mit dem EKS-Cluster erforderlich, um die Zielanwendung zu konfigurieren oder zu überwachen. Weitere Informationen finden Sie unter https://kubernetes.io/docs/tasks/tools/.

  • Die unterstützte Mindestversion von EKS ist 1.30.

Erstellen Sie eine Experimentrolle

Um ein Experiment durchzuführen, müssen Sie eine IAM-Rolle für das Experiment konfigurieren. Weitere Informationen finden Sie unter IAM-Rollen für AWS FIS-Experimente. Die erforderlichen Berechtigungen für diese Rolle hängen von der Aktion ab, die Sie verwenden. Sehen Sie sich die AWS FIS-Aktionen an, die darauf abzielen aws:eks:pod, um die erforderlichen Berechtigungen für Ihre Aktion zu finden.

Das Kubernetes-Servicekonto konfigurieren

Konfigurieren Sie ein Kubernetes-Dienstkonto, um Experimente mit Zielen im angegebenen Kubernetes-Namespace durchzuführen. Im folgenden Beispiel lautet myserviceaccount das Dienstkonto und der Namespace. default Beachten Sie, dass default dies einer der Standard-Kubernetes-Namespaces ist.

So konfigurieren Sie Ihr Kubernetes-Dienstkonto
  1. Erstellen Sie eine Datei mit dem Namen rbac.yaml und fügen Sie Folgendes hinzu.

    kind: ServiceAccount apiVersion: v1 metadata: namespace: default name: myserviceaccount --- kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: namespace: default name: role-experiments rules: - apiGroups: [""] resources: ["configmaps"] verbs: [ "get", "create", "patch", "delete"] - apiGroups: [""] resources: ["pods"] verbs: ["create", "list", "get", "delete", "deletecollection"] - apiGroups: [""] resources: ["pods/ephemeralcontainers"] verbs: ["update"] - apiGroups: [""] resources: ["pods/exec"] verbs: ["create"] - apiGroups: ["apps"] resources: ["deployments"] verbs: ["get"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: bind-role-experiments namespace: default subjects: - kind: ServiceAccount name: myserviceaccount namespace: default - apiGroup: rbac.authorization.k8s.io kind: User name: fis-experiment roleRef: kind: Role name: role-experiments apiGroup: rbac.authorization.k8s.io
  2. Führen Sie den folgenden Befehl aus.

    kubectl apply -f rbac.yaml

Gewähren Sie IAM-Benutzern und -Rollen Zugriff auf Kubernetes-APIs

Folgen Sie den Schritten, die in der Dokumentation unter IAM-Identitäten mit Kubernetes-Berechtigungen verknüpfen beschrieben werden. EKS

Option 1: Zugriffseinträge erstellen

Wir empfehlen die Verwendung von Access Entries. Sie können den folgenden Befehl verwenden, um einen Access-Eintrag zu erstellen, der die IAM-Rolle dem Kubernetes-Benutzer zuordnet. fis-experiment Weitere Informationen finden Sie unter Gewähren Sie IAM-Benutzern Zugriff auf Kubernetes mit EKS-Zugriffseinträgen.

aws eks create-access-entry \ --principal-arn arn:aws:iam::123456789012:role/fis-experiment-role \ --username fis-experiment \ --cluster-name my-cluster
Wichtig

Um Zugriffseinträge nutzen zu können, muss der Authentifizierungsmodus des EKS-Clusters entweder auf den API_AND_CONFIG_MAP Modus oder konfiguriert werden. API

Option 2: Fügen Sie Einträge zur aws-auth hinzu ConfigMap

Sie können auch den folgenden Befehl verwenden, um eine Identitätszuordnung zu erstellen. Weitere Informationen finden Sie in der Dokumentation zu eksctl unter Manage IAM users and roles.

eksctl create iamidentitymapping \ --arn arn:aws:iam::123456789012:role/fis-experiment-role \ --username fis-experiment \ --cluster my-cluster
Wichtig

Die Nutzung des eksctl-Toolkits zur Konfiguration von Identitätszuordnungen führt zur Erstellung von Einträgen innerhalb von. aws-auth ConfigMap Es ist wichtig zu beachten, dass diese generierten Einträge die Aufnahme einer Pfadkomponente nicht unterstützen. Folglich darf der als Eingabe bereitgestellte ARN kein Pfadsegment enthalten (z. B.arn:aws:iam::123456789012:role/service-role/fis-experiment-role).

Bilder von Pod-Containern

Die von AWS FIS bereitgestellten Pod-Container-Images werden in Amazon ECR gehostet. Wenn Sie auf ein Bild von Amazon ECR verweisen, müssen Sie die vollständige Image-URI verwenden.

Das Pod-Container-Image ist auch in der AWS ECR Public Gallery verfügbar.

AWS-Region Image-URI
US East (Ohio) 051821878176.dkr.ecr.us-east-2.amazonaws.com/aws-fis-pod:0.1
USA Ost (Nord-Virginia) 731367659002.dkr.ecr.us-east-1.amazonaws.com/aws-fis-pod:0.1
USA West (Nordkalifornien) 080694859247.dkr.ecr.us-west-1.amazonaws.com/aws-fis-pod:0.1
USA West (Oregon) 864386544765.dkr.ecr.us-west-2.amazonaws.com/aws-fis-pod:0.1
Africa (Cape Town) 056821267933.dkr.ecr.af-south-1.amazonaws.com/aws-fis-pod:0.1
Asien-Pazifik (Hongkong) 246405402639.dkr.ecr.ap-east-1.amazonaws.com/aws-fis-pod:0.1
Asien-Pazifik (Mumbai) 524781661239.dkr.ecr.ap-south-1.amazonaws.com/aws-fis-pod:0.1
Asien-Pazifik (Osaka) 148336246925.dkr.ecr.ap-northeast-3.amazonaws.com/aws-fis-pod:0.1
Asien-Pazifik (Seoul) 526524659354.dkr.ecr.ap-northeast-2.amazonaws.com/aws-fis-pod:0.1
Asien-Pazifik (Singapur) 316401638346.dkr.ecr.ap-southeast-1.amazonaws.com/aws-fis-pod:0.1
Asien-Pazifik (Sydney) 488104106298.dkr.ecr.ap-southeast-2.amazonaws.com/aws-fis-pod:0.1
Asien-Pazifik (Tokio) 635234321696.dkr.ecr.ap-northeast-1.amazonaws.com/aws-fis-pod:0.1
Canada (Central) 490658072207.dkr.ecr.ca-central-1.amazonaws.com/aws-fis-pod:0.1
Europe (Frankfurt) 713827034473.dkr.ecr.eu-central-1.amazonaws.com/aws-fis-pod:0.1
Europa (Irland) 205866052826.dkr.ecr.eu-west-1.amazonaws.com/aws-fis-pod:0.1
Europa (London) 327424803546.dkr.ecr.eu-west-2.amazonaws.com/aws-fis-pod:0.1
Europa (Milan) 478809367036.dkr.ecr.eu-south-1.amazonaws.com/aws-fis-pod:0.1
Europa (Paris) 154605889247.dkr.ecr.eu-west-3.amazonaws.com/aws-fis-pod:0.1
Europa (Spain) 395402409451.dkr.ecr.eu-south-2.amazonaws.com/aws-fis-pod:0.1
Europa (Stockholm) 263175118295.dkr.ecr.eu-north-1.amazonaws.com/aws-fis-pod:0.1
Europa (Zürich) 604225987275.dkr.ecr.eu-central-2.amazonaws.com/aws-fis-pod:0.1
Middle East (Bahrain) 065825543785.dkr.ecr.me-south-1.amazonaws.com/aws-fis-pod:0.1
Naher Osten (VAE) 438374459301.dkr.ecr.me-central-1.amazonaws.com/aws-fis-pod:0.1
Südamerika (São Paulo) 767113787785.dkr.ecr.sa-east-1.amazonaws.com/aws-fis-pod:0.1
AWS GovCloud (US-East) 246533647532.dkr.ecr.us-gov-east-1.amazonaws.com/aws-fis-pod:0.1
AWS GovCloud (US-West) 246529956514.dkr.ecr.us-gov-west-1.amazonaws.com/aws-fis-pod:0.1

Beispiel für eine Versuchsvorlage

Im Folgenden finden Sie ein Beispiel für eine Versuchsvorlage für die aws:eks:pod-network-latency Aktion.

{ "description": "Add latency and jitter to the network interface for the target EKS Pods", "targets": { "myPods": { "resourceType": "aws:eks:pod", "parameters": { "clusterIdentifier": "mycluster", "namespace": "default", "selectorType": "labelSelector", "selectorValue": "mylabel=mytarget" }, "selectionMode": "COUNT(3)" } }, "actions": { "EksPod-latency": { "actionId": "aws:eks:pod-network-latency", "description": "Add latency", "parameters": { "kubernetesServiceAccount": "myserviceaccount", "duration": "PT5M", "delayMilliseconds": "200", "jitterMilliseconds": "10", "sources": "0.0.0.0/0" }, "targets": { "Pods": "myPods" } } }, "stopConditions": [ { "source": "none", } ], "roleArn": "arn:aws:iam::111122223333:role/fis-experiment-role", "tags": { "Name": "EksPodNetworkLatency" } }