Question 31

You must complete this task on the following cluster/nodes: Cluster: immutable-cluster Master node: master1 Worker node: worker1 You can switch the cluster/configuration context using the following command:
[desk@cli] $ kubectl config use-context immutable-cluster
Context: It is best practice to design containers to be stateless and immutable.
Task:
Inspect Pods running in namespace prod and delete any Pod that is either not stateless or not immutable.
Use the following strict interpretation of stateless and immutable:
1. Pods being able to store data inside containers must be treated as not stateless.
Note: You don't have to worry whether data is actually stored inside containers or not already.
2. Pods being configured to be privileged in any way must be treated as potentially not stateless or not immutable.

Question 32

Using the runtime detection tool Falco, Analyse the container behavior for at least 20 seconds, using filters that detect newly spawning and executing processes in a single container of Nginx.
  • Question 33

    On the Cluster worker node, enforce the prepared AppArmor profile
    #include <tunables/global>
    profile docker-nginx flags=(attach_disconnected,mediate_deleted) {
    #include <abstractions/base>
    network inet tcp,
    network inet udp,
    network inet icmp,
    deny network raw,
    deny network packet,
    file,
    umount,
    deny /bin/** wl,
    deny /boot/** wl,
    deny /dev/** wl,
    deny /etc/** wl,
    deny /home/** wl,
    deny /lib/** wl,
    deny /lib64/** wl,
    deny /media/** wl,
    deny /mnt/** wl,
    deny /opt/** wl,
    deny /proc/** wl,
    deny /root/** wl,
    deny /sbin/** wl,
    deny /srv/** wl,
    deny /tmp/** wl,
    deny /sys/** wl,
    deny /usr/** wl,
    audit /** w,
    /var/run/nginx.pid w,
    /usr/sbin/nginx ix,
    deny /bin/dash mrwklx,
    deny /bin/sh mrwklx,
    deny /usr/bin/top mrwklx,
    capability chown,
    capability dac_override,
    capability setuid,
    capability setgid,
    capability net_bind_service,
    deny @{PROC}/* w, # deny write for all files directly in /proc (not in a subdir)
    # deny write to files not in /proc/<number>/** or /proc/sys/**
    deny @{PROC}/{[^1-9],[^1-9][^0-9],[^1-9s][^0-9y][^0-9s],[^1-9][^0-9][^0-9][^0-9]*}/** w, deny @{PROC}/sys/[^k]** w, # deny /proc/sys except /proc/sys/k* (effectively /proc/sys/kernel) deny @{PROC}/sys/kernel/{?,??,[^s][^h][^m]**} w, # deny everything except shm* in /proc/sys/kernel/ deny @{PROC}/sysrq-trigger rwklx, deny @{PROC}/mem rwklx, deny @{PROC}/kmem rwklx, deny @{PROC}/kcore rwklx, deny mount, deny /sys/[^f]*/** wklx, deny /sys/f[^s]*/** wklx, deny /sys/fs/[^c]*/** wklx, deny /sys/fs/c[^g]*/** wklx, deny /sys/fs/cg[^r]*/** wklx, deny /sys/firmware/** rwklx, deny /sys/kernel/security/** rwklx,
    }
    Edit the prepared manifest file to include the AppArmor profile.
    apiVersion: v1
    kind: Pod
    metadata:
    name: apparmor-pod
    spec:
    containers:
    - name: apparmor-pod
    image: nginx
    Finally, apply the manifests files and create the Pod specified on it.
    Verify: Try to use command ping, top, sh
  • Question 34

    Context
    A default-deny NetworkPolicy avoids to accidentally expose a Pod in a namespace that doesn't have any other NetworkPolicy defined.
    Task
    Create a new default-deny NetworkPolicy named defaultdeny in the namespace testing for all traffic of type Egress.
    The new NetworkPolicy must deny all Egress traffic in the namespace testing.
    Apply the newly created default-deny NetworkPolicy to all Pods running in namespace testing.

    Question 35

    Create a Pod name Nginx-pod inside the namespace testing, Create a service for the Nginx-pod named nginx-svc, using the ingress of your choice, run the ingress on tls, secure port.