-
Notifications
You must be signed in to change notification settings - Fork 40k
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
Secure node -> master communication #3168
Comments
As part of this, we should harden the master against properly authenticated but malformed requests (in other words, make sure the master gracefully handles bugs in the node components). |
To ensure we handle malformed requests, we should have a fuzz test than To handle a software fault where one or more kubelets are sending requests Defending against very high aggregate request rates (when the master is On Mon, Dec 29, 2014 at 3:34 PM, davidopp notifications@github.com wrote:
|
I'd like to leave this open as specifically tracking secure master <-> kubelet communication and farm out other independent parts to separate issues (fuzz testing, (D)DoS prevention, and the wide variety of issues in #2483). |
#156 is a proposal to make apiserver and controllers not contact kubelet. I am now in favor of that proposal. |
I think we still need a secure channel from apiserver to kubelet to do things like exec in a container and stream container logs. |
Proxy/bastion cases. Fair enough. |
Let's continue discussion of "exec in container and stream container logs" on #156 |
Here is my plan to get us to "Static Clustering" as defined in clustering.md:
|
@liggitt I think this is the best place to describe the things we were talking about w.r.t. securing the kubelet. |
I'd like to start by plumbing TLS, server cert, and server key options from the Note that there are still places that assume http and 10250 (like |
Before doing |
@LiGgit I'm finally getting some time to work on this issue and it seems like you've gotten a bit of a start for me. Thanks! The list items above were a bit hand-wavy and weren't meant to represent consecutive PRs but rather the general plan forward, knowing that it will need to be tweaked as I dig into the details for each step. For your specific question, when the node registers with the master, we can certainly store a bit of extra information about how to contact the node, including port (I hadn't considered storing the scheme, since I'd just assumed everything would need to move to https but we can discuss that when we get there). |
Update: @cjcullen is actively driving the work to secure the master -> kubelet communication for the proxy -- CJ, can you please mention this issue for the relevant PRs so we can track them as they land? (And thanks also to @brendandburns for helping out!) |
cc @rrati |
SSH proxy code is in. The only remaining question is whether to leave 10250 open to the public internet (in which case we'd still need to secure it) or close it off and only listen inside the cluster. |
We've decided not to leave 10250 open to the internet, so I'm bumping this to the v1.0-post milestone (since we still want to add better security to the kubelet's http endpoint, just not for 1.0). |
I'm trying to follow the status of this issue. Is the master -> kubelet connection still insecure? |
The master -> kubelet connection is not secure enough to be run across the internet. The master currently only connects to the kubelet for proxying user requests that need to be forwarded to the kubelet (e.g. hitting the /api/v1/proxy/ endpoint or using kubectl exec / kubectl logs). In most cases, this is done over a local secure network. For GKE, we use ssh tunnels to securely put packets onto the cluster's network without exposing the kubelet's web server to the internet. Remaining work: The kubelet needs to serve its https endpoint with a certificate that is signed by the cluster CA. Right now it uses a self signed cert for its web server, even though it uses a client certificate signed by the CA as credentials to authenticate to the master. The master needs to have a client certificate signed by the cluster CA to present to the kubelet when connecting. We are also looking at moving the proxying functionality out of the master, which would entirely remove the need for the master to connect to the kubelet, making the work to secure the kubelet unnecessary. I'm not sure whether that will land first or if it's still worth trying to secure the master -> kubelet communications. |
The proxying function still has to go somewhere, so I would assume that has On Fri, Jul 24, 2015 at 12:26 PM, Robert Bailey notifications@github.com
Clayton Coleman | Lead Engineer, OpenShift |
There's been quite a bit of discussion internally (not necessarily conclusive one way or another), but I don't know if there's an issue open.... looking. |
I've created #11816 to discuss securing the master -> node communication, so I'm going to close this issue in favor of that one. |
In some hosting environments/configurations, the network traffic between node and master may traverse the public Internet. As a result, we'd like to secure the communication between the node components (e.g. kubelet and proxy) and master. To avoid the complexity of securing the kubelet API, we'd like to secure the node -> master communication, but not the reverse. This simplification has a downside; it means all communication between kubelet and master would have to be initiated by the kubelet. For example, we'd have to change health checks to be initiated by the kubelet, which in turn raises a question of how to do flow control (master apply backpressure when it becomes overloaded).
The text was updated successfully, but these errors were encountered: