Skip to content

Add all securityContext fields in injected containers#17427

Merged
istio-testing merged 2 commits intomasterfrom
add-all-security-context-fields
Dec 28, 2019
Merged

Add all securityContext fields in injected containers#17427
istio-testing merged 2 commits intomasterfrom
add-all-security-context-fields

Conversation

@rlenglet
Copy link
Copy Markdown
Contributor

Fixes #17318

[x] Configuration Infrastructure
[ ] Docs
[ ] Installation
[ ] Networking
[ ] Performance and Scalability
[ ] Policies and Telemetry
[ ] Security
[ ] Test and Release
[ ] User Experience
[ ] Developer Infrastructure

@rlenglet rlenglet requested a review from a team as a code owner September 26, 2019 22:46
@istio-testing istio-testing added the size/M Denotes a PR that changes 30-99 lines, ignoring generated files. label Sep 26, 2019
@googlebot googlebot added the cla: yes Set by the Google CLA bot to indicate the author of a PR has signed the Google CLA. label Sep 26, 2019
@rlenglet
Copy link
Copy Markdown
Contributor Author

/test pilot-e2e-envoyv2-v1alpha3

@rlenglet rlenglet added the do-not-merge/work-in-progress Block merging of a PR because it isn't ready yet. label Sep 27, 2019
@rlenglet rlenglet changed the title Add all securityContext fields in injected containers [WIP] Add all securityContext fields in injected containers Sep 27, 2019
@rlenglet rlenglet force-pushed the add-all-security-context-fields branch from 21e1770 to 495e055 Compare September 27, 2019 01:31
@istio-testing istio-testing added size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. and removed size/M Denotes a PR that changes 30-99 lines, ignoring generated files. labels Sep 27, 2019
@rlenglet rlenglet force-pushed the add-all-security-context-fields branch 2 times, most recently from f56a615 to 188e736 Compare September 27, 2019 02:06
@rlenglet
Copy link
Copy Markdown
Contributor Author

/test lint

@jammerful
Copy link
Copy Markdown

jammerful commented Sep 30, 2019

@rlenglet I'm interested in seeing this PR merged, as right now istio doesn't work with Pod Security Policy even with the istio cni installed. Do you have a sense of when this might be merged and when this might make it into a release? Thanks.

@rlenglet
Copy link
Copy Markdown
Contributor Author

@jammerful you can apply a similar change into your deployment's injection template. You don't have to wait for a new release to apply this change locally. I'm expecting to ship this in 1.3.3, around mid-October.

@jammerful
Copy link
Copy Markdown

@rlenglet I was trying to avoid having to change the config map for the side car injector, though I will test that this changed does allow my pod security policy to be used.
On a side note, I stumbled upon re-invocation of mutating admission controllers, is it correct if the pod security policy's mutating admission controller is marked a reinvocationPolicy: "IfNeeded" the istio side car injector's and the pod security policy's mutating admission controllers will work together allowing, technically not requiring setting the fields in this PR explicitly? That being said I still like the fields being set explicitly as it is deterministic.

@rlenglet
Copy link
Copy Markdown
Contributor Author

On a side note, I stumbled upon re-invocation of mutating admission controllers, is it correct if the pod security policy's mutating admission controller is marked a reinvocationPolicy: "IfNeeded" the istio side car injector's and the pod security policy's mutating admission controllers will work together allowing, technically not requiring setting the fields in this PR explicitly?

That is very interesting, thanks. However, users may have other admission controllers that could trigger a re-invocation, so I think we can't avoid setting the fields.

@jammerful
Copy link
Copy Markdown

That is very interesting, thanks. However, users may have other admission controllers that could trigger a re-invocation, so I think we can't avoid setting the fields.

Yup this is still needed, as I noted this ensures that istio always runs with the minimal set of permissions (principle of least privilege) no matter what the users kubernetes configuration is (that is what I meant by "deterministic"). In any case, please let me know if you need any help with this, I would be happy to help out to get this over the line.

@howardjohn
Copy link
Copy Markdown
Member

lgtm, mention me once its not WIP if you need an approval

@ericvn
Copy link
Copy Markdown
Contributor

ericvn commented Oct 19, 2019

Note that this PR is missing the cherrypick label for 1.4. I assume it should be added there as well.

