ipvs
ipvs copied to clipboard
Using this package without ipvs doesn't return error
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
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.
Is this project still active?
@thaJeztah, can you help see this problem