-
Notifications
You must be signed in to change notification settings - Fork 4.2k
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
[WIP] Update documentation for single/multi tenant configurations #2074
Conversation
README.md
Outdated
@@ -13,26 +13,51 @@ itself. | |||
![Dashboard UI workloads page](docs/dashboard-ui.png) | |||
|
|||
## Deployment | |||
It is likely that the Dashboard is already installed on your cluster. Check with the following command: | |||
Provided instructions are compliant with kubernetes 1.6+. If you plan to deploy dashboard on older kubernetes version please |
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.
s/dashboard/Dashboard
s/kubernetes/Kubernetes
README.md
Outdated
TODO multi-tenant SA, Role deployment | ||
``` | ||
|
||
### Single-tenant configuration |
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 deployment section is the single tenant documentation, right?
README.md
Outdated
@@ -13,26 +13,51 @@ itself. | |||
![Dashboard UI workloads page](docs/dashboard-ui.png) | |||
|
|||
## Deployment | |||
It is likely that the Dashboard is already installed on your cluster. Check with the following command: | |||
Provided instructions are compliant with kubernetes 1.6+. If you plan to deploy dashboard on older kubernetes version please | |||
follow [these instructions](#older-kubernetes-versions). |
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.
I like this idea, but I would move to separate page. The landing page should be as easy as possible
You could do similar with multi-tenant setup
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.
I didn't want to force user to open another page just to copy command in order to deploy rbac configuration. Single-tenant description is also very simple. There is not much more to add so keeping 1 sentence and 1 command on separate page seems unnecessary.
Do we want to force users to open another page just to set up RBACs for dashboard? Usually all commands required to run application are present on a landing page.
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.
Landing Page should describe getting started steps. Everything advanced to subpages
README.md
Outdated
TODO single-tenant SA, Role deployment | ||
``` | ||
|
||
### Older kubernetes versions |
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.
move to separate page
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.
I agree here. We can move this information to a separate page.
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.
I don't like the current structure. Structure should be cleaner and also simpified. We can talk directly
My comments on the questions:
|
As we discussed in #574 single-tenant(full dashboard access to the cluster) approach is overall not a secure approach, therefore I'd not make it our default and suggested configuration. I think information about both configurations have to be stated loud and clear on the same level without making one of them more prominent. This way user will have to choose in the beginning configuration he preffers and we will not suggest that he should use one or another. Either we leave both options with short description on landing page or we only list links to pages with information about second deployment step, i.e. Deploy dashboard using the following command: |
If we don't want to provide a default kind of deployment and want to force the user to make a decission than we provide just 2 links on landing page:
In the single tenant doc we provide the current yaml and the current documentation. I don't like to split up the deployment for single tenant in two steps. |
@cheld We have to let users know, that installation process has two steps to do it like this I believe. |
In any case the documentation must explain the decision the user has to take. The options secure/insecure could work in other scenarios, but in our it does not make sense. So, why would someone want an insecure setup? So every user would follow the secure setup and then fail, because it is far too complicated. Then you have to explain that the insure setup is actually secure for single tenant environments. So, the actual choice for the user is single tenant/multi-tenant. There is no escape. It has to be explained. |
3d4fab9
to
9836bdd
Compare
In the multi-tenant case that certainly is ok. In the single tenant case, I wonder if there is any benefit. Maybe you name the yaml something like "grant-full-access-to-dashboard.yaml", but there has to be some benefit... |
Actually this single-tenant approach could still be insecure even if there is only 1 person that manages the cluster. In example if you deploy ubuntu and decide to give user access to this "virtualized system". Even so user is not aware that underneath kubernetes is used then privilege escalation is possible thanks to pod-to-pod communication because you have deployed single-tenant configuration and dashboard has full access to the cluster. IMHO single-tenant will always be insecure by default and exposed to potential security breaches. Multi-tenant on the other side will be secure by default. |
Codecov Report
@@ Coverage Diff @@
## master #2074 +/- ##
=======================================
Coverage 59.35% 59.35%
=======================================
Files 545 545
Lines 11556 11556
=======================================
Hits 6859 6859
Misses 4524 4524
Partials 173 173 Continue to review full report at Codecov.
|
@gertipoppel will help to bring it into proper shape. But please provide all the required steps and yaml |
I think we agree that there is no point in documenting a setup for production and defining it as insecure by default and a gate for security breaches. In this case we should not document it at all and only document the secure setup, but then in all details. On the other hand this architectual problem is known since the beginning. So far we considered it secure enough for single tenant usage and securing multi tenant usage as an ongoing process. |
I think that we can still document this setup but we are obligated to warn users about potential security issues and maybe suggest some steps to avoid it, i.e. by setting up network policies and blocking traffic from other pods/namespaces. I only wouldn't default to single setup but rather present both configurations as equal and let user choose what he needs. We only need to describe pros and cons of both configurations. Then we can just point people to our documentation if there are some issues caused by not reading it and close them. |
I strongly disagree. Private pod and service networks should not be assumed, even in single-tenant setups.
Yes, I'd expect a clear explanation of the exposure and a list of the aspects that must be secured to avoid letting unintended actors make use of that exposure |
Can we go with the secure/insecure wording? Or insecure/default? And explain why someone would use insecure (for onboarding and stuff). I believe that multi-single tenant wording hides away the important piece of security information that we want to convey. |
|
||
For security reasons installation has been split into two parts: | ||
[Deployment](#deployment) and [Configuration](#configuration). Deployment part will deploy Dashboard on your | ||
cluster without any privileges. It will only work if RBACs are disabled on your cluster. |
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.
Without any privileges? I think this is actually "with administrator privileges open to anyone with access to the UI". Is this correct?
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.
This is the current behavior but my proposal is to split installation and privileges configuration into 2 parts so simple kubectl create -f <dashboard_link>
would deploy dashboard but without cluster role or service account with admin privileges.
Then as a second step we'd deploy privileges configuration based on chosen configuration: minimal or full.
I suggested same thing in #2074 (comment). |
Yes, I'd also go with this wording. We have to make sure that when dashboard is deployed with kubernetes then its' default configuration will not cause any security issues. That is currently the case. |
I am fine with that (or something else). Of course, it would be bizzar if the "default" installation document is not complete and only usefull for experts...Anyway lets wait and see how the document will look like. |
Any progress here? It'd be great to have this for 1.6.2. |
It's on hold for now as I'm working on implementing log in mechanism for dashboard. Once it's done we will fallback to secure by default and rely on it. |
Awesome, thanks! |
Already done in a different way. |
Closes #2045. Related to discussion started in #574.
First we have to state what we will support. What I think we should do is:
curl -sSL <dashboard_url> | sed "s/amd64/arm64/g" | kubectl create -f -
kubectl proxy
is not the right way to authorize users for multi-tenant configurations.I have updated documentation a bit and if we agree on required changes I will update yamls and remaining docs.
Calling everyone involved in discussion.
@bryk @cheld @rf232 @liggitt @maciaszczykm