繁体   English   中英

如何找到 kube-proxy 正在运行的模式

[英]How to find which mode kube-proxy is running in

默认情况下,当配置中未指定任何值时,kube-proxy 可能会在 iptables 或用户空间模式下运行:

--proxy-mode 代理模式

使用哪种代理模式:'userspace'(旧)或'iptables'(更快)或'ipvs'或'kernelspace'(windows)。 如果为空,请使用最可用的代理(当前为 iptables)。 如果选择了 iptables 代理,无论如何,但是系统的 kernel 或 iptables 版本不足,这总是回退到用户空间代理

文档

由于用户空间和 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
}


暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM