De forma predeterminada, cuando no se especifica ningún valor en la configuración, kube-proxy puede ejecutarse en modo iptables o espacio de usuario:
--proxy-mode ProxyMode
Qué modo de proxy usar: 'espacio de usuario' (más antiguo) o 'iptables' (más rápido) o 'ipvs' o 'kernelspace' (ventanas). Si está en blanco, use el mejor proxy disponible (actualmente iptables). Si se selecciona el proxy de iptables, independientemente de cómo, pero las versiones del kernel o de iptables del sistema son insuficientes, siempre se recurre al proxy de espacio de usuario .
Dado que tanto el modo de espacio de usuario como el de iptables parecen crear reglas de iptables en el nodo, ¿hay alguna forma confiable de averiguar qué modo de proxy tiene kube-proxy por defecto?
El modo que presenta kube-proxy se menciona en el archivo de registro de kube-proxy.
W0322 08:09:44.312816 1 server_others.go:578] Unknown proxy mode "", assuming iptables proxy I0322 08:09:44.313052 1 server_others.go:185] Using iptables Proxier.Compruebe el código https://github.com/kubernetes/kubernetes/blob/master/cmd/kube-proxy/app/server_others.go
func getProxyMode(proxyMode string, canUseIPVS bool, kcompat iptables.KernelCompatTester) string { switch proxyMode { case proxyModeUserspace: return proxyModeUserspace case proxyModeIPTables: return tryIPTablesProxy(kcompat) case proxyModeIPVS: return tryIPVSProxy(canUseIPVS, kcompat) } klog.Warningf("Unknown proxy mode %q, assuming iptables proxy", proxyMode) return tryIPTablesProxy(kcompat) } func tryIPTablesProxy(kcompat iptables.KernelCompatTester) string { // guaranteed false on error, error only necessary for debugging useIPTablesProxy, err := iptables.CanUseIPTablesProxier(kcompat) if err != nil { utilruntime.HandleError(fmt.Errorf("can't determine whether to use iptables proxy, using userspace proxier: %v", err)) return proxyModeUserspace } if useIPTablesProxy { return proxyModeIPTables } // Fallback. klog.V(1).Infof("Can't use iptables proxy, using userspace proxier") return proxyModeUserspace }