Skip to content
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

🐛 cross-namespace owner references should be disallowed #675

Merged

Conversation

boylee1111
Copy link
Contributor

Based on https://kubernetes.io/docs/concepts/workloads/controllers/garbage-collection/#owners-and-dependents, cross-namespace owner references are disallowed by design. The SetControllerReference() should prevent owner reference from setting on dependents in different namespace.

@k8s-ci-robot
Copy link
Contributor

Thanks for your pull request. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

📝 Please follow instructions at https://git.k8s.io/community/CLA.md#the-contributor-license-agreement to sign the CLA.

It may take a couple minutes for the CLA signature to be fully registered; after that, please reply here with a new comment and we'll verify. Thanks.


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.

@k8s-ci-robot k8s-ci-robot added the cncf-cla: no Indicates the PR's author has not signed the CNCF CLA. label Nov 7, 2019
@k8s-ci-robot
Copy link
Contributor

Welcome @boylee1111!

It looks like this is your first PR to kubernetes-sigs/controller-runtime 🎉. Please refer to our pull request process documentation to help your PR have a smooth ride to approval.

You will be prompted by a bot to use commands during the review process. Do not be afraid to follow the prompts! It is okay to experiment. Here is the bot commands documentation.

You can also check if kubernetes-sigs/controller-runtime has its own contribution guidelines.

You may want to refer to our testing guide if you run into trouble with your tests not passing.

If you are having difficulty getting your pull request seen, please follow the recommended escalation practices. Also, for tips and tricks in the contribution process you may want to read the Kubernetes contributor cheat sheet. We want to make sure your contribution gets all the attention it needs!

Thank you, and welcome to Kubernetes. 😃

@k8s-ci-robot
Copy link
Contributor

Hi @boylee1111. Thanks for your PR.

I'm waiting for a kubernetes-sigs member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should join the org to skip this step.

Once the patch is verified, the new status will be reflected by the ok-to-test label.

I understand the commands that are listed here.

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.

@k8s-ci-robot k8s-ci-robot added needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. size/S Denotes a PR that changes 10-29 lines, ignoring generated files. labels Nov 7, 2019
@boylee1111 boylee1111 force-pushed the disallow_cross_namespace_refs branch 2 times, most recently from 735a877 to 4d0aa95 Compare November 7, 2019 23:58
@k8s-ci-robot k8s-ci-robot added cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. and removed cncf-cla: no Indicates the PR's author has not signed the CNCF CLA. labels Nov 7, 2019
@alexeldeib
Copy link
Contributor

/ok-to-test

@k8s-ci-robot k8s-ci-robot added ok-to-test Indicates a non-member PR verified by an org member that is safe to test. and removed needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. labels Nov 8, 2019
@boylee1111
Copy link
Contributor Author

/assign @droot

@@ -60,6 +60,10 @@ func SetControllerReference(owner, object metav1.Object, scheme *runtime.Scheme)
return fmt.Errorf("%T is not a runtime.Object, cannot call SetControllerReference", owner)
}

if owner.GetNamespace() != "" && owner.GetNamespace() != object.GetNamespace() {
return fmt.Errorf("cross-namespace owner references are disallowed, owner's namespace %s, obj's namespace %s", owner.GetNamespace(), object.GetNamespace())
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This happens to (accidentally?) also cover the case of "cluster-scoped resource must not have a namespace-scoped owner". However in that case the error is confusing, because its not a cross-namespace ref.

Would you mind returning a different error message in case object.GetNamesapce() == ""?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

my intention was to cover both cases. I had separated them now, it's more clear. thx for suggestion.

@k8s-ci-robot k8s-ci-robot added size/M Denotes a PR that changes 30-99 lines, ignoring generated files. and removed size/S Denotes a PR that changes 10-29 lines, ignoring generated files. labels Nov 11, 2019
Copy link
Member

@alvaroaleman alvaroaleman left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/lgtm
Thanks!

@k8s-ci-robot k8s-ci-robot added the lgtm "Looks good to me", indicates that a PR is ready to be merged. label Nov 12, 2019
@k8s-ci-robot k8s-ci-robot added size/S Denotes a PR that changes 10-29 lines, ignoring generated files. and removed lgtm "Looks good to me", indicates that a PR is ready to be merged. size/M Denotes a PR that changes 30-99 lines, ignoring generated files. labels Nov 13, 2019
@boylee1111
Copy link
Contributor Author

boylee1111 commented Nov 13, 2019

Sorry, I accidentally pushed something wrong to this pr, I had removed it now. PTAL.

@DirectXMan12
Copy link
Contributor

/lgtm
/approve

thanks!

@k8s-ci-robot k8s-ci-robot added the lgtm "Looks good to me", indicates that a PR is ready to be merged. label Nov 15, 2019
@k8s-ci-robot
Copy link
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: boylee1111, DirectXMan12

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@k8s-ci-robot k8s-ci-robot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Nov 15, 2019
@k8s-ci-robot k8s-ci-robot merged commit 1fbc224 into kubernetes-sigs:master Nov 15, 2019
@boylee1111 boylee1111 deleted the disallow_cross_namespace_refs branch November 16, 2019 00:11
@FaKod
Copy link

FaKod commented Dec 1, 2019

I stumbled upon this PR while migrating from Operator Framework (there is no such limitation) to Kubebuilder.

I understand why this cross namespace limitation makes sense for standard K8s resources like StatefulSets or Deployments. However, why has this to be enforced in a general framework, where also more abstract functionalities are implemented?

In my case an operator creates developer workspaces, implemented as Namespaces and a Pod in each of them. These workspaces are defined by a namespaced CRs in the operator namespace. I do not see any requirements to introduce a cluster CRD for that.

@alvaroaleman
Copy link
Member

@FaKod this is a limitation of Kubernetes itself, check the link in the PR description

@FaKod
Copy link

FaKod commented Dec 1, 2019

@alvaroaleman A call to SetControllerReference worked fine with the Operator framework, even if the CR and the resource to watch are of different namespaces. Thats what this PR is disallowing, right?

@alvaroaleman
Copy link
Member

Yes, prior to this PR it was possible to create a defunct owner Ref.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
approved Indicates a PR has been approved by an approver from all required OWNERS files. cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. lgtm "Looks good to me", indicates that a PR is ready to be merged. ok-to-test Indicates a non-member PR verified by an org member that is safe to test. size/S Denotes a PR that changes 10-29 lines, ignoring generated files.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

7 participants