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, le FIS récupère l'image du conteneur FIS Pod. Cette image est ensuite utilisée pour créer un Pod dans le cluster EKS ciblé. Le Pod nouvellement créé est chargé d'injecter, de contrôler et de surveiller le défaut. Pour toutes les actions FIS EKS, à l'exception de aws:eks:pod-delete, l'injection d'erreurs est réalisée grâce à l'utilisation de conteneurs éphémères, une fonctionnalité de Kubernetes qui permet de créer des conteneurs
-
FIS crée le module FIS dans le cluster cible spécifié dans le modèle d'expérience.
-
Le module FIS crée un conteneur éphémère dans le pod cible dans le même espace de noms que le conteneur cible.
-
Le conteneur éphémère injecte des défauts dans l'espace de noms du conteneur cible.
-
Le FIS Pod contrôle et surveille l'injection défectueuse du contenant éphémère et le 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 module FIS sont retirés.
Actions
Limitations
-
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
bridgeréseau :aws:eks:pod-network-blackhole-port
aws:eks:pod-network-latency
aws:eks:pod-network-packet-loss
-
Les actions suivantes nécessitent des autorisations root dans le conteneur éphémère.
aws:eks:pod-network-blackhole-port
aws:eks:pod-network-latency
aws:eks:pod-network-packet-loss
Le conteneur éphémère héritera de ses autorisations du contexte de sécurité du Pod cible. Si vous devez exécuter les conteneurs du Pod en tant qu'utilisateur non root, vous pouvez définir des contextes de sécurité distincts pour les conteneurs du Pod cible.
-
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 ressource ARNs . Vous devez identifier les cibles à l'aide des paramètres de ressources requis.
-
Les actions aws:eks : pod-network-latency et aws:eks : ne pod-network-packet-loss doivent pas être exécutées en parallèle et cibler le même Pod. Selon la valeur du
maxErrorsparamètre que vous spécifiez, l'action peut se terminer en état terminé ou en échec :Si la valeur
maxErrorsPercentest 0 (valeur par défaut), l'action se terminera par un échec.Sinon, l'échec alourdira le
maxErrorsPercentbudget. 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 avec
Exit Code: 16.
-
L'action aws:eks : ne 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'utilisent.
trafficTypeLes actions parallèles utilisant différents types de trafic sont prises en charge. -
Le FIS ne peut surveiller l'état de l'injection de défauts que
securityContextlorsque le pod cible est réglé sur.readOnlyRootFilesystem: falseSans 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 des rôles IAM. 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 cluster EKS 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 d'EKS est 1.23.
Création d'un rôle d'expérience
Pour exécuter un test, vous devez configurer un rôle IAM 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 actions AWS FIS 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 estdefault. Notez qu'il default s'agit de l'un des espaces de noms Kubernetes standard.
Pour configurer votre compte de service Kubernetes
-
Créez un fichier nommé
rbac.yamlet ajoutez ce qui suit.kind: ServiceAccount apiVersion: v1 metadata: namespace:defaultname:myserviceaccount--- kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: namespace:defaultname:role-experimentsrules: - 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:defaultsubjects: - kind: ServiceAccount name:myserviceaccountnamespace:default- apiGroup: rbac.authorization.k8s.io kind: User name:fis-experimentroleRef: kind: Role name:role-experimentsapiGroup: rbac.authorization.k8s.io -
Exécutez la commande suivante.
kubectl apply -f rbac.yaml
Accorder aux utilisateurs et aux rôles IAM l'accès à Kubernetes APIs
Suivez les étapes expliquées dans la section Associer les identités IAM aux autorisations Kubernetes dans la documentation. EKS
Option 1 : créer des entrées d'accès
Nous vous recommandons d'utiliser Access Entries. Vous pouvez utiliser la commande suivante pour créer une entrée d'accès qui associe le rôle IAM à l'utilisateur Kubernetes. fis-experiment Pour plus d'informations, voir Accorder aux utilisateurs IAM l'accès à Kubernetes avec des entrées d'accès EKS.
aws eks create-access-entry \ --principal-arn arn:aws:iam::123456789012:role/fis-experiment-role\ --usernamefis-experiment\ --cluster-namemy-cluster
Important
Afin de tirer parti des entrées d'accès, le mode d'authentification du cluster EKS doit être configuré sur le API mode API_AND_CONFIG_MAP ou.
Option 2 : ajouter des entrées à l'aws-auth ConfigMap
Vous pouvez également utiliser la commande suivante pour créer un mappage d'identité. Pour plus d'informations, consultez la section Gérer les utilisateurs et les rôles IAM
eksctl create iamidentitymapping \ --arn arn:aws:iam::123456789012:role/fis-experiment-role\ --usernamefis-experiment\ --clustermy-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'ARN fourni en entrée 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 Pod fournies par AWS FIS sont hébergées sur Amazon ECR. Lorsque vous référencez une image depuis Amazon ECR, vous devez utiliser l'URI de l'image complète.
L'image du conteneur Pod est également disponible dans la galerie publique AWS ECR.
| Région AWS | URI de l'image |
|---|---|
| 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 |
| Europe (Zurich) | 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 |
| 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" } }