moby / ipvs

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

Assume the address family based on the destination address #15

Closed andrewsykim closed 4 years ago

andrewsykim commented 4 years ago

Signed-off-by: Andrew Sy Kim kim.andrewsy@gmail.com

In older Linux kernels (< 3.18), the IPVS_DEST_ATTR_ADDR_FAMILY attribute does not exist. We should assume the address family based on the destination address if the attribute doesn't exist.

Users running the Kubernetes IPVS proxy on older kernel versions are seeing issues because parseIP returns an error since the address family is not returned from the kernel, see https://github.com/kubernetes/kubernetes/issues/89520 for more details.

andrewsykim commented 4 years ago

cc @justincormack @lbernail

justincormack commented 4 years ago

What kernels that anyone is using does this apply to? 3.18 was released in 2014...

niorg commented 4 years ago

CentOS / RHEL 7 is using a kernel based on 3.10

andrewsykim commented 4 years ago

CentOS / RHEL 7 is using a kernel based on 3.10

Yeah and bugs being reported from Kubernetes users are usually users running on CentOS 7. More details in this issue https://github.com/kubernetes/kubernetes/issues/89520. I agree it's not ideal trying to support such old kernels but there seems to be a fairly large amount of users trying to run IPVS on CentOS 7.

lbernail commented 4 years ago

@justincormack I agree it's not great but we still see a lot of users running CentOS / RHEL 7

We introduced the problem in kube-proxy when adding support for dual-stack which required updating libnetwork/ipvs to get moby/libnetwork#2416 and moby/libnetwork#2433

The current impact for Kubernetes users is that they can't run recent kube-proxy versions on this kernel (@andrewsykim disabling dual stack doesn't help with this right? We won't start the v6 proxier but address parsing for the v4 proxier will be wrong)