{"action":"created","issue":{"url":"https://api.github.com/repos/kubernetes/kubernetes/issues/15726","labels_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/15726/labels{/name}","comments_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/15726/comments","events_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/15726/events","html_url":"https://github.com/kubernetes/kubernetes/issues/15726","id":111692875,"number":15726,"title":"Add protocol versions & negotiation for exec, attach, port forward","user":{"login":"ncdc","id":354,"avatar_url":"https://avatars.githubusercontent.com/u/354?v=3","gravatar_id":"","url":"https://api.github.com/users/ncdc","html_url":"https://github.com/ncdc","followers_url":"https://api.github.com/users/ncdc/followers","following_url":"https://api.github.com/users/ncdc/following{/other_user}","gists_url":"https://api.github.com/users/ncdc/gists{/gist_id}","starred_url":"https://api.github.com/users/ncdc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ncdc/subscriptions","organizations_url":"https://api.github.com/users/ncdc/orgs","repos_url":"https://api.github.com/users/ncdc/repos","events_url":"https://api.github.com/users/ncdc/events{/privacy}","received_events_url":"https://api.github.com/users/ncdc/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/kubernetes/kubernetes/labels/priority/P1","name":"priority/P1","color":"eb6420"},{"url":"https://api.github.com/repos/kubernetes/kubernetes/labels/team/CSI","name":"team/CSI","color":"d2b48c"}],"state":"open","locked":false,"assignee":{"login":"ncdc","id":354,"avatar_url":"https://avatars.githubusercontent.com/u/354?v=3","gravatar_id":"","url":"https://api.github.com/users/ncdc","html_url":"https://github.com/ncdc","followers_url":"https://api.github.com/users/ncdc/followers","following_url":"https://api.github.com/users/ncdc/following{/other_user}","gists_url":"https://api.github.com/users/ncdc/gists{/gist_id}","starred_url":"https://api.github.com/users/ncdc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ncdc/subscriptions","organizations_url":"https://api.github.com/users/ncdc/orgs","repos_url":"https://api.github.com/users/ncdc/repos","events_url":"https://api.github.com/users/ncdc/events{/privacy}","received_events_url":"https://api.github.com/users/ncdc/received_events","type":"User","site_admin":false},"milestone":null,"comments":7,"created_at":"2015-10-15T19:43:10Z","updated_at":"2015-10-17T00:33:46Z","closed_at":null,"body":"As seen in #15702, trying to use kubectl from master (which includes #13322) against GKE (currently Kube 1.0.6, which does not include 13322) results in exec falling to function properly. We need to add protocol versions and negotiation to exec, attach, and port-forward to ensure backwards and forwards compatibility.\r\n\r\n@smarterclayton @liggitt @lavalamp @kubernetes/kubectl @kubernetes/rh-ux @kubernetes/rh-cluster-infra "},"comment":{"url":"https://api.github.com/repos/kubernetes/kubernetes/issues/comments/148870951","html_url":"https://github.com/kubernetes/kubernetes/issues/15726#issuecomment-148870951","issue_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/15726","id":148870951,"user":{"login":"lavalamp","id":647318,"avatar_url":"https://avatars.githubusercontent.com/u/647318?v=3","gravatar_id":"","url":"https://api.github.com/users/lavalamp","html_url":"https://github.com/lavalamp","followers_url":"https://api.github.com/users/lavalamp/followers","following_url":"https://api.github.com/users/lavalamp/following{/other_user}","gists_url":"https://api.github.com/users/lavalamp/gists{/gist_id}","starred_url":"https://api.github.com/users/lavalamp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lavalamp/subscriptions","organizations_url":"https://api.github.com/users/lavalamp/orgs","repos_url":"https://api.github.com/users/lavalamp/repos","events_url":"https://api.github.com/users/lavalamp/events{/privacy}","received_events_url":"https://api.github.com/users/lavalamp/received_events","type":"User","site_admin":false},"created_at":"2015-10-17T00:33:46Z","updated_at":"2015-10-17T00:33:46Z","body":"Yes, SGTM\n\nOn Fri, Oct 16, 2015 at 5:13 PM, Andy Goldstein <notifications@github.com>\nwrote:\n\n> @lavalamp <https://github.com/lavalamp> we need to first come up with a\n> plan for how to do the protocol negotiation. Once we do that, it shouldn't\n> be difficult to restore support for the code as it was in 1.0.x (i.e. no\n> defined protocol), and then continue to evolve with new protocol versions\n> as needed.\n>\n> The exec/attach/port-forward flows all start with an HTTP request with Connection:\n> Upgrade and then an Upgrade header for either spdy or websockets. The\n> kubelet handles the request, returns 101 switching protocols, hijacks the\n> connection, and turns it into a multiplexed stream-based connection.\n>\n> I think we'll want to add a desired stream-protocol-version header to the\n> HTTP request so the kubelet knows what version the client wants to use. An\n> older kubelet won't recognize and handle that, so the client should\n> downgrade to the 1.0.x protocol. A newer kubelet can handle it and respond\n> with a stream-protocol-version in the response to complete the handshake,\n> or reject the connection and return a header indicating what\n> stream-protocol-versions it does support. And if you have an older client\n> that doesn't send the header, the newer kubelet will assume it's the 1.0.x\n> protocol as well.\n>\n> Does something along those lines sound decent to you?\n>\n> —\n> Reply to this email directly or view it on GitHub\n> <https://github.com/kubernetes/kubernetes/issues/15726#issuecomment-148868991>\n> .\n>\n"}}