...
1
2
3
4
19
20
21
22 package app
23
24 import (
25 "errors"
26 "fmt"
27 "net"
28
29
30 _ "net/http/pprof"
31
32 v1 "k8s.io/api/core/v1"
33 "k8s.io/kubernetes/pkg/proxy"
34 proxyconfigapi "k8s.io/kubernetes/pkg/proxy/apis/config"
35 "k8s.io/kubernetes/pkg/proxy/winkernel"
36 )
37
38
39
40 func (o *Options) platformApplyDefaults(config *proxyconfigapi.KubeProxyConfiguration) {
41 if config.Mode == "" {
42 config.Mode = proxyconfigapi.ProxyModeKernelspace
43 }
44 if config.Winkernel.RootHnsEndpointName == "" {
45 config.Winkernel.RootHnsEndpointName = "cbr0"
46 }
47 }
48
49
50
51
52 func (s *ProxyServer) platformSetup() error {
53 winkernel.RegisterMetrics()
54
55 if s.PrimaryIPFamily == v1.IPv4Protocol {
56 s.NodeIPs[v1.IPv6Protocol] = net.IPv6zero
57 } else {
58 s.NodeIPs[v1.IPv4Protocol] = net.IPv4zero
59 }
60 return nil
61 }
62
63
64
65 func (s *ProxyServer) platformCheckSupported() (ipv4Supported, ipv6Supported, dualStackSupported bool, err error) {
66
67 _, err = winkernel.CanUseWinKernelProxier(winkernel.WindowsKernelCompatTester{})
68 if err != nil {
69 return false, false, false, err
70 }
71
72
73
74 ipv4Supported = true
75 ipv6Supported = true
76
77 compatTester := winkernel.DualStackCompatTester{}
78 dualStackSupported = compatTester.DualStackCompatible(s.Config.Winkernel.NetworkName)
79
80 return
81 }
82
83
84 func (s *ProxyServer) createProxier(config *proxyconfigapi.KubeProxyConfiguration, dualStackMode, initOnly bool) (proxy.Provider, error) {
85 if initOnly {
86 return nil, fmt.Errorf("--init-only is not implemented on Windows")
87 }
88
89 var proxier proxy.Provider
90 var err error
91
92 if dualStackMode {
93 proxier, err = winkernel.NewDualStackProxier(
94 config.IPTables.SyncPeriod.Duration,
95 config.IPTables.MinSyncPeriod.Duration,
96 s.Hostname,
97 s.NodeIPs,
98 s.Recorder,
99 s.HealthzServer,
100 config.HealthzBindAddress,
101 config.Winkernel,
102 )
103 } else {
104 proxier, err = winkernel.NewProxier(
105 s.PrimaryIPFamily,
106 config.IPTables.SyncPeriod.Duration,
107 config.IPTables.MinSyncPeriod.Duration,
108 s.Hostname,
109 s.NodeIPs[s.PrimaryIPFamily],
110 s.Recorder,
111 s.HealthzServer,
112 config.HealthzBindAddress,
113 config.Winkernel,
114 )
115 }
116 if err != nil {
117 return nil, fmt.Errorf("unable to create proxier: %v", err)
118 }
119
120 return proxier, nil
121 }
122
123
124 func platformCleanup(mode proxyconfigapi.ProxyMode, cleanupAndExit bool) error {
125 if cleanupAndExit {
126 return errors.New("--cleanup-and-exit is not implemented on Windows")
127 }
128 return nil
129 }
130
View as plain text