Skip to content

Using this package without ipvs doesn't return error #27

Open
@uablrek

Description

@uablrek

I use you example, slightly modified;

package main

import (
	"log"

	"github.com/moby/ipvs"
)

func main() {
	handle, err := ipvs.New("")
	if err != nil {
		log.Fatalf("ipvs.New: %s", err)
	}
	log.Println("ipvs.New did NOT give an error!!")
	_, err = handle.GetServices()
	if err != nil {
		log.Fatalf("handle.GetServices: %s", err)
	}
	log.Println("handle.GetServices did NOT give an error!!")
}

And run on a kernel where ipvs is not configured. Output:

# moby-example 
WARN[0000] Running modprobe ip_vs failed with message: `modprobe: WARNING: Module ip_vs not found in directory /lib/modules/6.1.0`, error: exit status 1 
ERRO[0000] Could not get ipvs family information from the kernel. It is possible that ipvs is not enabled in your kernel. Native loadbalancing will not work until this is fixed. 
2022/12/23 18:09:43 ipvs.New did NOT give an error!!
2022/12/23 18:09:43 handle.GetServices did NOT give an error!!

So, that ipvs can't be loaded is obviously noted, but even so err==nil is returned.

This is a serious bug, which enforces weird work-arounds do detect if ipvs can be used:

https://github.com/Nordix/kubernetes/blob/68d78c89eccf2d2f381033c836472d53f3ba41c9/pkg/proxy/ipvs/proxier.go#L692-L694

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions