mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-11-12 21:40:29 +00:00
ipvs: ensure selected scheduler kernel modules are loaded
Signed-off-by: Christopher M. Luciano <cmluciano@us.ibm.com>
This commit is contained in:
@@ -259,6 +259,7 @@ func TestCleanupLeftovers(t *testing.T) {
|
||||
func TestCanUseIPVSProxier(t *testing.T) {
|
||||
testCases := []struct {
|
||||
mods []string
|
||||
scheduler string
|
||||
kernelVersion string
|
||||
kernelErr error
|
||||
ipsetVersion string
|
||||
@@ -268,6 +269,7 @@ func TestCanUseIPVSProxier(t *testing.T) {
|
||||
// case 0, kernel error
|
||||
{
|
||||
mods: []string{"foo", "bar", "baz"},
|
||||
scheduler: "",
|
||||
kernelVersion: "4.19",
|
||||
kernelErr: fmt.Errorf("oops"),
|
||||
ipsetVersion: "0.0",
|
||||
@@ -276,6 +278,7 @@ func TestCanUseIPVSProxier(t *testing.T) {
|
||||
// case 1, ipset error
|
||||
{
|
||||
mods: []string{"foo", "bar", "baz"},
|
||||
scheduler: "",
|
||||
kernelVersion: "4.19",
|
||||
ipsetVersion: MinIPSetCheckVersion,
|
||||
ipsetErr: fmt.Errorf("oops"),
|
||||
@@ -284,6 +287,7 @@ func TestCanUseIPVSProxier(t *testing.T) {
|
||||
// case 2, missing required kernel modules and ipset version too low
|
||||
{
|
||||
mods: []string{"foo", "bar", "baz"},
|
||||
scheduler: "rr",
|
||||
kernelVersion: "4.19",
|
||||
ipsetVersion: "1.1",
|
||||
ok: false,
|
||||
@@ -291,6 +295,7 @@ func TestCanUseIPVSProxier(t *testing.T) {
|
||||
// case 3, missing required ip_vs_* kernel modules
|
||||
{
|
||||
mods: []string{"ip_vs", "a", "bc", "def"},
|
||||
scheduler: "sed",
|
||||
kernelVersion: "4.19",
|
||||
ipsetVersion: MinIPSetCheckVersion,
|
||||
ok: false,
|
||||
@@ -298,6 +303,7 @@ func TestCanUseIPVSProxier(t *testing.T) {
|
||||
// case 4, ipset version too low
|
||||
{
|
||||
mods: []string{"ip_vs", "ip_vs_rr", "ip_vs_wrr", "ip_vs_sh", "nf_conntrack"},
|
||||
scheduler: "rr",
|
||||
kernelVersion: "4.19",
|
||||
ipsetVersion: "4.3.0",
|
||||
ok: false,
|
||||
@@ -305,6 +311,7 @@ func TestCanUseIPVSProxier(t *testing.T) {
|
||||
// case 5, ok for linux kernel 4.19
|
||||
{
|
||||
mods: []string{"ip_vs", "ip_vs_rr", "ip_vs_wrr", "ip_vs_sh", "nf_conntrack"},
|
||||
scheduler: "rr",
|
||||
kernelVersion: "4.19",
|
||||
ipsetVersion: MinIPSetCheckVersion,
|
||||
ok: true,
|
||||
@@ -312,6 +319,7 @@ func TestCanUseIPVSProxier(t *testing.T) {
|
||||
// case 6, ok for linux kernel 4.18
|
||||
{
|
||||
mods: []string{"ip_vs", "ip_vs_rr", "ip_vs_wrr", "ip_vs_sh", "nf_conntrack_ipv4"},
|
||||
scheduler: "rr",
|
||||
kernelVersion: "4.18",
|
||||
ipsetVersion: MinIPSetCheckVersion,
|
||||
ok: true,
|
||||
@@ -319,16 +327,33 @@ func TestCanUseIPVSProxier(t *testing.T) {
|
||||
// case 7. ok when module list has extra modules
|
||||
{
|
||||
mods: []string{"foo", "ip_vs", "ip_vs_rr", "ip_vs_wrr", "ip_vs_sh", "nf_conntrack", "bar"},
|
||||
scheduler: "rr",
|
||||
kernelVersion: "4.19",
|
||||
ipsetVersion: "6.19",
|
||||
ok: true,
|
||||
},
|
||||
// case 8, not ok for sed based IPVS scheduling
|
||||
{
|
||||
mods: []string{"ip_vs", "ip_vs_rr", "ip_vs_wrr", "ip_vs_sh", "nf_conntrack"},
|
||||
scheduler: "sed",
|
||||
kernelVersion: "4.19",
|
||||
ipsetVersion: MinIPSetCheckVersion,
|
||||
ok: false,
|
||||
},
|
||||
// case 9, ok for dh based IPVS scheduling
|
||||
{
|
||||
mods: []string{"ip_vs", "ip_vs_rr", "ip_vs_wrr", "ip_vs_sh", "nf_conntrack", "ip_vs_dh"},
|
||||
scheduler: "dh",
|
||||
kernelVersion: "4.19",
|
||||
ipsetVersion: MinIPSetCheckVersion,
|
||||
ok: true,
|
||||
},
|
||||
}
|
||||
|
||||
for i := range testCases {
|
||||
handle := &fakeKernelHandler{modules: testCases[i].mods, kernelVersion: testCases[i].kernelVersion}
|
||||
versioner := &fakeIPSetVersioner{version: testCases[i].ipsetVersion, err: testCases[i].ipsetErr}
|
||||
ok, err := CanUseIPVSProxier(handle, versioner)
|
||||
ok, err := CanUseIPVSProxier(handle, versioner, testCases[i].scheduler)
|
||||
if ok != testCases[i].ok {
|
||||
t.Errorf("Case [%d], expect %v, got %v: err: %v", i, testCases[i].ok, ok, err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user