View a markdown version of this page

Usa il AWS Azioni FIS aws:eks:pod - AWS Servizio di iniezione guasti

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Usa il AWS Azioni FIS aws:eks:pod

Puoi usare le azioni aws:eks:pod per inserire errori nei Kubernetes Pod in esecuzione nei tuoi cluster EKS.

Quando viene avviata un'azione, FIS recupera l'immagine del contenitore FIS Pod. eks-pod-actions.html#eks-pod-container-images Questa immagine viene quindi utilizzata per creare un Pod nel cluster EKS di destinazione. Il Pod appena creato è responsabile dell'iniezione, del controllo e del monitoraggio del guasto. Per tutte le azioni FIS EKS, ad eccezione di aws:eks:pod-delete, l'inserimento di errori viene ottenuto tramite l'uso di contenitori effimeri, una funzionalità di Kubernetes che consente la creazione di contenitori temporanei all'interno di un Pod esistente. Il contenitore temporaneo viene avviato nello stesso namespace del contenitore di destinazione ed esegue le attività di fault injection desiderate. Se non viene specificato alcun contenitore di destinazione, il primo contenitore nella specifica Pod viene selezionato come destinazione.

Flusso di lavoro di creazione dei pod FIS che mostra l'iniezione effimera del contenitore nei contenitori pod di destinazione.
  1. FIS crea il pod FIS nel cluster di destinazione specificato nel modello di esperimento.

  2. Il FIS Pod crea un contenitore temporaneo nel Target Pod nello stesso namespace del contenitore di destinazione.

  3. Il contenitore temporaneo inietta errori nello spazio dei nomi del contenitore di destinazione.

  4. Il FIS Pod controlla e monitora l'iniezione guasta del contenitore temporaneo e il FIS controlla e monitora il FIS Pod.

Al termine dell'esperimento o in caso di errore, il contenitore effimero e il FIS Pod vengono rimossi.

Azioni

Limitazioni

  • Le seguenti azioni non funzionano con: AWS Fargate

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

    • aws:eks:pod-network-latency

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

  • Le seguenti azioni non supportano la modalità bridge di rete:

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

    • aws:eks:pod-network-latency

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

  • Le azioni seguenti richiedono i permessi di root all'interno del contenitore temporaneo.

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

    • aws:eks:pod-network-latency

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

    Il contenitore temporaneo erediterà le proprie autorizzazioni dal contesto di sicurezza del Pod di destinazione. Se devi eseguire i contenitori nel Pod come utente non root, puoi impostare contesti di sicurezza separati per i contenitori nel Pod di destinazione.

  • Non puoi identificare obiettivi di tipo aws:eks:pod nel modello di esperimento utilizzando ARN di risorse o tag di risorse. È necessario identificare gli obiettivi utilizzando i parametri delle risorse richiesti.

  • Le azioni aws:eks:pod-network-latency e aws:eks:pod-network-packet-loss non devono essere eseguite in parallelo e destinate allo stesso Pod. A seconda del valore del parametro specificato, l'azione può terminare con uno stato completato o fallito: maxErrors

    • Se maxErrorsPercent è 0 (impostazione predefinita), l'azione terminerà in stato non riuscito.

    • In caso contrario, l'errore verrà sommato al maxErrorsPercent budget. Se il numero di iniezioni fallite non raggiunge il valore previstomaxErrors, l'azione finirà nello stato completato.

    • È possibile identificare questi errori dai registri del contenitore effimero iniettato nel Pod di destinazione. Fallirà con. Exit Code: 16

  • L'azione aws:eks:pod-network-blackhole-port non deve essere eseguita in parallelo con altre azioni che hanno come target lo stesso Pod e lo utilizzano. trafficType Sono supportate azioni parallele che utilizzano diversi tipi di traffico.

  • FIS può monitorare lo stato dell'iniezione dei guasti solo quando il Pod securityContext di destinazione è impostato su. readOnlyRootFilesystem: false Senza questa configurazione, tutte le azioni di EKS Pod falliranno.

Requisiti

  • Installali AWS CLI sul tuo computer. Questo è necessario solo se utilizzerai il AWS CLI per creare ruoli IAM. Per ulteriori informazioni, consulta Installazione o aggiornamento di AWS CLI.

  • Installare kubectl sul computer. Ciò è necessario solo per interagire con il cluster EKS per configurare o monitorare l'applicazione di destinazione. Per ulteriori informazioni, consulta https://kubernetes.io/docs/tasks/tools/.

  • La versione minima supportata di EKS è la 1.30.

Crea un ruolo sperimentale

Per eseguire un esperimento, devi configurare un ruolo IAM per l'esperimento. Per ulteriori informazioni, consulta Ruoli IAM per AWS esperimenti FIS. Le autorizzazioni richieste per questo ruolo dipendono dall'azione che stai utilizzando. Fai riferimento alle azioni AWS FIS mirate aws:eks:pod per trovare le autorizzazioni necessarie per la tua azione.

Configurazione dell'account di servizio Kubernetes

Configura un account di servizio Kubernetes per eseguire esperimenti con obiettivi nello spazio dei nomi Kubernetes specificato. Nell'esempio seguente, l'account del servizio è e il namespace è. myserviceaccount default Nota che default è uno dei namespace standard di Kubernetes.

