Scenario:
You have create PodSecurityPolicy to run as “RunasNonRootUser”
kind: PodSecurityPolicy runAsUser: # Require the container to run without root privileges. rule: 'MustRunAsNonRoot'
Also you added following statement in deployment.yaml, created proper serviceaccount and role/rolebinding.
securityContext: runAsUser: 999 serviceAccountName: testservice
Still you receive this error which pod is started-
container has runAsNonRoot and image will run as root
Solution:
One of the reasons for this error could be non availability of /tmp volume. Create a volume /tmp and mount it for the container.
The deployment.yaml should look like below after mounting /tmp volume as highlighted.
apiVersion: apps/v1
kind: Deployment
metadata:
name: testservice
namespace: testnamespace
spec:
replicas: 1
revisionHistoryLimit: 1
selector:
matchLabels:
app: testservice-v1
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
labels:
app: testservice-v1
spec:
containers:
- env:
image: xxxxxxxxxxxxxxxxxxxxxxxx
imagePullPolicy: Always
name: testservice
ports:
- containerPort: 8080
volumeMounts:
- mountPath: /tmp
name: tmp-vol
imagePullSecrets:
- name: aws-registry
securityContext:
runAsUser: 999
serviceAccountName: testservice
volumes:
- emptyDir:
medium: Memory
name: tmp-vol
This will resolve the error.