{"action":"created","issue":{"url":"https://api.github.com/repos/kubernetes/kubernetes/issues/24569","repository_url":"https://api.github.com/repos/kubernetes/kubernetes","labels_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/24569/labels{/name}","comments_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/24569/comments","events_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/24569/events","html_url":"https://github.com/kubernetes/kubernetes/pull/24569","id":149901238,"number":24569,"title":"WIP - Add ELB proxy protocol support","user":{"login":"williamsandrew","id":722481,"avatar_url":"https://avatars.githubusercontent.com/u/722481?v=3","gravatar_id":"","url":"https://api.github.com/users/williamsandrew","html_url":"https://github.com/williamsandrew","followers_url":"https://api.github.com/users/williamsandrew/followers","following_url":"https://api.github.com/users/williamsandrew/following{/other_user}","gists_url":"https://api.github.com/users/williamsandrew/gists{/gist_id}","starred_url":"https://api.github.com/users/williamsandrew/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/williamsandrew/subscriptions","organizations_url":"https://api.github.com/users/williamsandrew/orgs","repos_url":"https://api.github.com/users/williamsandrew/repos","events_url":"https://api.github.com/users/williamsandrew/events{/privacy}","received_events_url":"https://api.github.com/users/williamsandrew/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/kubernetes/kubernetes/labels/cla:%20yes","name":"cla: yes","color":"bfe5bf"},{"url":"https://api.github.com/repos/kubernetes/kubernetes/labels/needs-rebase","name":"needs-rebase","color":"BDBDBD"},{"url":"https://api.github.com/repos/kubernetes/kubernetes/labels/release-note-label-needed","name":"release-note-label-needed","color":"db5a64"},{"url":"https://api.github.com/repos/kubernetes/kubernetes/labels/size/L","name":"size/L","color":"ee9900"}],"state":"open","locked":false,"assignee":{"login":"justinsb","id":100893,"avatar_url":"https://avatars.githubusercontent.com/u/100893?v=3","gravatar_id":"","url":"https://api.github.com/users/justinsb","html_url":"https://github.com/justinsb","followers_url":"https://api.github.com/users/justinsb/followers","following_url":"https://api.github.com/users/justinsb/following{/other_user}","gists_url":"https://api.github.com/users/justinsb/gists{/gist_id}","starred_url":"https://api.github.com/users/justinsb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/justinsb/subscriptions","organizations_url":"https://api.github.com/users/justinsb/orgs","repos_url":"https://api.github.com/users/justinsb/repos","events_url":"https://api.github.com/users/justinsb/events{/privacy}","received_events_url":"https://api.github.com/users/justinsb/received_events","type":"User","site_admin":false},"milestone":null,"comments":12,"created_at":"2016-04-20T22:11:24Z","updated_at":"2016-05-13T22:29:33Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/24569","html_url":"https://github.com/kubernetes/kubernetes/pull/24569","diff_url":"https://github.com/kubernetes/kubernetes/pull/24569.diff","patch_url":"https://github.com/kubernetes/kubernetes/pull/24569.patch"},"body":"This is a work in progress branch that adds support for the Proxy Protocol with Elastic Load Balancers. The proxy protocol is documented here: http://www.haproxy.org/download/1.5/doc/proxy-protocol.txt. It allows us to pass the \"real ip\" address of a client to pods behind services.\r\n\r\nAs it stands now, we create an ELB policy on the load balancer that enables the proxy protocol. We then enumerate each node port assigned to the load balancer and add our newly created policy to it. The manual process is documented here: http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/enable-proxy-protocol.html\r\n\r\n\r\nRight now, I’m looking to get some feedback on the approach before I dive too much deeper in the code. More precisely, I have questions regarding the following:\r\n\r\n1) Right now I just check that a certain annotation exists on the service regardless of what its value is. Assuming we’re going to enable this feature via an annotation, what is the expected experience? This decision likely depends on the answers to the next questions.\r\n\r\n2) Right now the implementation enables the proxy protocol on every ELB backend. The actual ELB API expects you to add the policy for each configured backend. Do we want the ability to configure the proxy protocol on a per service port basis? For example, if a service exposes TCP 80 and 443, would we want the ability to only enable the proxy protocol on port 443? Does this overcomplicate the implementation? If we wanted to go this direction we could do something like ...\r\n\r\n```\r\n{\r\n  \"service.beta.kubernetes.io/aws-load-balancer-proxy-protocol\": \"tcp:80,tcp:443\"\r\n}\r\n```\r\n\r\n3) I avoided this because I was concerned with scope creep and our organization doesn’t need it, but could/should our implementation be adjusted to just handle ELB policies in general? I hadn’t used the ELB API until I started working on this branch so I don’t know how realistic this is. I also don't know how common this use case is as our organization has used our own load balancing setup prior to Kubernetes. This page has a couple of examples at the bottom: http://docs.aws.amazon.com/cli/latest/reference/elb/create-load-balancer-policy.html\r\n\r\ncc @justinsb\n\n<!-- Reviewable:start -->\n---\nThis change is [<img src=\"http://reviewable.k8s.io/review_button.svg\" height=\"35\" align=\"absmiddle\" alt=\"Reviewable\"/>](http://reviewable.k8s.io/reviews/kubernetes/kubernetes/24569)\n<!-- Reviewable:end -->\n"},"comment":{"url":"https://api.github.com/repos/kubernetes/kubernetes/issues/comments/219174656","html_url":"https://github.com/kubernetes/kubernetes/pull/24569#issuecomment-219174656","issue_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/24569","id":219174656,"user":{"login":"k8s-bot","id":12551979,"avatar_url":"https://avatars.githubusercontent.com/u/12551979?v=3","gravatar_id":"","url":"https://api.github.com/users/k8s-bot","html_url":"https://github.com/k8s-bot","followers_url":"https://api.github.com/users/k8s-bot/followers","following_url":"https://api.github.com/users/k8s-bot/following{/other_user}","gists_url":"https://api.github.com/users/k8s-bot/gists{/gist_id}","starred_url":"https://api.github.com/users/k8s-bot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/k8s-bot/subscriptions","organizations_url":"https://api.github.com/users/k8s-bot/orgs","repos_url":"https://api.github.com/users/k8s-bot/repos","events_url":"https://api.github.com/users/k8s-bot/events{/privacy}","received_events_url":"https://api.github.com/users/k8s-bot/received_events","type":"User","site_admin":false},"created_at":"2016-05-13T22:29:33Z","updated_at":"2016-05-13T22:29:33Z","body":"GCE e2e build/test **failed** for commit 73135b23817d0b3a7d7a94a3a7596084672667bb.\n* [Build Log](http://pr-test.k8s.io/24569/kubernetes-pull-build-test-e2e-gce/39903/build-log.txt)\n* [Test Artifacts](https://console.developers.google.com/storage/browser/kubernetes-jenkins/pr-logs/pull/24569/kubernetes-pull-build-test-e2e-gce/39903/artifacts/)\n* [Internal Jenkins Results](http://goto.google.com/prkubekins/job/kubernetes-pull-build-test-e2e-gce//39903)\n\nPlease reference the [list of currently known flakes](https://github.com/kubernetes/kubernetes/issues?q=is:issue+label:kind/flake+is:open) when examining this failure. If you request a re-test, you must reference the issue describing the flake.\n"}}