-
Notifications
You must be signed in to change notification settings - Fork 126
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add runPrivileged/runAsUser options, for running on more restricted/s… #271
base: master
Are you sure you want to change the base?
Add runPrivileged/runAsUser options, for running on more restricted/s… #271
Conversation
a3a419a
to
3c836e4
Compare
@@ -160,14 +160,19 @@ func (k *K8sutil) CreateClientDeployment(baseImage string, replicas *int32, java | |||
}, | |||
}, | |||
Spec: v1.PodSpec{ | |||
SecurityContext: &v1.PodSecurityContext{ | |||
RunAsUser: &k.RunAsUser, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What if these aren't defined how does the controller react? We should add tests around them to validate this new behavior.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The default for RunAsUser (0) is defined in init(), so there's always a value.
…ecured K8s clusters These options make it possible to run the operator and es-clusters on a Kubernetes cluster, that has Pod Security Policies in place, that: - disallows running containers as root - (and/or) disallows running containers in privileged mode Note: the default elasticsearch image (upmcenterprises/docker-elasticsearch-kubernetes:6.1.3_0 as of writing) will not work if you don't run it as root (uid 0), as its wrapper script tries a 'ulimit -l unlimited', and eventually su-execs to elasticsearch user with uid 1000; both actions will fail. Setting ulimit should not be neccessary with IPC_LOCK/SYS_RESOURCE capabilities, however they get wiped when running a container as non-root. So running this image will require some modifications, e.g. chowning folders, setcap cap_ipc_lock=+ep on java binary + dependencies. Most (recent) information on this topic that allowed me to solve the puzzle: https://medium.com/@thejasongerard/resource-limits-mlock-and-containers-oh-my-cca1e5d1f259 Change-Id: I600e9dd4a49cab15a289fc50cc2a605c83ac3aa9
3c836e4
to
10734bc
Compare
we also want this change! |
The image also has to not chown and su-exec (as mentioned in the original comment). |
…ecured K8s clusters
These options make it possible to run the operator and es-clusters on a Kubernetes cluster,
that has a Pod Security Policy in place, that:
Note: the default elasticsearch image (upmcenterprises/docker-elasticsearch-kubernetes:6.1.3_0 as of writing)
will not work if you don't run it as root (uid 0), as its wrapper script tries a 'ulimit -l unlimited',
and eventually su-execs to elasticsearch user with uid 1000; both actions will fail.
Setting ulimit should not be neccessary with IPC_LOCK/SYS_RESOURCE capabilities,
however they get wiped when running a container as non-root.
So running this image will require some modifications,
e.g. chowning folders, setcap cap_ipc_lock=+ep on java binary + dependencies.
Most (recent) information on this topic that allowed me to solve the puzzle:
https://medium.com/@thejasongerard/resource-limits-mlock-and-containers-oh-my-cca1e5d1f259
Change-Id: I600e9dd4a49cab15a289fc50cc2a605c83ac3aa9