@thecodejunkie
Copy link
Copy Markdown

Running into this issue as well, in a PSP enabled cluster with automatic sidecar injection. Unable to validate against any PSP -> ReplicaSet fails to create pods. Will this be fixed for 1.4?

@rlenglet rlenglet force-pushed the add-all-security-context-fields branch from bdb1c97 to 507d556 Compare December 28, 2019 01:40
@rlenglet
Copy link
Copy Markdown
Contributor Author

/test e2e-dashboard_istio

@rlenglet rlenglet removed the do-not-merge/work-in-progress Block merging of a PR because it isn't ready yet. label Dec 28, 2019
@rlenglet rlenglet changed the title [WIP] Add all securityContext fields in injected containers Add all securityContext fields in injected containers Dec 28, 2019
@rlenglet
Copy link
Copy Markdown
Contributor Author

The automated tests are passing.
And I manually tested that this PR allows running pods with automatic injection and Istio CNI enabled with a very restrictive PodSecurityPolicy.

@rlenglet rlenglet removed the request for review from geeknoid December 28, 2019 04:58
@rlenglet rlenglet changed the title Add all securityContext fields in injected containers [WIP] Add all securityContext fields in injected containers Dec 28, 2019
@istio-testing istio-testing added the do-not-merge/work-in-progress Block merging of a PR because it isn't ready yet. label Dec 28, 2019
@rlenglet
Copy link
Copy Markdown
Contributor Author

rlenglet commented Dec 28, 2019

I tested that this simpler capabilities combination works:

        securityContext:
          capabilities:
            add:
            - NET_ADMIN
            - NET_RAW
            drop:
            - ALL

I will update the PR.

@rlenglet rlenglet force-pushed the add-all-security-context-fields branch from 6c3fff9 to 2b9638d Compare December 28, 2019 05:53
@rlenglet rlenglet changed the title [WIP] Add all securityContext fields in injected containers Add all securityContext fields in injected containers Dec 28, 2019
@istio-testing istio-testing removed the do-not-merge/work-in-progress Block merging of a PR because it isn't ready yet. label Dec 28, 2019
@rlenglet
Copy link
Copy Markdown
Contributor Author

@howardjohn @istio/wg-environments-maintainers @istio/wg-user-experience-maintainers This is ready for review. I am still working on the matching istio/installer PR. Thanks!

@istio-testing
Copy link
Copy Markdown
Collaborator

istio-testing commented Dec 28, 2019

@rlenglet: The following test failed, say /retest to rerun them all:

Test name Commit Details Rerun command
e2e-bookInfoTests-trustdomain_istio 188e736 link /test e2e-bookInfoTests-trustdomain
Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@rlenglet
Copy link
Copy Markdown
Contributor Author

/test pilot-multicluster-e2e_istio

@istio-testing istio-testing merged commit 99c0ec6 into master Dec 28, 2019
@istio-testing istio-testing deleted the add-all-security-context-fields branch December 28, 2019 15:14
@istio-testing
Copy link
Copy Markdown
Collaborator

In response to a cherrypick label: #17427 failed to apply on top of branch "release-1.3":

