mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-14 21:53:52 +00:00
Makes modes OS-specific (+ fixes tests).
This commit is contained in:
@@ -152,11 +152,13 @@ type KubeProxyConfiguration struct {
|
|||||||
ConfigSyncPeriod metav1.Duration
|
ConfigSyncPeriod metav1.Duration
|
||||||
}
|
}
|
||||||
|
|
||||||
// Currently two modes of proxying are available: 'userspace' (older, stable) or 'iptables'
|
// Currently, four modes of proxying are available total: 'userspace' (older, stable), 'iptables'
|
||||||
// (newer, faster). If blank, use the best-available proxy (currently iptables, but may
|
// (newer, faster), 'ipvs', and 'kernelspace' (Windows only, newer).
|
||||||
// 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
|
// If blank, use the best-available proxy (currently iptables, but may change in
|
||||||
// userspace proxy.
|
// 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.
|
||||||
type ProxyMode string
|
type ProxyMode string
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@@ -19,6 +19,7 @@ package validation
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
|
"runtime"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@@ -146,11 +147,18 @@ func validateProxyMode(mode kubeproxyconfig.ProxyMode, fldPath *field.Path) fiel
|
|||||||
case kubeproxyconfig.ProxyModeUserspace:
|
case kubeproxyconfig.ProxyModeUserspace:
|
||||||
case kubeproxyconfig.ProxyModeIPTables:
|
case kubeproxyconfig.ProxyModeIPTables:
|
||||||
case kubeproxyconfig.ProxyModeIPVS:
|
case kubeproxyconfig.ProxyModeIPVS:
|
||||||
case kubeproxyconfig.ProxyModeKernelspace:
|
|
||||||
case "":
|
case "":
|
||||||
|
case kubeproxyconfig.ProxyModeKernelspace:
|
||||||
|
if runtime.GOOS != "windows" {
|
||||||
|
errMsg := fmt.Sprintf("%s is only supported on Windows", string(kubeproxyconfig.ProxyModeKernelspace))
|
||||||
|
allErrs = append(allErrs, field.Invalid(fldPath.Child("ProxyMode"), string(mode), errMsg))
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
modes := []string{string(kubeproxyconfig.ProxyModeUserspace), string(kubeproxyconfig.ProxyModeIPTables), string(kubeproxyconfig.ProxyModeIPVS), string(kubeproxyconfig.ProxyModeKernelspace)}
|
modes := []string{string(kubeproxyconfig.ProxyModeUserspace), string(kubeproxyconfig.ProxyModeIPTables), string(kubeproxyconfig.ProxyModeIPVS)}
|
||||||
errMsg := fmt.Sprintf("must be %s or blank (blank means the best-available proxy (currently iptables)", strings.Join(modes, ","))
|
if runtime.GOOS == "windows" {
|
||||||
|
modes = append(modes, string(kubeproxyconfig.ProxyModeKernelspace))
|
||||||
|
}
|
||||||
|
errMsg := fmt.Sprintf("must be %s or blank (blank means the best-available proxy [currently iptables])", strings.Join(modes, ","))
|
||||||
allErrs = append(allErrs, field.Invalid(fldPath.Child("ProxyMode"), string(mode), errMsg))
|
allErrs = append(allErrs, field.Invalid(fldPath.Child("ProxyMode"), string(mode), errMsg))
|
||||||
}
|
}
|
||||||
return allErrs
|
return allErrs
|
||||||
|
@@ -18,6 +18,7 @@ package validation
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
@@ -488,11 +489,15 @@ func TestValidateProxyMode(t *testing.T) {
|
|||||||
newPath := field.NewPath("KubeProxyConfiguration")
|
newPath := field.NewPath("KubeProxyConfiguration")
|
||||||
successCases := []kubeproxyconfig.ProxyMode{
|
successCases := []kubeproxyconfig.ProxyMode{
|
||||||
kubeproxyconfig.ProxyModeUserspace,
|
kubeproxyconfig.ProxyModeUserspace,
|
||||||
kubeproxyconfig.ProxyModeIPTables,
|
|
||||||
kubeproxyconfig.ProxyModeIPVS,
|
|
||||||
kubeproxyconfig.ProxyMode(""),
|
kubeproxyconfig.ProxyMode(""),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if runtime.GOOS == "windows" {
|
||||||
|
successCases = append(successCases, kubeproxyconfig.ProxyModeKernelspace)
|
||||||
|
} else {
|
||||||
|
successCases = append(successCases, kubeproxyconfig.ProxyModeIPTables, kubeproxyconfig.ProxyModeIPVS)
|
||||||
|
}
|
||||||
|
|
||||||
for _, successCase := range successCases {
|
for _, successCase := range successCases {
|
||||||
if errs := validateProxyMode(successCase, newPath.Child("ProxyMode")); len(errs) != 0 {
|
if errs := validateProxyMode(successCase, newPath.Child("ProxyMode")); len(errs) != 0 {
|
||||||
t.Errorf("expected success: %v", errs)
|
t.Errorf("expected success: %v", errs)
|
||||||
@@ -505,13 +510,13 @@ func TestValidateProxyMode(t *testing.T) {
|
|||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
mode: kubeproxyconfig.ProxyMode("non-existing"),
|
mode: kubeproxyconfig.ProxyMode("non-existing"),
|
||||||
msg: "or blank (blank means the best-available proxy (currently iptables)",
|
msg: "or blank (blank means the best-available proxy [currently iptables])",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, errorCase := range errorCases {
|
for _, errorCase := range errorCases {
|
||||||
if errs := validateProxyMode(errorCase.mode, newPath.Child("ProxyMode")); len(errs) == 0 {
|
if errs := validateProxyMode(errorCase.mode, newPath.Child("ProxyMode")); len(errs) == 0 {
|
||||||
t.Errorf("expected failure for %s", errorCase.msg)
|
t.Errorf("expected failure %s for %v", errorCase.msg, errorCase.mode)
|
||||||
} else if !strings.Contains(errs[0].Error(), errorCase.msg) {
|
} else if !strings.Contains(errs[0].Error(), errorCase.msg) {
|
||||||
t.Errorf("unexpected error: %v, expected: %s", errs[0], errorCase.msg)
|
t.Errorf("unexpected error: %v, expected: %s", errs[0], errorCase.msg)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user