Fault-wise permissions
This topic describes the prerequisites and fault-wise permissions required to execute Kubernetes-based faults.
The prerequisites can be categorized into two groups:
Common prerequisites
Ensure that the Kubernetes chaos infrastructure (or agent) is installed and all the components are healthy and in running state.
There should be outbound connectivity from the cluster pods to the Harness control plane.
Connectivity should be established between the cluster pods to any endpoint that needs to be queried as a part of the probe execution (or resilience validation).
Appropriate RBAC should be set up on the Kubernetes cluster, so that the service accounts used by the agent components are sufficient for the discovery and chaos injection. This is based on:
The scope of execution (cluster-wide or namespaced).
The nature of faults planned to be executed.
Fault-type specific prerequisites
Certain fault categories have unique requirements, from a permissions and set up (or configuration) perspective.
Pod network/Stress/API/IO
These faults require identifying the target container PID and remote execution of certain commands (or processes) within the target containers' network, PID, and mount namespace. These actions require the transient chaos pods to run with:
Root user;
Container runtime socket mounted;
Privilege escalation;
Linux capabilities like NET_ADMIN, SYS_ADMIN;
Mapping to hostpid.
HCE recommends you create a dedicated pod security policy (PSP) or equivalent that you can map to the transient chaos pods or service account.
Service load
Internally, the load fault leverages Locust (support for other tools is a part of the roadmap). The internal load engine uses a Python script to define the API calls that should be part of the load profile. The script is embedded within a ConfigMap that is referenced by the chaos pods during execution. Go to locust prerequisites for detailed steps
Cloud-based targets
Create an IAM role on the cloud account that is mapped to the appropriate policy. Your (cloud account user) credentials must be embedded with a Kubernetes secret before executing the fault. You can create a superset AWS policy that allows executing all the fault types supported by HCE.
Permissions required for pod-level faults
This table lists the permissions required to execute Kubernetes fault (node-level and pod-level).
Read the permission as: "You can create pod delete fault in Namespaced and cluster mode, and on the pod entity, it requires permissions to [create, delete, get, list, patch, deletecollection, update] the pod.
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list, patch, update]
replicasets, daemonsets = NA
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = [create, delete, get, list]
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Permissions required for node-level faults
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = [get, list, create]
deployments, statefulsets = NA
replicasets, daemonsets = NA
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = [get, list]
Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = [get, list, create]
deployments, statefulsets = NA
replicasets, daemonsets = NA
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = [get, list]
Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = [get, list, create]
deployments, statefulsets = NA
replicasets, daemonsets = NA
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = [get, list, create]
nodes = [get, list, patch, update]
Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = [get, list, create]
deployments, statefulsets = NA
replicasets, daemonsets = NA
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = [get, list]
Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = [get, list, create]
deployments, statefulsets = NA
replicasets, daemonsets = NA
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = [get, list]
Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = [get, list, create]
deployments, statefulsets = NA
replicasets, daemonsets = NA
networkpolicies = NA
jobs = create, delete, get, list, deletecollection
chaosEngines, chaosExperiments, chaosResults = create, delete, get, list, patch, update
secrets = NA
pod eviction = NA
nodes = [get, list]
Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = [get, list, create]
deployments, statefulsets = NA
replicasets, daemonsets = NA
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = [get, list]
Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = [get, list, create]
deployments, statefulsets = NA
replicasets, daemonsets = NA
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = [get, list]
pod eviction = NA
nodes = [get, list]
Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = [get, list, create]
deployments, statefulsets = NA
replicasets, daemonsets = NA
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = [get, list, create]
nodes = [get, list, patch, update]
Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = [get, list]
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = NA
replicasets, daemonsets = NA
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = [get, list]
pod eviction = NA
nodes = [get, list]
Permissions required for Spring boot faults
Spring boot app kill
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Spring boot CPU stress
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Spring boot memory stress
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Spring boot latency
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Spring boot exception
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Spring boot fault
Namespaced, Cluster
pod = [create, delete, get, list, patch, deletecollection, update]
events = [create, get, list, patch, update]
configMaps = NA
pods/log = [get, list, watch]
pods/exec = NA
deployments, statefulsets = [get, list]
replicasets, daemonsets = [get, list]
networkpolicies = NA
jobs = [create, delete, get, list, deletecollection]
chaosEngines, chaosExperiments, chaosResults = [create, delete, get, list, patch, update]
secrets = NA
pod eviction = NA
nodes = NA*
Last updated
Was this helpful?