{"action":"created","issue":{"url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/issues/9210","labels_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/issues/9210/labels{/name}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/issues/9210/comments","events_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/issues/9210/events","html_url":"https://github.com/GoogleCloudPlatform/kubernetes/pull/9210","id":84740997,"number":9210,"title":"Implement Iptables based Proxy","user":{"login":"BenTheElder","id":917931,"avatar_url":"https://avatars.githubusercontent.com/u/917931?v=3","gravatar_id":"","url":"https://api.github.com/users/BenTheElder","html_url":"https://github.com/BenTheElder","followers_url":"https://api.github.com/users/BenTheElder/followers","following_url":"https://api.github.com/users/BenTheElder/following{/other_user}","gists_url":"https://api.github.com/users/BenTheElder/gists{/gist_id}","starred_url":"https://api.github.com/users/BenTheElder/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/BenTheElder/subscriptions","organizations_url":"https://api.github.com/users/BenTheElder/orgs","repos_url":"https://api.github.com/users/BenTheElder/repos","events_url":"https://api.github.com/users/BenTheElder/events{/privacy}","received_events_url":"https://api.github.com/users/BenTheElder/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/labels/cla:%20yes","name":"cla: yes","color":"bfe5bf"},{"url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/labels/lgtm","name":"lgtm","color":"159818"}],"state":"open","locked":false,"assignee":{"login":"thockin","id":5595220,"avatar_url":"https://avatars.githubusercontent.com/u/5595220?v=3","gravatar_id":"","url":"https://api.github.com/users/thockin","html_url":"https://github.com/thockin","followers_url":"https://api.github.com/users/thockin/followers","following_url":"https://api.github.com/users/thockin/following{/other_user}","gists_url":"https://api.github.com/users/thockin/gists{/gist_id}","starred_url":"https://api.github.com/users/thockin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thockin/subscriptions","organizations_url":"https://api.github.com/users/thockin/orgs","repos_url":"https://api.github.com/users/thockin/repos","events_url":"https://api.github.com/users/thockin/events{/privacy}","received_events_url":"https://api.github.com/users/thockin/received_events","type":"User","site_admin":false},"milestone":null,"comments":176,"created_at":"2015-06-03T19:44:37Z","updated_at":"2015-08-12T06:49:16Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/pulls/9210","html_url":"https://github.com/GoogleCloudPlatform/kubernetes/pull/9210","diff_url":"https://github.com/GoogleCloudPlatform/kubernetes/pull/9210.diff","patch_url":"https://github.com/GoogleCloudPlatform/kubernetes/pull/9210.patch"},"body":"This is an implementation of https://github.com/GoogleCloudPlatform/kubernetes/issues/3760.\r\n\r\nIt implements an `iptables-restore` wrapper, a dummy 'loadbalancer' that serves as a `config.EndpointsConfigHandler`, and a purely iptables based version of `Proxier`, as well as a method for determining whether to use the new `ProxierIptables` or the old `Proxier` based on the `iptables` version. `kube-proxy` now autoselects between the two and uses the new `ProxierIptables` + `DummyLoadBalancerIptables` pair when possible.\r\n\r\nTODO:\r\n- [x] Write new `Proxier` and `LoadBalancer` (`ProxierIptables` and `DummyLoadBalancerIptables`)\r\n- [x] Update `kube-proxy` to select between old `Proxier` and `ProxierIptables`\r\n- [x] Basic `iptables` rule generation\r\n- [x] Faster rule generation (switched to using bytes.Buffer[s] for string concatenation)\r\n- [x] Sticky Sessions\r\n- [x] Delete old rule chains\r\n- [x] Testing. We need more tests and this needs to be more thoroughly run through e2e when done. (mostly done now, just need more verification on e2e and the iptables rules)\r\n- [x] Select `iptables` minimum version for switching over from `Proxier` to `ProxierIptables` (I've selected a version now, but we may want to change it, this probably needs some discussion)\r\n- [x] Make rules fully deterministic (namely make the chain generation use hashing instead of a counter).\r\n- [x] Parse `iptables-save` output to extract existing chains and rules\r\n- [x] Use `iptables-save` output to preserve counters   \r\n\r\nFurther TODO:\r\n- [ ] Use `iptables-save` output to minimize excess rule rewriting.\r\n- [ ] Handle the edge case with pod->self from https://github.com/BenTheElder/kubernetes/issues/3"},"comment":{"url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/issues/comments/130189575","html_url":"https://github.com/GoogleCloudPlatform/kubernetes/pull/9210#issuecomment-130189575","issue_url":"https://api.github.com/repos/GoogleCloudPlatform/kubernetes/issues/9210","id":130189575,"user":{"login":"BenTheElder","id":917931,"avatar_url":"https://avatars.githubusercontent.com/u/917931?v=3","gravatar_id":"","url":"https://api.github.com/users/BenTheElder","html_url":"https://github.com/BenTheElder","followers_url":"https://api.github.com/users/BenTheElder/followers","following_url":"https://api.github.com/users/BenTheElder/following{/other_user}","gists_url":"https://api.github.com/users/BenTheElder/gists{/gist_id}","starred_url":"https://api.github.com/users/BenTheElder/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/BenTheElder/subscriptions","organizations_url":"https://api.github.com/users/BenTheElder/orgs","repos_url":"https://api.github.com/users/BenTheElder/repos","events_url":"https://api.github.com/users/BenTheElder/events{/privacy}","received_events_url":"https://api.github.com/users/BenTheElder/received_events","type":"User","site_admin":false},"created_at":"2015-08-12T06:49:16Z","updated_at":"2015-08-12T06:49:16Z","body":"Reviewing log..."}}