Applying: Update injection unit tests
Using index info to reconstruct a base tree...
A	pkg/kube/inject/testdata/inject/app_probe/hello-probes-with-flag-set-in-annotation.yaml.injected
A	pkg/kube/inject/testdata/inject/app_probe/hello-probes-with-flag-unset-in-annotation.yaml.injected
A	pkg/kube/inject/testdata/inject/app_probe/hello-probes.yaml.injected
A	pkg/kube/inject/testdata/inject/app_probe/hello-readiness.yaml.injected
A	pkg/kube/inject/testdata/inject/app_probe/https-probes.yaml.injected
A	pkg/kube/inject/testdata/inject/app_probe/named_port.yaml.injected
A	pkg/kube/inject/testdata/inject/app_probe/one_container.yaml.injected
A	pkg/kube/inject/testdata/inject/app_probe/ready_live.yaml.injected
A	pkg/kube/inject/testdata/inject/app_probe/ready_only.yaml.injected
A	pkg/kube/inject/testdata/inject/app_probe/two_container.yaml.injected
A	pkg/kube/inject/testdata/inject/auth.cert-dir.yaml.injected
A	pkg/kube/inject/testdata/inject/auth.non-default-service-account.yaml.injected
A	pkg/kube/inject/testdata/inject/auth.yaml.injected
A	pkg/kube/inject/testdata/inject/cronjob-with-app.yaml.injected
A	pkg/kube/inject/testdata/inject/cronjob.yaml.injected
A	pkg/kube/inject/testdata/inject/daemonset.yaml.injected
A	pkg/kube/inject/testdata/inject/deploymentconfig-multi.yaml.injected
A	pkg/kube/inject/testdata/inject/deploymentconfig.yaml.injected
A	pkg/kube/inject/testdata/inject/enable-core-dump.yaml.injected
A	pkg/kube/inject/testdata/inject/format-duration.yaml.injected
A	pkg/kube/inject/testdata/inject/frontend.yaml.injected
A	pkg/kube/inject/testdata/inject/hello-always.yaml.injected
A	pkg/kube/inject/testdata/inject/hello-config-map-name.yaml.injected
A	pkg/kube/inject/testdata/inject/hello-ignore.yaml.injected
A	pkg/kube/inject/testdata/inject/hello-mtls-not-ready.yaml.injected
A	pkg/kube/inject/testdata/inject/hello-multi.yaml.injected
A	pkg/kube/inject/testdata/inject/hello-namespace.yaml.injected
A	pkg/kube/inject/testdata/inject/hello-never.yaml.injected
A	pkg/kube/inject/testdata/inject/hello-proxy-override.yaml.injected
A	pkg/kube/inject/testdata/inject/hello-template-in-values.yaml.injected
A	pkg/kube/inject/testdata/inject/hello-tproxy-debug.yaml.injected
A	pkg/kube/inject/testdata/inject/hello-tproxy.yaml.injected
A	pkg/kube/inject/testdata/inject/hello.yaml.injected
A	pkg/kube/inject/testdata/inject/job.yaml.injected
A	pkg/kube/inject/testdata/inject/kubevirtInterfaces.yaml.injected
A	pkg/kube/inject/testdata/inject/kubevirtInterfaces_list.yaml.injected
A	pkg/kube/inject/testdata/inject/list-frontend.yaml.injected
A	pkg/kube/inject/testdata/inject/list.yaml.injected
A	pkg/kube/inject/testdata/inject/multi-container.yaml.injected
A	pkg/kube/inject/testdata/inject/multi-init.yaml.injected
A	pkg/kube/inject/testdata/inject/pod-with-app.yaml.injected
A	pkg/kube/inject/testdata/inject/pod.yaml.injected
A	pkg/kube/inject/testdata/inject/replicaset.yaml.injected
A	pkg/kube/inject/testdata/inject/replicationcontroller.yaml.injected
A	pkg/kube/inject/testdata/inject/statefulset.yaml.injected
A	pkg/kube/inject/testdata/inject/status_annotations.yaml.injected
A	pkg/kube/inject/testdata/inject/status_params.yaml.injected
A	pkg/kube/inject/testdata/inject/traffic-annotations-empty-includes.yaml.injected
A	pkg/kube/inject/testdata/inject/traffic-annotations-wildcards.yaml.injected
A	pkg/kube/inject/testdata/inject/traffic-annotations.yaml.injected
A	pkg/kube/inject/testdata/inject/traffic-params-empty-includes.yaml.injected
A	pkg/kube/inject/testdata/inject/traffic-params.yaml.injected
A	pkg/kube/inject/testdata/webhook/daemonset.yaml.injected
A	pkg/kube/inject/testdata/webhook/deploymentconfig-multi.yaml.injected
A	pkg/kube/inject/testdata/webhook/deploymentconfig.yaml.injected
A	pkg/kube/inject/testdata/webhook/frontend.yaml.injected
A	pkg/kube/inject/testdata/webhook/hello-config-map-name.yaml.injected
A	pkg/kube/inject/testdata/webhook/hello-mtls-not-ready.yaml.injected
A	pkg/kube/inject/testdata/webhook/hello-multi.yaml.injected
A	pkg/kube/inject/testdata/webhook/hello-probes.yaml.injected
A	pkg/kube/inject/testdata/webhook/job.yaml.injected
A	pkg/kube/inject/testdata/webhook/list-frontend.yaml.injected
A	pkg/kube/inject/testdata/webhook/list.yaml.injected
A	pkg/kube/inject/testdata/webhook/multi-init.yaml.injected
A	pkg/kube/inject/testdata/webhook/replicaset.yaml.injected
A	pkg/kube/inject/testdata/webhook/replicationcontroller.yaml.injected
A	pkg/kube/inject/testdata/webhook/resource_annotations.yaml.injected
A	pkg/kube/inject/testdata/webhook/statefulset.yaml.injected
A	pkg/kube/inject/testdata/webhook/status_annotations.yaml.injected
A	pkg/kube/inject/testdata/webhook/traffic-annotations-empty-includes.yaml.injected
A	pkg/kube/inject/testdata/webhook/traffic-annotations-wildcards.yaml.injected
A	pkg/kube/inject/testdata/webhook/traffic-annotations.yaml.injected
A	pkg/kube/inject/testdata/webhook/user-volume.yaml.injected
Falling back to patching base and 3-way merge...
CONFLICT (modify/delete): pkg/kube/inject/testdata/webhook/hello-mtls-not-ready.yaml.injected deleted in HEAD and modified in Update injection unit tests. Version Update injection unit tests of pkg/kube/inject/testdata/webhook/hello-mtls-not-ready.yaml.injected left in tree.
CONFLICT (modify/delete): pkg/kube/inject/testdata/inject/hello-mtls-not-ready.yaml.injected deleted in HEAD and modified in Update injection unit tests. Version Update injection unit tests of pkg/kube/inject/testdata/inject/hello-mtls-not-ready.yaml.injected left in tree.
Auto-merging pilot/pkg/kube/inject/testdata/webhook/user-volume.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/webhook/traffic-annotations.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/webhook/traffic-annotations-wildcards.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/webhook/traffic-annotations-empty-includes.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/webhook/status_annotations.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/webhook/statefulset.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/webhook/resource_annotations.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/webhook/replicationcontroller.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/webhook/replicaset.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/webhook/multi-init.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/webhook/list.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/webhook/list-frontend.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/webhook/job.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/webhook/hello-probes.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/webhook/hello-multi.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/webhook/hello-config-map-name.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/webhook/frontend.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/webhook/deploymentconfig.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/webhook/deploymentconfig-multi.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/webhook/daemonset.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/traffic-params.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/traffic-params-empty-includes.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/traffic-annotations.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/traffic-annotations-wildcards.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/traffic-annotations-empty-includes.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/status_params.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/status_annotations.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/statefulset.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/replicationcontroller.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/replicaset.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/pod.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/pod-with-app.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/multi-init.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/multi-container.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/list.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/list-frontend.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/kubevirtInterfaces_list.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/kubevirtInterfaces.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/job.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/hello.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/hello-tproxy.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/hello-tproxy-debug.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/hello-template-in-values.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/hello-proxy-override.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/hello-never.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/hello-namespace.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/hello-multi.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/hello-ignore.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/hello-config-map-name.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/hello-always.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/frontend.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/format-duration.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/enable-core-dump.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/deploymentconfig.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/deploymentconfig-multi.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/daemonset.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/cronjob.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/cronjob-with-app.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/auth.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/auth.non-default-service-account.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/auth.cert-dir.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/app_probe/two_container.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/app_probe/ready_only.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/app_probe/ready_live.yaml.injected
CONFLICT (content): Merge conflict in pilot/pkg/kube/inject/testdata/inject/app_probe/ready_live.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/app_probe/one_container.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/app_probe/named_port.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/app_probe/https-probes.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/app_probe/hello-readiness.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/app_probe/hello-probes.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/app_probe/hello-probes-with-flag-unset-in-annotation.yaml.injected
Auto-merging pilot/pkg/kube/inject/testdata/inject/app_probe/hello-probes-with-flag-set-in-annotation.yaml.injected
error: Failed to merge in the changes.
Patch failed at 0002 Update injection unit tests

@istio-testing
Copy link
Copy Markdown
Collaborator

In response to a cherrypick label: new pull request created: #19832

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/config cla: yes Set by the Google CLA bot to indicate the author of a PR has signed the Google CLA. size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Include all securityContext fields in injection template