moby / ipvs

IPVS networking for containers (package derived from moby/libnetwork)
Apache License 2.0
98 stars 38 forks source link

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

Open uablrek opened 1 year ago

uablrek commented 1 year ago

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

uablrek commented 1 year ago

This is output on a statically linked kernel where ipvs is configured:

# moby-example 
WARN[0000] Running modprobe ip_vs failed with message: `modprobe: WARNING: Module ip_vs not found in directory /lib/modules/6.0.0`, error: exit status 1 
2022/12/23 18:22:09 ipvs.New did NOT give an error!!
2022/12/23 18:22:09 handle.GetServices did NOT give an error!!

Please drop the "WARN". To use a statically linked kernel is not an "odd thing". When using moby/ipvs in a system that tries to use structured logging, printouts like this from a library is an annoyance.

uablrek commented 1 year ago

Is this project still active?

lojies commented 1 year ago

@thaJeztah, can you help see this problem