Utilisez les actions AWS FIS aws:eks:pod - AWS Service d'injection de défauts

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisez les actions AWS FIS aws:eks:pod

Vous pouvez utiliser les actions aws:eks:pod pour injecter des erreurs dans les pods Kubernetes exécutés dans vos clusters. EKS

Lorsqu'une action est lancée, FIS récupère l'image du conteneur FIS Pod. Cette image est ensuite utilisée pour créer un pod dans le EKS cluster ciblé. Le module nouvellement créé est chargé d'injecter, de contrôler et de surveiller le défaut. Pour toutes les FIS EKS actions, à l'exception de aws:eks:pod-delete, cela est possible grâce à l'utilisation de conteneurs éphémères, une fonctionnalité de Kubernetes qui permet de créer des conteneurs temporaires dans un pod existant. Le conteneur éphémère exécute les tâches d'injection de défauts souhaitées dans le Target Pod.

Diagram showing FIS Pod creation and fault injection process in an EKS Cluster environment.
  1. FIScrée le FIS Pod dans le cluster fourni dans le modèle d'expérience.

  2. Le FIS Pod crée un conteneur éphémère dans le Target Pod.

  3. Le FIS Pod contrôle et surveille l'injection défectueuse du contenant éphémère et FIS contrôle et surveille le FIS Pod.

À la fin de l'expérience ou en cas d'erreur, le contenant éphémère et le FIS pod sont retirés.

Actions

Limites

  • Les actions suivantes ne fonctionnent pas avec AWS Fargate :

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

    • aws:eks:pod-network-latency

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

  • Les actions suivantes ne sont pas compatibles avec le mode bridge réseau :

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

    • aws:eks:pod-network-latency

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

  • Vous ne pouvez pas identifier les cibles de type aws:eks:pod dans votre modèle d'expérience à l'aide de ressources ou de balises de ressourceARNs. Vous devez identifier les cibles à l'aide des paramètres de ressources requis.

  • Les actions aws:eks:pod-network-latency ne aws:eks:pod-network-packet-loss doivent pas être exécutées en parallèle et cibler le même pod. Selon la valeur du maxErrors paramètre que vous spécifiez, l'action peut se terminer en état terminé ou en échec :

    • Si la valeur maxErrorsPercent est 0 (valeur par défaut), l'action se terminera par un échec.

    • Dans le cas contraire, l'échec alourdira le maxErrorsPercent budget. Si le nombre d'injections échouées n'atteint pas le nombre indiquémaxErrors, l'action sera terminée.

    • Vous pouvez identifier ces défaillances à partir des journaux du conteneur éphémère injecté dans le pod cible. Cela échouera avecExit Code: 16.

  • L'action ne aws:eks:pod-network-blackhole-port doit pas être exécutée en parallèle avec d'autres actions qui ciblent le même pod et l'utilisenttrafficType. Les actions parallèles utilisant différents types de trafic sont prises en charge.

  • FISne peut surveiller l'état de l'injection de défauts que lorsque securityContext l'un des pods cibles est réglé surreadOnlyRootFilesystem: false. Sans cette configuration, toutes les actions du EKS pod échoueront.

Prérequis

  • Installez-le AWS CLI sur votre ordinateur. Cela n'est nécessaire que si vous comptez utiliser le AWS CLI pour créer IAM des rôles. Pour plus d'informations, consultez la section Installation ou mise à jour du AWS CLI.

  • Installer kubectl sur votre ordinateur. Cela n'est nécessaire que pour interagir avec le EKS cluster afin de configurer ou de surveiller l'application cible. Pour plus d'informations, consultez https://kubernetes.io/docs/tasks/tools/.

  • La version minimale prise en charge de EKS est 1.23.

Création d'un rôle d'expérience

Pour exécuter un test, vous devez configurer un IAM rôle pour le test. Pour de plus amples informations, veuillez consulter Rôles IAM pour les expériences AWS FIS. Les autorisations requises pour ce rôle dépendent de l'action que vous utilisez. Reportez-vous aux AWS FISactions ciblées aws:eks:pod pour trouver les autorisations nécessaires à votre action.

Configuration du compte de service Kubernetes

Configurez un compte de service Kubernetes pour exécuter des tests avec des cibles dans l'espace de noms Kubernetes spécifié. Dans l'exemple suivant, le compte de service est myserviceaccount et l'espace de noms est default. Notez que default est l'un des espaces de noms Kubernetes standard.

Pour configurer votre compte de service Kubernetes
  1. Créez un fichier nommé rbac.yaml et ajoutez ce qui suit.

    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. Exécutez la commande suivante.

    kubectl apply -f rbac.yaml

Accorder IAM aux utilisateurs et aux rôles l'accès à Kubernetes APIs

