From 970c045848025c855d880232004045ed383ca82e Mon Sep 17 00:00:00 2001 From: Tim Hockin Date: Mon, 26 Oct 2015 23:08:37 -0700 Subject: [PATCH] Enable iptables kube-proxy by default in master --- cmd/kube-proxy/app/server.go | 65 ++-- cmd/kube-proxy/app/server_test.go | 194 +++++++++-- docs/admin/kube-proxy.md | 4 +- docs/user-guide/debugging-services.md | 67 ++-- docs/user-guide/services-detail.png | Bin 68514 -> 0 bytes .../user-guide/services-iptables-overview.png | Bin 0 -> 54546 bytes ...ail.svg => services-iptables-overview.svg} | 322 +++++++----------- docs/user-guide/services-overview.png | Bin 43306 -> 0 bytes .../services-userspace-overview.png | Bin 0 -> 54270 bytes ...ew.svg => services-userspace-overview.svg} | 149 ++++++-- docs/user-guide/services.md | 105 ++++-- pkg/proxy/iptables/proxier.go | 16 +- pkg/proxy/userspace/proxier_test.go | 81 +---- pkg/util/iptables/iptables.go | 13 +- pkg/util/iptables/iptables_test.go | 2 +- pkg/util/iptables/testing/fake.go | 4 + 16 files changed, 607 insertions(+), 415 deletions(-) delete mode 100644 docs/user-guide/services-detail.png create mode 100644 docs/user-guide/services-iptables-overview.png rename docs/user-guide/{services-detail.svg => services-iptables-overview.svg} (65%) delete mode 100644 docs/user-guide/services-overview.png create mode 100644 docs/user-guide/services-userspace-overview.png rename docs/user-guide/{services-overview.svg => services-userspace-overview.svg} (72%) diff --git a/cmd/kube-proxy/app/server.go b/cmd/kube-proxy/app/server.go index cc122d46f3..105e135b33 100644 --- a/cmd/kube-proxy/app/server.go +++ b/cmd/kube-proxy/app/server.go @@ -91,7 +91,7 @@ func (s *ProxyServerConfig) AddFlags(fs *pflag.FlagSet) { fs.StringVar(&s.Kubeconfig, "kubeconfig", s.Kubeconfig, "Path to kubeconfig file with authorization information (the master location is set by the master flag).") fs.Var(&s.PortRange, "proxy-port-range", "Range of host ports (beginPort-endPort, inclusive) that may be consumed in order to proxy service traffic. If unspecified (0-0) then ports will be randomly chosen.") fs.StringVar(&s.HostnameOverride, "hostname-override", s.HostnameOverride, "If non-empty, will use this string as identification instead of the actual hostname.") - fs.StringVar(&s.ProxyMode, "proxy-mode", "", "Which proxy mode to use: 'userspace' (older, stable) or 'iptables' (experimental). If blank, look at the Node object on the Kubernetes API and respect the '"+experimentalProxyModeAnnotation+"' annotation if provided. Otherwise use the best-available proxy (currently userspace, but may change in future versions). If the iptables proxy is selected, regardless of how, but the system's kernel or iptables versions are insufficient, this always falls back to the userspace proxy.") + fs.StringVar(&s.ProxyMode, "proxy-mode", "", "Which proxy mode to use: 'userspace' (older) or 'iptables' (faster). If blank, look at the Node object on the Kubernetes API and respect the '"+experimentalProxyModeAnnotation+"' annotation if provided. Otherwise use the best-available proxy (currently iptables). If the iptables proxy is selected, regardless of how, but the system's kernel or iptables versions are insufficient, this always falls back to the userspace proxy.") fs.DurationVar(&s.IptablesSyncPeriod, "iptables-sync-period", s.IptablesSyncPeriod, "How often iptables rules are refreshed (e.g. '5s', '1m', '2h22m'). Must be greater than 0.") fs.DurationVar(&s.ConfigSyncPeriod, "config-sync-period", s.ConfigSyncPeriod, "How often configuration from the apiserver is refreshed. Must be greater than 0.") fs.BoolVar(&s.MasqueradeAll, "masquerade-all", false, "If using the pure iptables proxy, SNAT everything") @@ -238,17 +238,8 @@ func NewProxyServerDefault(config *ProxyServerConfig) (*ProxyServer, error) { var proxier proxy.ProxyProvider var endpointsHandler proxyconfig.EndpointsConfigHandler - useIptablesProxy := false - if mayTryIptablesProxy(config.ProxyMode, client.Nodes(), hostname) { - var err error - // guaranteed false on error, error only necessary for debugging - useIptablesProxy, err = iptables.ShouldUseIptablesProxier() - if err != nil { - glog.Errorf("Can't determine whether to use iptables proxy, using userspace proxier: %v", err) - } - } - - if useIptablesProxy { + proxyMode := getProxyMode(config.ProxyMode, client.Nodes(), hostname, iptInterface) + if proxyMode == proxyModeIptables { glog.V(2).Info("Using iptables Proxier.") proxierIptables, err := iptables.NewProxier(iptInterface, execer, config.IptablesSyncPeriod, config.MasqueradeAll) if err != nil { @@ -340,27 +331,28 @@ type nodeGetter interface { Get(hostname string) (*api.Node, error) } -func mayTryIptablesProxy(proxyMode string, client nodeGetter, hostname string) bool { - if proxyMode == proxyModeIptables { - glog.V(1).Infof("Flag proxy-mode allows iptables proxy") - return true +func getProxyMode(proxyMode string, client nodeGetter, hostname string, iptver iptables.IptablesVersioner) string { + if proxyMode == proxyModeUserspace { + return proxyModeUserspace + } else if proxyMode == proxyModeIptables { + return tryIptablesProxy(iptver) } else if proxyMode != "" { - glog.V(1).Infof("Flag proxy-mode=%q forbids iptables proxy", proxyMode) - return false + glog.V(1).Infof("Flag proxy-mode=%q unknown, assuming iptables proxy", proxyMode) + return tryIptablesProxy(iptver) } // proxyMode == "" - choose the best option. if client == nil { - glog.Errorf("Not trying iptables proxy: nodeGetter is nil") - return false + glog.Errorf("nodeGetter is nil: assuming iptables proxy") + return tryIptablesProxy(iptver) } node, err := client.Get(hostname) if err != nil { - glog.Errorf("Not trying iptables proxy: can't get Node %q: %v", hostname, err) - return false + glog.Errorf("Can't get Node %q, assuming iptables proxy: %v", hostname, err) + return tryIptablesProxy(iptver) } if node == nil { - glog.Errorf("Not trying iptables proxy: got nil Node %q", hostname) - return false + glog.Errorf("Got nil Node %q, assuming iptables proxy: %v", hostname) + return tryIptablesProxy(iptver) } proxyMode, found := node.Annotations[betaProxyModeAnnotation] if found { @@ -372,12 +364,27 @@ func mayTryIptablesProxy(proxyMode string, client nodeGetter, hostname string) b glog.V(1).Infof("Found experimental annotation %q = %q", experimentalProxyModeAnnotation, proxyMode) } } - if proxyMode == proxyModeIptables { - glog.V(1).Infof("Annotation allows iptables proxy") - return true + if proxyMode == proxyModeUserspace { + glog.V(1).Infof("Annotation demands userspace proxy") + return proxyModeUserspace } - glog.V(1).Infof("Not trying iptables proxy: %+v", node) - return false + return tryIptablesProxy(iptver) +} + +func tryIptablesProxy(iptver iptables.IptablesVersioner) string { + var err error + // guaranteed false on error, error only necessary for debugging + useIptablesProxy, err := iptables.CanUseIptablesProxier(iptver) + if err != nil { + glog.Errorf("Can't determine whether to use iptables proxy, using userspace proxier: %v", err) + return proxyModeUserspace + } + if useIptablesProxy { + return proxyModeIptables + } + // Fallback. + glog.V(1).Infof("Can't use iptables proxy, using userspace proxier: %v", err) + return proxyModeUserspace } func (s *ProxyServer) birthCry() { diff --git a/cmd/kube-proxy/app/server_test.go b/cmd/kube-proxy/app/server_test.go index 171fe2d5ff..364d62e160 100644 --- a/cmd/kube-proxy/app/server_test.go +++ b/cmd/kube-proxy/app/server_test.go @@ -17,10 +17,12 @@ limitations under the License. package app import ( + "fmt" "testing" "github.com/stretchr/testify/assert" "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/util/iptables" ) type fakeNodeInterface struct { @@ -31,40 +33,176 @@ func (fake *fakeNodeInterface) Get(hostname string) (*api.Node, error) { return &fake.node, nil } -func Test_mayTryIptablesProxy(t *testing.T) { +type fakeIptablesVersioner struct { + version string // what to return + err error // what to return +} + +func (fake *fakeIptablesVersioner) GetVersion() (string, error) { + return fake.version, fake.err +} + +func Test_getProxyMode(t *testing.T) { var cases = []struct { - flag string - annKey string - annVal string - expected bool + flag string + annotationKey string + annotationVal string + iptablesVersion string + iptablesError error + expected string }{ - {"userspace", "", "", false}, - {"iptables", "", "", true}, - {"", "", "", false}, - {"", "net.experimental.kubernetes.io/proxy-mode", "userspace", false}, - {"", "net.experimental.kubernetes.io/proxy-mode", "iptables", true}, - {"", "net.experimental.kubernetes.io/proxy-mode", "other", false}, - {"", "net.experimental.kubernetes.io/proxy-mode", "", false}, - {"", "net.beta.kubernetes.io/proxy-mode", "userspace", false}, - {"", "net.beta.kubernetes.io/proxy-mode", "iptables", true}, - {"", "net.beta.kubernetes.io/proxy-mode", "other", false}, - {"", "net.beta.kubernetes.io/proxy-mode", "", false}, - {"", "proxy-mode", "iptables", false}, - {"userspace", "net.experimental.kubernetes.io/proxy-mode", "userspace", false}, - {"userspace", "net.experimental.kubernetes.io/proxy-mode", "iptables", false}, - {"iptables", "net.experimental.kubernetes.io/proxy-mode", "userspace", true}, - {"iptables", "net.experimental.kubernetes.io/proxy-mode", "iptables", true}, - {"userspace", "net.beta.kubernetes.io/proxy-mode", "userspace", false}, - {"userspace", "net.beta.kubernetes.io/proxy-mode", "iptables", false}, - {"iptables", "net.beta.kubernetes.io/proxy-mode", "userspace", true}, - {"iptables", "net.beta.kubernetes.io/proxy-mode", "iptables", true}, + { // flag says userspace + flag: "userspace", + expected: proxyModeUserspace, + }, + { // flag says iptables, error detecting version + flag: "iptables", + iptablesError: fmt.Errorf("oops!"), + expected: proxyModeUserspace, + }, + { // flag says iptables, version too low + flag: "iptables", + iptablesVersion: "0.0.0", + expected: proxyModeUserspace, + }, + { // flag says iptables, version ok + flag: "iptables", + iptablesVersion: iptables.MinCheckVersion, + expected: proxyModeIptables, + }, + { // detect, error + flag: "", + iptablesError: fmt.Errorf("oops!"), + expected: proxyModeUserspace, + }, + { // detect, version too low + flag: "", + iptablesVersion: "0.0.0", + expected: proxyModeUserspace, + }, + { // detect, version ok + flag: "", + iptablesVersion: iptables.MinCheckVersion, + expected: proxyModeIptables, + }, + { // annotation says userspace + flag: "", + annotationKey: "net.experimental.kubernetes.io/proxy-mode", + annotationVal: "userspace", + expected: proxyModeUserspace, + }, + { // annotation says iptables, error detecting + flag: "", + annotationKey: "net.experimental.kubernetes.io/proxy-mode", + annotationVal: "iptables", + iptablesError: fmt.Errorf("oops!"), + expected: proxyModeUserspace, + }, + { // annotation says iptables, version too low + flag: "", + annotationKey: "net.experimental.kubernetes.io/proxy-mode", + annotationVal: "iptables", + iptablesVersion: "0.0.0", + expected: proxyModeUserspace, + }, + { // annotation says iptables, version ok + flag: "", + annotationKey: "net.experimental.kubernetes.io/proxy-mode", + annotationVal: "iptables", + iptablesVersion: iptables.MinCheckVersion, + expected: proxyModeIptables, + }, + { // annotation says something else, version ok + flag: "", + annotationKey: "net.experimental.kubernetes.io/proxy-mode", + annotationVal: "other", + iptablesVersion: iptables.MinCheckVersion, + expected: proxyModeIptables, + }, + { // annotation says nothing, version ok + flag: "", + annotationKey: "net.experimental.kubernetes.io/proxy-mode", + annotationVal: "", + iptablesVersion: iptables.MinCheckVersion, + expected: proxyModeIptables, + }, + { // annotation says userspace + flag: "", + annotationKey: "net.beta.kubernetes.io/proxy-mode", + annotationVal: "userspace", + expected: proxyModeUserspace, + }, + { // annotation says iptables, error detecting + flag: "", + annotationKey: "net.beta.kubernetes.io/proxy-mode", + annotationVal: "iptables", + iptablesError: fmt.Errorf("oops!"), + expected: proxyModeUserspace, + }, + { // annotation says iptables, version too low + flag: "", + annotationKey: "net.beta.kubernetes.io/proxy-mode", + annotationVal: "iptables", + iptablesVersion: "0.0.0", + expected: proxyModeUserspace, + }, + { // annotation says iptables, version ok + flag: "", + annotationKey: "net.beta.kubernetes.io/proxy-mode", + annotationVal: "iptables", + iptablesVersion: iptables.MinCheckVersion, + expected: proxyModeIptables, + }, + { // annotation says something else, version ok + flag: "", + annotationKey: "net.beta.kubernetes.io/proxy-mode", + annotationVal: "other", + iptablesVersion: iptables.MinCheckVersion, + expected: proxyModeIptables, + }, + { // annotation says nothing, version ok + flag: "", + annotationKey: "net.beta.kubernetes.io/proxy-mode", + annotationVal: "", + iptablesVersion: iptables.MinCheckVersion, + expected: proxyModeIptables, + }, + { // flag says userspace, annotation disagrees + flag: "userspace", + annotationKey: "net.experimental.kubernetes.io/proxy-mode", + annotationVal: "iptables", + iptablesVersion: iptables.MinCheckVersion, + expected: proxyModeUserspace, + }, + { // flag says iptables, annotation disagrees + flag: "iptables", + annotationKey: "net.experimental.kubernetes.io/proxy-mode", + annotationVal: "userspace", + iptablesVersion: iptables.MinCheckVersion, + expected: proxyModeIptables, + }, + { // flag says userspace, annotation disagrees + flag: "userspace", + annotationKey: "net.beta.kubernetes.io/proxy-mode", + annotationVal: "iptables", + iptablesVersion: iptables.MinCheckVersion, + expected: proxyModeUserspace, + }, + { // flag says iptables, annotation disagrees + flag: "iptables", + annotationKey: "net.beta.kubernetes.io/proxy-mode", + annotationVal: "userspace", + iptablesVersion: iptables.MinCheckVersion, + expected: proxyModeIptables, + }, } for i, c := range cases { getter := &fakeNodeInterface{} - getter.node.Annotations = map[string]string{c.annKey: c.annVal} - r := mayTryIptablesProxy(c.flag, getter, "host") + getter.node.Annotations = map[string]string{c.annotationKey: c.annotationVal} + versioner := &fakeIptablesVersioner{c.iptablesVersion, c.iptablesError} + r := getProxyMode(c.flag, getter, "host", versioner) if r != c.expected { - t.Errorf("Case[%d] Expected %t, got %t", i, c.expected, r) + t.Errorf("Case[%d] Expected %q, got %q", i, c.expected, r) } } } diff --git a/docs/admin/kube-proxy.md b/docs/admin/kube-proxy.md index 0646f36961..7568d947a9 100644 --- a/docs/admin/kube-proxy.md +++ b/docs/admin/kube-proxy.md @@ -68,13 +68,13 @@ kube-proxy --masquerade-all[=false]: If using the pure iptables proxy, SNAT everything --master="": The address of the Kubernetes API server (overrides any value in kubeconfig) --oom-score-adj=-999: The oom-score-adj value for kube-proxy process. Values must be within the range [-1000, 1000] - --proxy-mode="": Which proxy mode to use: 'userspace' (older, stable) or 'iptables' (experimental). If blank, look at the Node object on the Kubernetes API and respect the 'net.experimental.kubernetes.io/proxy-mode' annotation if provided. Otherwise use the best-available proxy (currently userspace, but may change in future versions). If the iptables proxy is selected, regardless of how, but the system's kernel or iptables versions are insufficient, this always falls back to the userspace proxy. + --proxy-mode="": Which proxy mode to use: 'userspace' (older) or 'iptables' (faster). If blank, look at the Node object on the Kubernetes API and respect the 'net.experimental.kubernetes.io/proxy-mode' annotation if provided. Otherwise use the best-available proxy (currently iptables). If the iptables proxy is selected, regardless of how, but the system's kernel or iptables versions are insufficient, this always falls back to the userspace proxy. --proxy-port-range=: Range of host ports (beginPort-endPort, inclusive) that may be consumed in order to proxy service traffic. If unspecified (0-0) then ports will be randomly chosen. --resource-container="/kube-proxy": Absolute name of the resource-only container to create and run the Kube-proxy in (Default: /kube-proxy). --udp-timeout=250ms: How long an idle UDP connection will be kept open (e.g. '250ms', '2s'). Must be greater than 0. Only applicable for proxy-mode=userspace ``` -###### Auto generated by spf13/cobra on 23-Oct-2015 +###### Auto generated by spf13/cobra on 9-Nov-2015 diff --git a/docs/user-guide/debugging-services.md b/docs/user-guide/debugging-services.md index 3d48e07f7d..7a0aab97ce 100644 --- a/docs/user-guide/debugging-services.md +++ b/docs/user-guide/debugging-services.md @@ -55,6 +55,8 @@ This document will hopefully help you to figure out what's going wrong. - [Is the kube-proxy working?](#is-the-kube-proxy-working) - [Is kube-proxy running?](#is-kube-proxy-running) - [Is kube-proxy writing iptables rules?](#is-kube-proxy-writing-iptables-rules) + - [Userspace](#userspace) + - [Iptables](#iptables) - [Is kube-proxy proxying?](#is-kube-proxy-proxying) - [Seek help](#seek-help) - [More information](#more-information) @@ -468,24 +470,16 @@ depends on your `Node` OS. On some OSes it is a file, such as should see something like: ```console -I0707 17:34:53.945651 30031 server.go:88] Running in resource-only container "/kube-proxy" -I0707 17:34:53.945921 30031 proxier.go:121] Setting proxy IP to 10.240.115.247 and initializing iptables -I0707 17:34:54.053023 30031 roundrobin.go:262] LoadBalancerRR: Setting endpoints for default/kubernetes: to [10.240.169.188:443] -I0707 17:34:54.053175 30031 roundrobin.go:262] LoadBalancerRR: Setting endpoints for default/hostnames:default to [10.244.0.5:9376 10.244.0.6:9376 10.244.0.7:9376] -I0707 17:34:54.053284 30031 roundrobin.go:262] LoadBalancerRR: Setting endpoints for default/kube-dns:dns to [10.244.3.3:53] -I0707 17:34:54.053310 30031 roundrobin.go:262] LoadBalancerRR: Setting endpoints for default/kube-dns:dns-tcp to [10.244.3.3:53] -I0707 17:34:54.054780 30031 proxier.go:306] Adding new service "default/kubernetes:" at 10.0.0.1:443/TCP -I0707 17:34:54.054903 30031 proxier.go:247] Proxying for service "default/kubernetes:" on TCP port 40074 -I0707 17:34:54.079181 30031 proxier.go:306] Adding new service "default/hostnames:default" at 10.0.1.175:80/TCP -I0707 17:34:54.079273 30031 proxier.go:247] Proxying for service "default/hostnames:default" on TCP port 48577 -I0707 17:34:54.113665 30031 proxier.go:306] Adding new service "default/kube-dns:dns" at 10.0.0.10:53/UDP -I0707 17:34:54.113776 30031 proxier.go:247] Proxying for service "default/kube-dns:dns" on UDP port 34149 -I0707 17:34:54.120224 30031 proxier.go:306] Adding new service "default/kube-dns:dns-tcp" at 10.0.0.10:53/TCP -I0707 17:34:54.120297 30031 proxier.go:247] Proxying for service "default/kube-dns:dns-tcp" on TCP port 53476 -I0707 17:34:54.902313 30031 proxysocket.go:130] Accepted TCP connection from 10.244.3.3:42670 to 10.244.3.1:40074 -I0707 17:34:54.903107 30031 proxysocket.go:130] Accepted TCP connection from 10.244.3.3:42671 to 10.244.3.1:40074 -I0707 17:35:46.015868 30031 proxysocket.go:246] New UDP connection from 10.244.3.2:57493 -I0707 17:35:46.017061 30031 proxysocket.go:246] New UDP connection from 10.244.3.2:55471 +I1027 22:14:53.995134 5063 server.go:200] Running in resource-only container "/kube-proxy" +I1027 22:14:53.998163 5063 server.go:247] Using iptables Proxier. +I1027 22:14:53.999055 5063 server.go:255] Tearing down userspace rules. Errors here are acceptable. +I1027 22:14:54.038140 5063 proxier.go:352] Setting endpoints for "kube-system/kube-dns:dns-tcp" to [10.244.1.3:53] +I1027 22:14:54.038164 5063 proxier.go:352] Setting endpoints for "kube-system/kube-dns:dns" to [10.244.1.3:53] +I1027 22:14:54.038209 5063 proxier.go:352] Setting endpoints for "default/kubernetes:https" to [10.240.0.2:443] +I1027 22:14:54.038238 5063 proxier.go:429] Not syncing iptables until Services and Endpoints have been received from master +I1027 22:14:54.040048 5063 proxier.go:294] Adding new service "default/kubernetes:https" at 10.0.0.1:443/TCP +I1027 22:14:54.040154 5063 proxier.go:294] Adding new service "kube-system/kube-dns:dns" at 10.0.0.10:53/UDP +I1027 22:14:54.040223 5063 proxier.go:294] Adding new service "kube-system/kube-dns:dns-tcp" at 10.0.0.10:53/TCP ``` If you see error messages about not being able to contact the master, you @@ -497,6 +491,12 @@ One of the main responsibilities of `kube-proxy` is to write the `iptables` rules which implement `Service`s. Let's check that those rules are getting written. +The kube-proxy can run in either "userspace" mode or "iptables" mode. +Hopefully you are using the newer, faster, more stable "iptables" mode. You +should see one of the following cases. + +#### Userspace + ```console u@node$ iptables-save | grep hostnames -A KUBE-PORTALS-CONTAINER -d 10.0.1.175/32 -p tcp -m comment --comment "default/hostnames:default" -m tcp --dport 80 -j REDIRECT --to-ports 48577 @@ -508,6 +508,27 @@ example) - a "KUBE-PORTALS-CONTAINER" and a "KUBE-PORTALS-HOST". If you do not see these, try restarting `kube-proxy` with the `-V` flag set to 4, and then look at the logs again. +#### Iptables + +```console +u@node$ iptables-save | grep hostnames +-A KUBE-SEP-57KPRZ3JQVENLNBR -s 10.244.3.6/32 -m comment --comment "default/hostnames:" -j MARK --set-xmark 0x4d415351/0xffffffff +-A KUBE-SEP-57KPRZ3JQVENLNBR -p tcp -m comment --comment "default/hostnames:" -m tcp -j DNAT --to-destination 10.244.3.6:9376 +-A KUBE-SEP-WNBA2IHDGP2BOBGZ -s 10.244.1.7/32 -m comment --comment "default/hostnames:" -j MARK --set-xmark 0x4d415351/0xffffffff +-A KUBE-SEP-WNBA2IHDGP2BOBGZ -p tcp -m comment --comment "default/hostnames:" -m tcp -j DNAT --to-destination 10.244.1.7:9376 +-A KUBE-SEP-X3P2623AGDH6CDF3 -s 10.244.2.3/32 -m comment --comment "default/hostnames:" -j MARK --set-xmark 0x4d415351/0xffffffff +-A KUBE-SEP-X3P2623AGDH6CDF3 -p tcp -m comment --comment "default/hostnames:" -m tcp -j DNAT --to-destination 10.244.2.3:9376 +-A KUBE-SERVICES -d 10.0.1.175/32 -p tcp -m comment --comment "default/hostnames: cluster IP" -m tcp --dport 80 -j KUBE-SVC-NWV5X2332I4OT4T3 +-A KUBE-SVC-NWV5X2332I4OT4T3 -m comment --comment "default/hostnames:" -m statistic --mode random --probability 0.33332999982 -j KUBE-SEP-WNBA2IHDGP2BOBGZ +-A KUBE-SVC-NWV5X2332I4OT4T3 -m comment --comment "default/hostnames:" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-X3P2623AGDH6CDF3 +-A KUBE-SVC-NWV5X2332I4OT4T3 -m comment --comment "default/hostnames:" -j KUBE-SEP-57KPRZ3JQVENLNBR +``` + +There should be 1 rule in `KUBE-SERVICES`, 1 or 2 rules per endpoint in +`KUBE-SVC-(hash)` (depending on `SessionAffinity`), one `KUBE-SEP-(hash)` chain +per endpoint, and a few rules in each `KUBE-SEP-(hash)` chain. The exact rules +will vary based on your exact config (including node-ports and load-balancers). + ### Is kube-proxy proxying? Assuming you do see the above rules, try again to access your `Service` by IP: @@ -517,10 +538,12 @@ u@node$ curl 10.0.1.175:80 hostnames-0uton ``` -If this fails, we can try accessing the proxy directly. Look back at the -`iptables-save` output above, and extract the port number that `kube-proxy` is -using for your `Service`. In the above examples it is "48577". Now connect to -that: +If this fails and you are using the userspace proxy, you can try accessing the +proxy directly. If you are using the iptables proxy, skip this section. + +Look back at the `iptables-save` output above, and extract the +port number that `kube-proxy` is using for your `Service`. In the above +examples it is "48577". Now connect to that: ```console u@node$ curl localhost:48577 diff --git a/docs/user-guide/services-detail.png b/docs/user-guide/services-detail.png deleted file mode 100644 index 7ff19b8209b513668ed6aca0441179aade3b30d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68514 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
)P!<`iKCt(uoasVvw@yWIF1= zszYye_irLrj}{c>kF?j?U_6!c)`0a_Fsht;=R41;%*CT<*bbh+ZRE z(^+sa96kzwOPse8leVXMB?)25vFxv~p^NAAgWacimTWEBTEQF4s_dY3Km)F!B)eE` zp*}u8zQL(++CyYH9h9B@OP0UV8`D!5}pO zv#&?!v{VC47XU??^k4Arg3VuY<$XGfm zRGd9hO542l#z{*!F(IRC2>`6%7w=wy{9gVr!kf8Q@ z{%QA(>FK#0!pre`Z-t?y;I=DE-V5KPf0l~>Udr_mwx|t@Ok7GdsXmiWbnN`N0o}Jb z;dlTZSg@|0mDyd`{k3h}BoRF)=9}Rpy4+FD^>Of<>PtyUPooCqS86NQeE%YrlJNna z4@!Cc{ExgEO^&##mBr&db(Es!+g}vn%92++8%2oQkr9{4UU(aG5G4O3AMRap8d6#Y z4?5GP-iT61p4oLuNX^#0XV=ddNys!EAm-kg%5F^R%qG1Ce{(mD@+$=R1wuzJD90O4 zXLcUO7%NKn+}3@cY2v%4TfHM@_NUloeKl}@^3mjer{Td)PqL!i-jLF&W>HGB zzP$6|aeCXe(XYC36|Jh*Xk89}K6L&y+2^hBrd=U#57i_u`Wh)}P`Lx^55W({W5VLqDKfg8={278MczoWSW zqVqd->6T{*(Y9Q18uh=yQ*i$i0s#c}|Nmos5iDgyd*NxlOk8PdNi;~cbR)noJLPGZ zC^0x&u2&jn5-53k`uGArzk^I$u4oNmK0X*Y_k1CnK#(hsRpYZb4!LP}ukp+IpnVGP O=b@SotmK|m`2PZgR~3Z- diff --git a/docs/user-guide/services-iptables-overview.png b/docs/user-guide/services-iptables-overview.png new file mode 100644 index 0000000000000000000000000000000000000000..6d33ce3a4983682cccb06f9fe79cfbd8e85c8c27 GIT binary patch literal 54546 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 z
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 literal 0 HcmV?d00001 diff --git a/docs/user-guide/services-overview.svg b/docs/user-guide/services-userspace-overview.svg similarity index 72% rename from docs/user-guide/services-overview.svg rename to docs/user-guide/services-userspace-overview.svg index 8b45677ad0..b764d12fd7 100644 --- a/docs/user-guide/services-overview.svg +++ b/docs/user-guide/services-userspace-overview.svg @@ -13,8 +13,8 @@ height="1052.3622047" id="svg2" version="1.1" - inkscape:version="0.48.3.1 r9886" - sodipodi:docname="services_overview.svg" + inkscape:version="0.48.4 r9939" + sodipodi:docname="services-userspace-overview.svg" inkscape:export-filename="/usr/local/google/home/thockin/src/kubernetes/docs/services_overview.png" inkscape:export-xdpi="76.910004" inkscape:export-ydpi="76.910004"> @@ -28,15 +28,15 @@ inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="1.0318369" - inkscape:cx="351.19865" - inkscape:cy="624.90035" + inkscape:cx="291.9254" + inkscape:cy="392.30545" inkscape:document-units="px" - inkscape:current-layer="g4090" + inkscape:current-layer="layer1" showgrid="false" - inkscape:window-width="1228" - inkscape:window-height="848" - inkscape:window-x="364" - inkscape:window-y="24" + inkscape:window-width="1552" + inkscape:window-height="822" + inkscape:window-x="46" + inkscape:window-y="47" inkscape:window-maximized="0" /> @@ -55,15 +55,44 @@ inkscape:groupmode="layer" id="layer1"> + transform="matrix(0,-1,-0.92578962,0,936.44413,1029.2686)" + id="g4178-3-8" + style="stroke-width:5.19653493;stroke-miterlimit:4;stroke-dasharray:none"> + + + + + transform="matrix(-0.96592583,0.25881905,-0.25881905,-0.96592583,888.32964,1076.238)" + id="g4324-8" + style="stroke-width:4.99999998;stroke-miterlimit:4;stroke-dasharray:none"> + transform="matrix(1,0,0,-1.3566066,79.240014,1699.5431)" + id="g4178-3-9" + style="stroke-width:4.29282359;stroke-miterlimit:4;stroke-dasharray:none"> + transform="translate(21.643544,719.73074)"> + transform="matrix(0.88792337,0,0,1,262.00231,6.5250001e-6)"> + transform="matrix(0.88792337,0,0,1,480.49489,6.5250001e-6)"> + transform="matrix(-0.8305249,-0.5569815,0.62939332,-0.93849945,365.54855,1487.8396)" + id="g4178-3-4" + style="stroke-width:1.88143539;stroke-miterlimit:4;stroke-dasharray:none"> + transform="matrix(1,0,0,-0.92578962,-170.98136,1268.7699)" + id="g4178-3" + style="stroke-width:5.19653511;stroke-miterlimit:4;stroke-dasharray:none"> + + + ServiceIP(iptables) + + + Node diff --git a/docs/user-guide/services.md b/docs/user-guide/services.md index 2da55a96be..45cd972834 100644 --- a/docs/user-guide/services.md +++ b/docs/user-guide/services.md @@ -41,6 +41,8 @@ Documentation for other releases can be found at - [Defining a service](#defining-a-service) - [Services without selectors](#services-without-selectors) - [Virtual IPs and service proxies](#virtual-ips-and-service-proxies) + - [Proxy-mode: userspace](#proxy-mode-userspace) + - [Proxy-mode: iptables](#proxy-mode-iptables) - [Multi-Port Services](#multi-port-services) - [Choosing your own IP address](#choosing-your-own-ip-address) - [Why not use round-robin DNS?](#why-not-use-round-robin-dns) @@ -57,6 +59,8 @@ Documentation for other releases can be found at - [The gory details of virtual IPs](#the-gory-details-of-virtual-ips) - [Avoiding collisions](#avoiding-collisions) - [IPs and VIPs](#ips-and-vips) + - [Userspace](#userspace) + - [Iptables](#iptables) - [API Object](#api-object) @@ -206,26 +210,55 @@ this example). ## Virtual IPs and service proxies Every node in a Kubernetes cluster runs a `kube-proxy`. This application -watches the Kubernetes master for the addition and removal of `Service` -and `Endpoints` objects. For each `Service` it opens a port (randomly chosen) -on the local node. Any connections to `service` port will be proxied to one of -the corresponding backend `Pods`. Which backend `Pod` to use is decided based on the +is responsible for implementing a form of virtual IP for `Service`s. In +Kubernetes v1.0 the proxy was purely in userspace. In Kubernetes v1.1 an +iptables proxy was added, but was not the default operating mode. In +Kubernetes v1.2 we expect the iptables proxy to be the default. + +As of Kubernetes v1.0, `Services` are a "layer 3" (TCP/UDP over IP) construct. +In Kubernetes v1.1 the `Ingress` API was added (beta) to represent "layer 7" +(HTTP) services. + +### Proxy-mode: userspace + +In this mode, kube-proxy watches the Kubernetes master for the addition and +removal of `Service` and `Endpoints` objects. For each `Service` it opens a +port (randomly chosen) on the local node. Any connections to this "proxy port" +will be proxied to one of the `Service`'s backend `Pods` (as reported in +`Endpoints`). Which backend `Pod` to use is decided based on the `SessionAffinity` of the `Service`. Lastly, it installs iptables rules which -capture traffic to the `Service`'s cluster IP (which is virtual) and `Port` then -redirects that traffic to the backend `Pod` (`Endpoints`). +capture traffic to the `Service`'s `clusterIP` (which is virtual) and `Port` +and redirects that traffic to the proxy port which proxies the a backend `Pod`. -The net result is that any traffic bound for the `Service` is proxied to an -appropriate backend without the clients knowing anything about Kubernetes or -`Services` or `Pods`. - -![Services overview diagram](services-overview.png) +The net result is that any traffic bound for the `Service`'s IP:Port is proxied +to an appropriate backend without the clients knowing anything about Kubernetes +or `Services` or `Pods`. By default, the choice of backend is round robin. Client-IP based session affinity can be selected by setting `service.spec.sessionAffinity` to `"ClientIP"` (the default is `"None"`). -As of Kubernetes 1.0, `Services` are a "layer 3" (TCP/UDP over IP) construct. We do not -yet have a concept of "layer 7" (HTTP) services. +![Services overview diagram for userspace proxy](services-userspace-overview.png) + +### Proxy-mode: iptables + +In this mode, kube-proxy watches the Kubernetes master for the addition and +removal of `Service` and `Endpoints` objects. For each `Service` it installs +iptables rules which capture traffic to the `Service`'s `clusterIP` (which is +virtual) and `Port` and redirects that traffic to one of the `Service`'s +backend sets. For each `Endpoints` object it installs iptables rules which +select a backend `Pod`. + +By default, the choice of backend is random. Client-IP based session affinity +can be selected by setting `service.spec.sessionAffinity` to `"ClientIP"` (the +default is `"None"`). + +As with the userspace proxy, the net result is that any traffic bound for the +`Service`'s IP:Port is proxied to an appropriate backend without the clients +knowing anything about Kubernetes or `Services` or `Pods`. This should be +faster and more reliable than the userspace proxy. + +![Services overview diagram for iptables proxy](services-iptables-overview.png) ## Multi-Port Services @@ -494,14 +527,14 @@ In the example below, my-service can be accessed by clients on 80.11.12.10:80 (e ## Shortcomings -We expect that using iptables and userspace proxies for VIPs will work at -small to medium scale, but may not scale to very large clusters with thousands -of Services. See [the original design proposal for -portals](http://issue.k8s.io/1107) for more -details. +Using the userspace proxy for VIPs will work at small to medium scale, but will +not scale to very large clusters with thousands of Services. See [the original +design proposal for portals](http://issue.k8s.io/1107) for more details. -Using the kube-proxy obscures the source-IP of a packet accessing a `Service`. -This makes some kinds of firewalling impossible. +Using the userspace proxy obscures the source-IP of a packet accessing a `Service`. +This makes some kinds of firewalling impossible. The iptables proxier does not +obscure in-cluster source IPs, but it does still impact clients coming through +a load-balancer or node-port. LoadBalancers only support TCP, not UDP. @@ -517,13 +550,7 @@ simple round robin balancing, for example master-elected or sharded. We also envision that some `Services` will have "real" load balancers, in which case the VIP will simply transport the packets there. -There's a -[proposal](http://issue.k8s.io/3760) to -eliminate userspace proxying in favor of doing it all in iptables. This should -perform better and fix the source-IP obfuscation, though is less flexible than -arbitrary userspace code. - -We intend to have first-class support for L7 (HTTP) `Services`. +We intend to improve our support for L7 (HTTP) `Services`. We intend to have more flexible ingress modes for `Services` which encompass the current `ClusterIP`, `NodePort`, and `LoadBalancer` modes and more. @@ -565,6 +592,11 @@ VIP, their traffic is automatically transported to an appropriate endpoint. The environment variables and DNS for `Services` are actually populated in terms of the `Service`'s VIP and port. +We support two proxy modes - userspace and iptables, which operate slightly +differently. + +#### Userspace + As an example, consider the image processing application described above. When the backend `Service` is created, the Kubernetes master assigns a virtual IP address, for example 10.0.0.1. Assuming the `Service` port is 1234, the @@ -581,7 +613,24 @@ This means that `Service` owners can choose any port they want without risk of collision. Clients can simply connect to an IP and port, without being aware of which `Pods` they are actually accessing. -![Services detailed diagram](services-detail.png) +#### Iptables + +Again, consider the image processing application described above. +When the backend `Service` is created, the Kubernetes master assigns a virtual +IP address, for example 10.0.0.1. Assuming the `Service` port is 1234, the +`Service` is observed by all of the `kube-proxy` instances in the cluster. +When a proxy sees a new `Service`, it installs a series of iptables rules which +redirect from the VIP to per-`Service` rules. The per-`Service` rules link to +per-`Endpoint` rules which redirect (Destination NAT) to the backends. + +When a client connects to the VIP the iptables rule kicks in. A backend is +chosen (either based on session affinity or randomly) and packets are +redirected to the backend. Unlike the userspace proxy, packets are never +copied to userspace, the kube-proxy does not have to be running for the VIP to +work, and the client IP is not altered. + +This same basic flow executes when traffic comes in through a node-port or +through a load-balancer, though in those cases the client IP does get altered. ## API Object diff --git a/pkg/proxy/iptables/proxier.go b/pkg/proxy/iptables/proxier.go index 5b2d56b579..236aeebf30 100644 --- a/pkg/proxy/iptables/proxier.go +++ b/pkg/proxy/iptables/proxier.go @@ -62,19 +62,24 @@ const iptablesNodePortsChain utiliptables.Chain = "KUBE-NODEPORTS" // the mark we apply to traffic needing SNAT const iptablesMasqueradeMark = "0x4d415351" -// ShouldUseIptablesProxier returns true if we should use the iptables Proxier +// IptablesVersioner can query the current iptables version. +type IptablesVersioner interface { + // returns "X.Y.Z" + GetVersion() (string, error) +} + +// CanUseIptablesProxier returns true if we should use the iptables Proxier // instead of the "classic" userspace Proxier. This is determined by checking // the iptables version and for the existence of kernel features. It may return // an error if it fails to get the iptables version without error, in which // case it will also return false. -func ShouldUseIptablesProxier() (bool, error) { - exec := utilexec.New() +func CanUseIptablesProxier(iptver IptablesVersioner) (bool, error) { minVersion, err := semver.NewVersion(iptablesMinVersion) if err != nil { return false, err } - // returns "X.X.X", err - versionString, err := utiliptables.GetIptablesVersionString(exec) + // returns "X.Y.Z" + versionString, err := iptver.GetVersion() if err != nil { return false, err } @@ -89,6 +94,7 @@ func ShouldUseIptablesProxier() (bool, error) { // Check for the required sysctls. We don't care about the value, just // that it exists. If this Proxier is chosen, we'll iniialize it as we // need. + // TODO: we should inject a sysctl.Interface like we do for iptables _, err = utilsysctl.GetSysctl(sysctlRouteLocalnet) if err != nil { return false, err diff --git a/pkg/proxy/userspace/proxier_test.go b/pkg/proxy/userspace/proxier_test.go index 3e10a79740..46f4bf88f7 100644 --- a/pkg/proxy/userspace/proxier_test.go +++ b/pkg/proxy/userspace/proxier_test.go @@ -32,7 +32,7 @@ import ( "k8s.io/kubernetes/pkg/proxy" "k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/util" - "k8s.io/kubernetes/pkg/util/iptables" + ipttest "k8s.io/kubernetes/pkg/util/iptables/testing" ) const ( @@ -82,55 +82,6 @@ func waitForClosedPortUDP(p *Proxier, proxyPort int) error { return fmt.Errorf("port %d still open", proxyPort) } -// The iptables logic has to be tested in a proper end-to-end test, so this just stubs everything out. -type fakeIptables struct{} - -func (fake *fakeIptables) EnsureChain(table iptables.Table, chain iptables.Chain) (bool, error) { - return false, nil -} - -func (fake *fakeIptables) DeleteChain(table iptables.Table, chain iptables.Chain) error { - return nil -} - -func (fake *fakeIptables) FlushChain(table iptables.Table, chain iptables.Chain) error { - return nil -} - -func (fake *fakeIptables) EnsureRule(position iptables.RulePosition, table iptables.Table, chain iptables.Chain, args ...string) (bool, error) { - return false, nil -} - -func (fake *fakeIptables) DeleteRule(table iptables.Table, chain iptables.Chain, args ...string) error { - return nil -} - -func (fake *fakeIptables) IsIpv6() bool { - return false -} - -func (fake *fakeIptables) Save(table iptables.Table) ([]byte, error) { - return []byte{}, nil -} - -func (fake *fakeIptables) SaveAll() ([]byte, error) { - return []byte{}, nil -} - -func (fake *fakeIptables) Restore(table iptables.Table, data []byte, flush iptables.FlushFlag, counters iptables.RestoreCountersFlag) error { - return nil -} - -func (fake *fakeIptables) RestoreAll(data []byte, flush iptables.FlushFlag, counters iptables.RestoreCountersFlag) error { - return nil -} - -func (fake *fakeIptables) AddReloadFunc(reloadFunc func()) { -} - -func (fake *fakeIptables) Destroy() { -} - var tcpServerPort int var udpServerPort int @@ -249,7 +200,7 @@ func TestTCPProxy(t *testing.T) { }, }) - p, err := createProxier(lb, net.ParseIP("0.0.0.0"), &fakeIptables{}, net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) + p, err := createProxier(lb, net.ParseIP("0.0.0.0"), ipttest.NewFake(), net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) if err != nil { t.Fatal(err) } @@ -276,7 +227,7 @@ func TestUDPProxy(t *testing.T) { }, }) - p, err := createProxier(lb, net.ParseIP("0.0.0.0"), &fakeIptables{}, net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) + p, err := createProxier(lb, net.ParseIP("0.0.0.0"), ipttest.NewFake(), net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) if err != nil { t.Fatal(err) } @@ -303,7 +254,7 @@ func TestUDPProxyTimeout(t *testing.T) { }, }) - p, err := createProxier(lb, net.ParseIP("0.0.0.0"), &fakeIptables{}, net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) + p, err := createProxier(lb, net.ParseIP("0.0.0.0"), ipttest.NewFake(), net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) if err != nil { t.Fatal(err) } @@ -339,7 +290,7 @@ func TestMultiPortProxy(t *testing.T) { }}, }}) - p, err := createProxier(lb, net.ParseIP("0.0.0.0"), &fakeIptables{}, net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) + p, err := createProxier(lb, net.ParseIP("0.0.0.0"), ipttest.NewFake(), net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) if err != nil { t.Fatal(err) } @@ -366,7 +317,7 @@ func TestMultiPortOnServiceUpdate(t *testing.T) { serviceQ := proxy.ServicePortName{NamespacedName: types.NamespacedName{Namespace: "testnamespace", Name: "echo"}, Port: "q"} serviceX := proxy.ServicePortName{NamespacedName: types.NamespacedName{Namespace: "testnamespace", Name: "echo"}, Port: "x"} - p, err := createProxier(lb, net.ParseIP("0.0.0.0"), &fakeIptables{}, net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) + p, err := createProxier(lb, net.ParseIP("0.0.0.0"), ipttest.NewFake(), net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) if err != nil { t.Fatal(err) } @@ -429,7 +380,7 @@ func TestTCPProxyStop(t *testing.T) { }, }) - p, err := createProxier(lb, net.ParseIP("0.0.0.0"), &fakeIptables{}, net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) + p, err := createProxier(lb, net.ParseIP("0.0.0.0"), ipttest.NewFake(), net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) if err != nil { t.Fatal(err) } @@ -473,7 +424,7 @@ func TestUDPProxyStop(t *testing.T) { }, }) - p, err := createProxier(lb, net.ParseIP("0.0.0.0"), &fakeIptables{}, net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) + p, err := createProxier(lb, net.ParseIP("0.0.0.0"), ipttest.NewFake(), net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) if err != nil { t.Fatal(err) } @@ -511,7 +462,7 @@ func TestTCPProxyUpdateDelete(t *testing.T) { }, }) - p, err := createProxier(lb, net.ParseIP("0.0.0.0"), &fakeIptables{}, net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) + p, err := createProxier(lb, net.ParseIP("0.0.0.0"), ipttest.NewFake(), net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) if err != nil { t.Fatal(err) } @@ -548,7 +499,7 @@ func TestUDPProxyUpdateDelete(t *testing.T) { }, }) - p, err := createProxier(lb, net.ParseIP("0.0.0.0"), &fakeIptables{}, net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) + p, err := createProxier(lb, net.ParseIP("0.0.0.0"), ipttest.NewFake(), net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) if err != nil { t.Fatal(err) } @@ -585,7 +536,7 @@ func TestTCPProxyUpdateDeleteUpdate(t *testing.T) { }, }) - p, err := createProxier(lb, net.ParseIP("0.0.0.0"), &fakeIptables{}, net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) + p, err := createProxier(lb, net.ParseIP("0.0.0.0"), ipttest.NewFake(), net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) if err != nil { t.Fatal(err) } @@ -637,7 +588,7 @@ func TestUDPProxyUpdateDeleteUpdate(t *testing.T) { }, }) - p, err := createProxier(lb, net.ParseIP("0.0.0.0"), &fakeIptables{}, net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) + p, err := createProxier(lb, net.ParseIP("0.0.0.0"), ipttest.NewFake(), net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) if err != nil { t.Fatal(err) } @@ -689,7 +640,7 @@ func TestTCPProxyUpdatePort(t *testing.T) { }, }) - p, err := createProxier(lb, net.ParseIP("0.0.0.0"), &fakeIptables{}, net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) + p, err := createProxier(lb, net.ParseIP("0.0.0.0"), ipttest.NewFake(), net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) if err != nil { t.Fatal(err) } @@ -737,7 +688,7 @@ func TestUDPProxyUpdatePort(t *testing.T) { }, }) - p, err := createProxier(lb, net.ParseIP("0.0.0.0"), &fakeIptables{}, net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) + p, err := createProxier(lb, net.ParseIP("0.0.0.0"), ipttest.NewFake(), net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) if err != nil { t.Fatal(err) } @@ -782,7 +733,7 @@ func TestProxyUpdatePublicIPs(t *testing.T) { }, }) - p, err := createProxier(lb, net.ParseIP("0.0.0.0"), &fakeIptables{}, net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) + p, err := createProxier(lb, net.ParseIP("0.0.0.0"), ipttest.NewFake(), net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) if err != nil { t.Fatal(err) } @@ -834,7 +785,7 @@ func TestProxyUpdatePortal(t *testing.T) { }, }) - p, err := createProxier(lb, net.ParseIP("0.0.0.0"), &fakeIptables{}, net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) + p, err := createProxier(lb, net.ParseIP("0.0.0.0"), ipttest.NewFake(), net.ParseIP("127.0.0.1"), nil, time.Minute, udpIdleTimeoutForTest) if err != nil { t.Fatal(err) } diff --git a/pkg/util/iptables/iptables.go b/pkg/util/iptables/iptables.go index e2fa00890c..9b0bc0e7bb 100644 --- a/pkg/util/iptables/iptables.go +++ b/pkg/util/iptables/iptables.go @@ -41,6 +41,8 @@ const ( // An injectable interface for running iptables commands. Implementations must be goroutine-safe. type Interface interface { + // GetVersion returns the "X.Y.Z" semver string for iptables. + GetVersion() (string, error) // EnsureChain checks if the specified chain exists and, if not, creates it. If the chain existed, return true. EnsureChain(table Table, chain Chain) (bool, error) // FlushChain clears the specified chain. If the chain did not exist, return error. @@ -135,7 +137,7 @@ type runner struct { // New returns a new Interface which will exec iptables. func New(exec utilexec.Interface, dbus utildbus.Interface, protocol Protocol) Interface { - vstring, err := GetIptablesVersionString(exec) + vstring, err := getIptablesVersionString(exec) if err != nil { glog.Warningf("Error checking iptables version, assuming version at least %s: %v", MinCheckVersion, err) vstring = MinCheckVersion @@ -186,6 +188,11 @@ func (runner *runner) connectToFirewallD() { go runner.dbusSignalHandler(bus) } +// GetVersion returns the version string. +func (runner *runner) GetVersion() (string, error) { + return getIptablesVersionString(runner.exec) +} + // EnsureChain is part of Interface. func (runner *runner) EnsureChain(table Table, chain Chain) (bool, error) { fullArgs := makeFullArgs(table, chain) @@ -505,9 +512,9 @@ func getIptablesWaitFlag(vstring string) []string { } } -// GetIptablesVersionString runs "iptables --version" to get the version string +// getIptablesVersionString runs "iptables --version" to get the version string // in the form "X.X.X" -func GetIptablesVersionString(exec utilexec.Interface) (string, error) { +func getIptablesVersionString(exec utilexec.Interface) (string, error) { // this doesn't access mutable state so we don't need to use the interface / runner bytes, err := exec.Command(cmdIptables, "--version").CombinedOutput() if err != nil { diff --git a/pkg/util/iptables/iptables_test.go b/pkg/util/iptables/iptables_test.go index 8bef165957..6c18372cec 100644 --- a/pkg/util/iptables/iptables_test.go +++ b/pkg/util/iptables/iptables_test.go @@ -451,7 +451,7 @@ func TestGetIptablesHasCheckCommand(t *testing.T) { func(cmd string, args ...string) exec.Cmd { return exec.InitFakeCmd(&fcmd, cmd, args...) }, }, } - version, err := GetIptablesVersionString(&fexec) + version, err := getIptablesVersionString(&fexec) if (err != nil) != testCase.Err { t.Errorf("Expected error: %v, Got error: %v", testCase.Err, err) } diff --git a/pkg/util/iptables/testing/fake.go b/pkg/util/iptables/testing/fake.go index 52c007f5d8..ac99677273 100644 --- a/pkg/util/iptables/testing/fake.go +++ b/pkg/util/iptables/testing/fake.go @@ -25,6 +25,10 @@ func NewFake() *fake { return &fake{} } +func (*fake) GetVersion() (string, error) { + return "0.0.0", nil +} + func (*fake) EnsureChain(table iptables.Table, chain iptables.Chain) (bool, error) { return true, nil }

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 e-3jl${AUpAt6%tbjei>!W literal 0 HcmV?d00001 diff --git a/docs/user-guide/services-detail.svg b/docs/user-guide/services-iptables-overview.svg similarity index 65% rename from docs/user-guide/services-detail.svg rename to docs/user-guide/services-iptables-overview.svg index cafaf29eb8..28c9dc4c29 100644 --- a/docs/user-guide/services-detail.svg +++ b/docs/user-guide/services-iptables-overview.svg @@ -13,9 +13,9 @@ height="1052.3622047" id="svg2" version="1.1" - inkscape:version="0.48.3.1 r9886" - sodipodi:docname="services_detail.svg" - inkscape:export-filename="/usr/local/google/home/thockin/src/kubernetes/docs/services_overview.png" + inkscape:version="0.48.4 r9939" + sodipodi:docname="services-iptables-overview.svg" + inkscape:export-filename="/usr/local/google/home/thockin/src/kubernetes/docs/services-userspace-overview.png" inkscape:export-xdpi="76.910004" inkscape:export-ydpi="76.910004"> @@ -54,18 +54,26 @@ inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1"> + + transform="matrix(1,0,0,-0.92578962,15.303948,1193.1996)" + id="g4178-3-0" + style="stroke-width:2.078614;stroke-miterlimit:4;stroke-dasharray:none"> + transform="matrix(-0.83212211,-1.1231515,0.89570092,-0.89430772,-72.942206,1678.3161)" + id="g4178-3-8" + style="stroke-width:2.078614;stroke-miterlimit:4;stroke-dasharray:none" + inkscape:transform-center-x="84.098741" + inkscape:transform-center-y="1.4572787e-05"> + + + + + transform="matrix(-0.96592583,0.25881905,-0.25881905,-0.96592583,654.32964,1126.238)" + id="g4324-8" + style="stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none"> + transform="matrix(1,0,0,-1.3566066,-154.75999,1749.5431)" + id="g4178-3-9" + style="stroke-width:4.29282379;stroke-miterlimit:4;stroke-dasharray:none"> - - - - + transform="translate(-212.35646,769.73074)"> + transform="matrix(0.88792337,0,0,1,262.00231,6.5250001e-6)"> + transform="matrix(0.88792337,0,0,1,480.49489,6.5250001e-6)"> + transform="matrix(0.91192623,-0.41035418,-0.37990164,-0.84425184,113.60453,1385.4009)" + id="g4178-3" + style="stroke-width:5.19653511;stroke-miterlimit:4;stroke-dasharray:none"> - - - - Client + x="67.574867" + y="91.765617" + style="font-size:32px;text-align:start;text-anchor:start">Client - - iptables - - kube-proxy + + + ServiceIP(iptables) + 3) connect to 10.0.0.1:1234 - 4) redirect to (random)proxy port - 1) watch Services and Endpoints - 2) open proxy port and set portal rules - 5) proxy to a backend + id="tspan3887" + x="389.59647" + y="786.81635">Node diff --git a/docs/user-guide/services-overview.png b/docs/user-guide/services-overview.png deleted file mode 100644 index 564bd857e87e3ffdf72e363e45a8d11a7a6cb1f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43306 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