Key details for this exam, checked against the published exam outline
Each question shows the correct answer and an explanation of why it is right
SIMULATION
Task 19
Create Project Template
Task information Details:
Generate the bootstrap project template, create it in openshift-config, update the cluster project configuration to use the template, and create a new project to validate it.
Solution:
Generate the default template:
oc adm create-bootstrap-project-template -o yaml > template.yaml
Review and edit template.yaml if required.
Create the template in openshift-config:
oc create -f template.yaml -n openshift-config
Edit the cluster project configuration:
oc edit project.config.openshift.io/cluster
Add or update:
spec:
projectRequestTemplate:
name: project-request
Save and exit.
Create a test project:
oc new-project test123
Verify the template behavior:
oc get project test123 -o yaml
Notes:
The uploaded lab text shows projects.config.openshift.io cluster-admin; the standard resource is project.config.openshift.io/cluster.
This task checks cluster-wide customization of new-project creation behavior.
SIMULATION
Task 2
Manage Cluster Project and Permission
Task information Details:
Create projects apollo, test, and demo.
Grant bob the cluster-admin role.
Prevent ordinary authenticated users from self-provisioning projects.
Allow john to create projects.
Give natasha view-only access to test and apollo.
Give armstrong admin access to apollo.
Remove the kubeadmin user secret.
Solution:
Create the projects:
oc new-project apollo
oc new-project test
oc new-project demo
Grant cluster-admin to bob:
oc adm policy add-cluster-role-to-user cluster-admin bob
Disable normal self-provisioning for authenticated users:
oc adm policy remove-cluster-role-from-group self-provisioner system:authenticated:oauth
Allow john to self-provision:
oc adm policy add-cluster-role-to-user self-provisioner john
Give natasha view access in test and apollo:
oc policy add-role-to-user view natasha -n test
oc policy add-role-to-user view natasha -n apollo
Give armstrong admin in apollo:
oc policy add-role-to-user admin armstrong -n apollo
Remove kubeadmin secret:
oc delete secret kubeadmin -n kube-system
Verify permissions:
oc adm policy who-can create projectrequests
oc describe rolebinding.rbac -n apollo
oc describe rolebinding.rbac -n test
This task tests core OpenShift administration around project lifecycle control, cluster-level RBAC, and decommissioning default bootstrap credentials.
SIMULATION
Task 9
Use Secret in Monday Project
Task information Details:
Use the secret created earlier as environment variables in deployment monday.
Solution:
Switch to the correct project if needed:
oc project monday
Inject environment variables from the secret:
oc set env deployment/monday --from=secret/magic
Verify:
oc set env deployment/monday --list
oc describe deployment monday
Notes:
The uploaded lab references secret/file-secret, but Task 8 clearly intends the secret to be named magic.
In a real exam, match the actual secret name present in the cluster.
This task tests secret consumption by workloads through environment variable injection.
SIMULATION
Configure an application to use a secret
Configure the application called qed in the math project with the following requirements:
The application uses the secret previously created called: magic The secret defines an environment variable with name: DECODER_RING
The application output no longer displays: Sorry, application is not configured correctly.
Solution:
$ oc get all | grep deploy
$ oc set env --from=secret/magic deployment.apps/qed
SIMULATION
Task 17
Create Network Policy
Task information Details:
Create a NetworkPolicy named mysql-db-conn that permits ingress to database pods only from pods matching the specified labels in namespaces labeled team=devsecops, on TCP port 3306.
Solution:
Create a file named mysql-db-conn.yaml:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: mysql-db-conn
spec:
podSelector:
matchLabels:
networking.k8s.io/v1/network: database
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
team: devsecops
podSelector:
matchLabels:
deployment: my-web-mysql
ports:
- protocol: TCP
port: 3306
Apply it:
oc apply -f mysql-db-conn.yaml
Verify:
oc get networkpolicy
oc describe networkpolicy mysql-db-conn
This task tests namespace/pod label selection and application isolation using OpenShift networking policy controls.
SIMULATION
Configure an identity provider
Configure your OpenShift cluster to use an HTPasswd identity provider with the following requirements:
The name of the identity provider is: ex280-htpasswd The name of the secret is: ex280-idp-secret
The user account armstrong=indionce The user account collins=veraster The user account aldrin=roonkere The user account jobs=sestiver
The user account wozniak=glegunge
Solution:
$ sudo yum install httpd-tools -y
$ htpasswd -c -B -b htpasswd-file-upload armstrong indionce
$ htpasswd -B -b htpasswd-file collins veraster
$ htpasswd -B -b htpasswd-file aldrin roonkere
$ htpasswd -B -b htpasswd-file jobs sestiver
$ htpasswd -B -b htpasswd-file wozniak glegunge
$ oc create secret generic ex280-idp-secret --from-file
htpasswd=htpasswd-file -n openshift-config
$ oc get oauth/cluster -o yaml> oauth.yaml
$ vim oauth.yaml
$
esc--> type :set paste --> enter --> insert --> then paste the content for correct indent pasting
spec:
identityProviders:
- name: ex280-htpasswd mappingMethod: claim type: HTPasswd htpasswd:
fileData:
name: ex280-idp-secret
$ oc replace -f oauth.yaml
$ oc login -u armstrong -p indionce
$ oc login -u collins -p veraster
$ oc login -u aldrin roonkere
$ oc login -u jobs sestiver
$ oc login -u wozniak -p glegunge
#This below part of operation is completely optional and done just for handy login purpose
$ alias _kube='oc login -u kubeadmin -p ${kube_pass} ${api_url}'
$ alias _armstrong='oc login -u armstrong -p ${armstrong}
${api_url}'
$ alias _collins='oc login -u collins -p ${collins} ${api_url}'
$ alias _aldrin='oc login -u aldrin -p ${aldrin} ${api_url}'
$ alias _jobs='oc login -u jobs -p ${jobs} ${api_url}'
$ alias _wozniak='oc login -u wozniak -p ${wozniak} ${api_url}'
$ _armstrong;_armstrong;_collins;_aldrin;_jobs;_wozniak;
SIMULATION
Configure limits
Configure your OpenShift cluster to use limits in the bluebook project with the following requirements:
The name of the LimitRange resource is: ex280-limits
The amount of memory consumed by a single pod is between 5Mi and 300Mi The amount of memory consumed by a single container is between 5Mi and
300Mi with a default request value of 100Mi
The amount of CPU consumed by a single pod is between 10m and 500m
The amount of CPU consumed by a single container is between 10m and 500m with a default request value of 100m
Solution:
$ vim limit.yaml
# Edit the yaml file like below mentioned
apiVersion: 'v1' kind: 'LimitRange' metadata:
name: 'resource-limits' spec:
limits:
- type: 'Pod'
max:
cpu: '500m' memory: '300Mi'
min:
cpu: '10m' memory: '5Mi'
- type: 'Container' max:
cpu: '500m' memory: '300Mi'
min:
cpu: '10m' memory: '5Mi'
defaultRequest: cpu: '100m' memory: '100Mi'
$ oc create -f limit.yaml --save-config -n bluebook
$ oc describe limitranges -n bluebook
Exam domains verified against: Official RedHat EX280 exam guide, last checked October 2026.
Administer OpenShift clusters through the web console and command-line interface. Create and delete projects, examine container images, and query Kubernetes resources. Monitor events and logs to maintain cluster health and troubleshoot common issues.
Deploy applications from YAML manifests and templates. Use Kustomize for application configuration management. Create and configure secrets and ConfigMaps for application data and sensitive information.
Deploy and manage applications using templates and Helm charts. Work with replica sets, labels, and selectors. Configure services and expose applications to external access through routes.
Configure the HTPasswd identity provider for authentication. Create, delete, and manage users and groups. Modify permissions and manage user access to cluster resources.
Configure networking components and troubleshoot software-defined networking. Create and edit external routes. Secure traffic with TLS certificates and configure network policies for application isolation.
Sample question from this domain above: Q5
Configure load balancer services for non-HTTP protocols. Manage external application access for services that do not use standard HTTP or SNI routing.
Configure cluster and project resource quotas to control resource consumption. Set resource requirements and limit ranges for projects. Create project templates to standardize deployments.
Install, uninstall, and delete operators to extend cluster functionality. Manage operator lifecycle and coordinate operator-managed resources.
Configure service accounts and security context constraints to control application permissions. Manage access to Kubernetes APIs. Deploy jobs and cron jobs for scheduled tasks.
Common questions about the exam itself