如何查找kube代理运行的模式



默认情况下,当配置中没有指定值时,kube代理可能在iptables或userspace模式下运行:

-代理模式ProxyMode

要使用的代理模式:"userspace"(较旧(或"iptables"(较快(或"ipvs"或"kernelspace"(windows(如果为空,请使用可用的最佳代理(当前为iptables(。如果选择了iptables代理,无论如何,但系统的内核或iptables版本不足,则始终返回到用户空间代理

doc

既然用户空间和iptables模式似乎都在节点上创建了iptables规则,那么有什么可靠的方法可以找出kube proxy默认使用的代理模式吗?

kube proxy产生的模式在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.

签入代码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
}

相关内容

  • 没有找到相关文章

最新更新