Per configurare il tuo account di servizio Kubernetes
  1. Crea un file denominato rbac.yaml e aggiungi quanto segue.

    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. Eseguire il seguente comando seguente.

    kubectl apply -f rbac.yaml

Concedere agli utenti e ai ruoli IAM l’accesso alle API Kubernetes

Segui i passaggi spiegati in Associare le identità IAM alle autorizzazioni Kubernetes nella documentazione. EKS

Opzione 1: creare voci di accesso

Consigliamo l'uso di Access Entries. È possibile utilizzare il seguente comando per creare una voce di accesso che associ il ruolo IAM all'utente Kubernetes. fis-experiment Per ulteriori informazioni, consulta Concedere agli utenti IAM l'accesso a Kubernetes con le voci di accesso EKS.

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

Per sfruttare le voci di accesso, la modalità di autenticazione del cluster EKS deve essere configurata in modalità or. API_AND_CONFIG_MAP API

Opzione 2: aggiungere voci a aws-auth ConfigMap

Puoi anche usare il seguente comando per creare una mappatura delle identità. Per ulteriori informazioni, consulta Manage IAM users and roles nella documentazione di eksctl.

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

L'utilizzo del toolkit eksctl per configurare le mappature delle identità comporterà la creazione di voci all'interno di. aws-auth ConfigMap È importante notare che queste voci generate non supportano l'inclusione di un componente del percorso. Di conseguenza, l'ARN fornito come input non deve contenere un segmento di percorso (ad es.arn:aws:iam::123456789012:role/service-role/fis-experiment-role).

Immagini dei contenitori Pod

Le immagini dei contenitori Pod fornite da AWS FIS sono ospitate in Amazon ECR. Quando si fa riferimento a un'immagine da Amazon ECR, è necessario utilizzare l'URI completo dell'immagine.

L'immagine del contenitore Pod è disponibile anche nella AWS ECR Public Gallery.

Regione AWS URI immagine
Stati Uniti orientali (Ohio) 051821878176.dkr.ecr.us-east-2.amazonaws.com/aws-fis-pod:0.1
Stati Uniti orientali (Virginia settentrionale) 731367659002.dkr.ecr.us-east-1.amazonaws.com/aws-fis-pod:0.1
Stati Uniti occidentali (California settentrionale) 080694859247.dkr.ecr.us-west-1.amazonaws.com/aws-fis-pod:0.1
Stati Uniti occidentali (Oregon) 864386544765.dkr.ecr.us-west-2.amazonaws.com/aws-fis-pod:0.1
Africa (Città del Capo) 056821267933.dkr.ecr.af-south-1.amazonaws.com/aws-fis-pod:0.1
Asia Pacifico (Hong Kong) 246405402639.dkr.ecr.ap-east-1.amazonaws.com/aws-fis-pod:0.1
Asia Pacifico (Mumbai) 524781661239.dkr.ecr.ap-south-1.amazonaws.com/aws-fis-pod:0.1
Asia Pacifico (Osaka) 148336246925.dkr.ecr.ap-northeast-3.amazonaws.com/aws-fis-pod:0.1
Asia Pacifico (Seoul) 526524659354.dkr.ecr.ap-northeast-2.amazonaws.com/aws-fis-pod:0.1
Asia Pacifico (Singapore) 316401638346.dkr.ecr.ap-southeast-1.amazonaws.com/aws-fis-pod:0.1
Asia Pacifico (Sydney) 488104106298.dkr.ecr.ap-southeast-2.amazonaws.com/aws-fis-pod:0.1
Asia Pacifico (Tokyo) 635234321696.dkr.ecr.ap-northeast-1.amazonaws.com/aws-fis-pod:0.1
Canada (Centrale) 490658072207.dkr.ecr.ca-central-1.amazonaws.com/aws-fis-pod:0.1
Europa (Francoforte) 713827034473.dkr.ecr.eu-central-1.amazonaws.com/aws-fis-pod:0.1
Europa (Irlanda) 205866052826.dkr.ecr.eu-west-1.amazonaws.com/aws-fis-pod:0.1
Europa (Londra) 327424803546.dkr.ecr.eu-west-2.amazonaws.com/aws-fis-pod:0.1
Europa (Milano) 478809367036.dkr.ecr.eu-south-1.amazonaws.com/aws-fis-pod:0.1
Europa (Parigi) 154605889247.dkr.ecr.eu-west-3.amazonaws.com/aws-fis-pod:0.1
Europa (Spagna) 395402409451.dkr.ecr.eu-south-2.amazonaws.com/aws-fis-pod:0.1
Europa (Stoccolma) 263175118295.dkr.ecr.eu-north-1.amazonaws.com/aws-fis-pod:0.1
Europa (Zurigo) 604225987275.dkr.ecr.eu-central-2.amazonaws.com/aws-fis-pod:0.1
Medio Oriente (Bahrein) 065825543785.dkr.ecr.me-south-1.amazonaws.com/aws-fis-pod:0.1
Medio Oriente (Emirati Arabi Uniti) 438374459301.dkr.ecr.me-central-1.amazonaws.com/aws-fis-pod:0.1
Sud America (San Paolo) 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

Esempio di modello di esperimento

Di seguito è riportato un modello di esperimento di esempio per l'aws:eks:pod-network-latencyazione.

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