Suivez les étapes expliquées dans la section Associer IAM les identités aux autorisations Kubernetes dans la documentation. EKS

Nous vous recommandons de l'utiliser Access Entries en suivant les étapes expliquées dans Accorder aux IAM utilisateurs l'accès à Kubernetes avec EKS entrées d'accès.

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

Afin de tirer parti des entrées d'accès, le mode d'authentification du EKS cluster doit être configuré sur le API mode API_AND_CONFIG_MAP ou.

Vous pouvez également utiliser la commande suivante pour créer un mappage d'identité. Pour plus d'informations, consultez la section Gérer IAM les utilisateurs et les rôles dans la eksctl documentation.

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

L'utilisation de la boîte à outils eksctl pour configurer les mappages d'identité entraînera la création d'entrées dans le. aws-auth ConfigMap Il est important de noter que ces entrées générées ne prennent pas en charge l'inclusion d'un composant de chemin. Par conséquent, l'entrée ARN fournie ne doit pas contenir de segment de chemin (par exemple,arn:aws:iam::123456789012:role/service-role/fis-experiment-role).

Images du conteneur Pod

Les images du conteneur de pods fournies par AWS FIS sont hébergées sur AmazonECR. Lorsque vous référencez une image d'AmazonECR, vous devez utiliser l'image complèteURI.

L'image du conteneur du pod est également disponible dans la galerie AWS ECR publique.

Région AWS Image URI
USA Est (Ohio) 051821878176.dkr.ecr.us-east-2.amazonaws.com/aws-fis-pod:0.1
USA Est (Virginie du Nord) 731367659002.dkr.ecr.us-east-1.amazonaws.com/aws-fis-pod:0.1
USA Ouest (Californie du Nord) 080694859247.dkr.ecr.us-west-1.amazonaws.com/aws-fis-pod:0.1
USA Ouest (Oregon) 864386544765.dkr.ecr.us-west-2.amazonaws.com/aws-fis-pod:0.1
Afrique (Le Cap) 056821267933.dkr.ecr.af-south-1.amazonaws.com/aws-fis-pod:0.1
Asie-Pacifique (Hong Kong) 246405402639.dkr.ecr.ap-east-1.amazonaws.com/aws-fis-pod:0.1
Asie-Pacifique (Mumbai) 524781661239.dkr.ecr.ap-south-1.amazonaws.com/aws-fis-pod:0.1
Asia Pacific (Seoul) 526524659354.dkr.ecr.ap-northeast-2.amazonaws.com/aws-fis-pod:0.1
Asie-Pacifique (Singapour) 316401638346.dkr.ecr.ap-southeast-1.amazonaws.com/aws-fis-pod:0.1
Asie-Pacifique (Sydney) 488104106298.dkr.ecr.ap-southeast-2.amazonaws.com/aws-fis-pod:0.1
Asie-Pacifique (Tokyo) 635234321696.dkr.ecr.ap-northeast-1.amazonaws.com/aws-fis-pod:0.1
Canada (Centre) 490658072207.dkr.ecr.ca-central-1.amazonaws.com/aws-fis-pod:0.1
Europe (Francfort) 713827034473.dkr.ecr.eu-central-1.amazonaws.com/aws-fis-pod:0.1
Europe (Irlande) 205866052826.dkr.ecr.eu-west-1.amazonaws.com/aws-fis-pod:0.1
Europe (Londres) 327424803546.dkr.ecr.eu-west-2.amazonaws.com/aws-fis-pod:0.1
Europe (Milan) 478809367036.dkr.ecr.eu-south-1.amazonaws.com/aws-fis-pod:0.1
Europe (Paris) 154605889247.dkr.ecr.eu-west-3.amazonaws.com/aws-fis-pod:0.1
Europe (Espagne) 395402409451.dkr.ecr.eu-south-2.amazonaws.com/aws-fis-pod:0.1
Europe (Stockholm) 263175118295.dkr.ecr.eu-north-1.amazonaws.com/aws-fis-pod:0.1
Moyen-Orient (Bahreïn) 065825543785.dkr.ecr.me-south-1.amazonaws.com/aws-fis-pod:0.1
Amérique du Sud (São Paulo) 767113787785.dkr.ecr.sa-east-1.amazonaws.com/aws-fis-pod:0.1
AWS GovCloud (USA Est) 246533647532.dkr.ecr.us-gov-east-1.amazonaws.com/aws-fis-pod:0.1
AWS GovCloud (US-Ouest) 246529956514.dkr.ecr.us-gov-west-1.amazonaws.com/aws-fis-pod:0.1

Exemple de modèle d'expérience

Voici un exemple de modèle d'expérience pour l'aws:eks:pod-network-latencyaction.

{ "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" } }