--bind-address
:
监听的地址,默认0.0.0.0 监听所有地址。
--cleanup
:
执行清理iptables与ipvs规则,然后退出。
iptables规则可以清理,ipvs的只是把kube-ipvs网卡清理了。这个警告没关系。
[root@k8s-node5 bin]# /usr/local/k8s/bin/kube-proxy --cleanup
W1213 16:54:16.760644 16728 server.go:208] WARNING: all flags other than --config, --write-config-to, and --cleanup are deprecated. Please begin using a config file ASAP.
--cleanup-ipvs
:
如果--cleanup也指定了, 除正常cleanup以外还会刷新ipvs规则。也没有测出什么来。
--cluster-cidr
:
整个集群pod的范围,不是单个节点。 如: --cluster-cidr=10.1.0.0/16, 会在iptables添加相应的KUBE-FORWARD与KUBE-SERVICE规则。
--conntrack-max-per-core
:
修改内核参数nat表大小,/proc/sys/net/netfilter/nf_conntrack_max
每cpu核设置的大小。根据cpu核数量,自动计算nat表大小。default 32768, 0表示不修改, 并忽略--conntrack-min参数。
--conntrack-min
:
nat表最小有多大。default 131072。
--conntrack-tcp-timeout-close-wait
:
修改内核参数nat表CLOSE_WAIT连接的超时间。/proc/sys/net/netfilter/nf_conntrack_tcp_timeout_close_wait。 默认 1h0m0s
--conntrack-tcp-timeout-established
:
修改内核参数中nat表established连接的超时时间,/proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established。 默认: 24h0m0s
--healthz-bind-address
:
健康检测地址,默认 0.0.0.0
--healthz-port
:
健康检测端口,默认10256, 0 表示禁用。
--hostname-override
:
用来识别集群节点的名称,会在集群中查找有没有相同名称的节点。 如果没有就会报下面的错误。而集群节点的名称是通过kubelet的--hostname-override参数指定的。默认都是主机名。
E1213 11:30:19.866389 30172 node.go:124] Failed to retrieve node info: nodes "172.100.101.198" not found
E1213 11:30:20.923691 30172 node.go:124] Failed to retrieve node info: nodes "172.100.101.198" not found
E1213 11:30:23.065507 30172 node.go:124] Failed to retrieve node info: nodes "172.100.101.198" not found
E1213 11:30:27.685217 30172 node.go:124] Failed to retrieve node info: nodes "172.100.101.198" not found
E1213 11:30:36.457646 30172 node.go:124] Failed to retrieve node info: nodes "172.100.101.198" not found
F1213 11:30:36.457735 30172 server.go:443] unable to get node IP for hostname 172.100.101.198
--iptables-masquerade-bit
:
如果使用纯iptables的环境,则给需要SNAT的包添加mark。以进站添加mark,出站过滤mark的方式做SNAT。范围必须是0-31, 默认14。
这里的值是有多少位二进制1。
如默认的: --iptables-masquerade-bit=14。
十进制14也就是11111111111111,再加上1 = 100000000000000, 转换成十六进制就是0x4000。 至于为什么不直接使用加1以后的值,这就不清楚了。
会添加这两条规则:
-A KUBE-MARK-MASQ -j MARK --set-xmark 0x4000/0x4000
-A KUBE-POSTROUTING -m comment --comment "kubernetes service traffic requiring SNAT" -m mark --mark 0x4000/0x4000 -j MASQUERADE
参数值改成5就是这样两条规则:
-A KUBE-MARK-MASQ -j MARK --set-xmark 0x20/0x20
-A KUBE-POSTROUTING -m comment --comment "kubernetes service traffic requiring SNAT" -m mark --mark 0x20/0x20 -j MASQUERADE
--iptables-min-sync-period
:
当节点与服务发生变化以后,iptables规则刷新的最小间隔。 (e.g. '5s', '1m', '2h22m')
--iptables-sync-period
:
当节点与服务发生变化以后,iptables规则刷新的最大间隔。默认: 30s , 必须大于0.
--ipvs-exclude-cidrs
:
指定一个逗号分隔的CIDR列表,当cleanup ipvs规则时,不能清理列表里的规则。--cleanup清理ipvs都没有测试成功。这个更别提了。
--ipvs-min-sync-period
:
当节点与服务发生变化以后,ipvs规则刷新的最小间隔
--ipvs-sync-period
:
当节点与服务发生变化以后,ipvs规则刷新的最大间隔
--ipvs-scheduler
:
ipvs的调度规则(rr, wrr, sh, dh, lc, wlc, sed, nq, lblc, lblcr)。
--ipvs-strict-arp
:
设置内核参数arp_ignore为1,arp_announce为2。就是这俩 /proc/sys/net/ipv4/conf/all/arp_ignore, /proc/sys/net/ipv4/conf/all/arp_announce
这三个不知道怎么测试。
--kube-api-burst
:
每秒与 kubernetes apiserver 交互的数量, 默认 10.
--kube-api-content-type
:
发送到apiserver的请求类型,默认: "application/vnd.kubernetes.protobuf"
--kube-api-qps
:
与 kubernetes apiserver 交互时使用的 QPS。
--kubeconfig
:
指定连接apiserver的kubeconfig文件。
--log-dir
:
如果非空, 写日志到指定的目录。
--log-file
:
如果非空, 写日志到指定的文件。
--log-file-max-size
:
日志大小,单位M bytes。 默认, 1800.
--log-flush-frequency
:
不清楚是不是刷新到磁盘的时间, 默认: 5s
--logtostderr
:
是否把日志写入到标准错误输出。
--masquerade-all
:
纯使用iptables的环境,snat所有service cluster ip的流量。(并不常用)
--master
:
apiserver地址,都在kubeconfig文件里已经指定了。会覆盖kubeconfig里的值。
prometheus 监控
--metrics-bind-address
:
提供metrics监控接口的地址,默认127.0.0.1.
--metrics-port
:
提供metrics监控接口的端口, 默认10249.
--nodeport-addresses
:
指定用于 NodePorts 的地址。(e.g. 1.2.3.0/24, 1.2.3.4/32), 默认所有地址。
--oom-score-adj
:
内存OOM分数的取值。指定oom-score-adj值。 范围 -1000-1000 (default -999)。
--profiling
:
在web页面的/debug/pprof接口启用分析页面。web页面的地址与端口就是--metrics-bind-address与--metrics-port指定的。
--proxy-mode
:
负载均衡模式, 包含: userspace, iptables, ipvs。 默认iptables。
--proxy-port-range # 指定主机端口范围。 就是kube-proxy可以使用的端口范围。如果不指定,指定为0,或是0-0, 都会随机使用端口。
至于为什么会使用端口,比如kube-proxy工作在userspace模式下就是代理(类似于haproxy, nginx stream),需要使用端口来访问后端。下面是在userspace模式下报的错:
随机的端口正在使用
E1213 16:21:28.554603 32311 proxier.go:532] Failed to open portal for "monitor/monitor-prometheus-node-exporter:metrics": can't open node port for 10.0.215.216:9100/TCP: listen tcp 10.0.215.216:9100: bind: address already in use
E1213 16:21:29.937213 32311 proxier.go:392] Failed to ensure portal for "monitor/monitor-prometheus-node-exporter:metrics": can't open node port for 10.0.215.216:9100/TCP: listen tcp 10.0.215.216:9100: bind: address already in use
没有端口可用。
E1213 16:21:14.713787 32109 proxier.go:506] failed to allocate proxy port for service "ingress-controller/ingress-nginx:http": port allocation failed; there are no remaining ports left to allocate in the accepted range
E1213 16:21:15.714280 32109 proxier.go:506] failed to allocate proxy port for service "ingress-controller/ingress-nginx:https": port allocation failed; there are no remaining ports left to allocate in the accepted range
--udp-timeout
:
空闲的udp连接保持打开的时长, 只能用于userspace模式, 默认:250ms.
--write-config-to
:
把默认配置以及命令行指定的配置写入到config文件。 有一些config文件不支持的写不进去。
不知道config文件是什么格式,现在知道了吧。
[root@k8s-node5 bin]# /usr/local/k8s/bin/kube-proxy --kubeconfig=/usr/local/k8s/conf/kube-proxy.kubeconfig.yaml --proxy-mode=ipvs --log-dir=/usr/local/k8s/logs --logtostderr=false --v=4 --cluster-cidr=10.1.0.0/16 --write-config-to=333
[root@k8s-node5 bin]# cat 333
apiVersion: kubeproxy.config.k8s.io/v1alpha1
bindAddress: 0.0.0.0
clientConnection:
acceptContentTypes: ""
burst: 10
contentType: application/vnd.kubernetes.protobuf
kubeconfig: /usr/local/k8s/conf/kube-proxy.kubeconfig.yaml
qps: 5
clusterCIDR: 10.1.0.0/16
configSyncPeriod: 15m0s
conntrack:
maxPerCore: 32768
min: 131072
tcpCloseWaitTimeout: 1h0m0s
tcpEstablishedTimeout: 24h0m0s
enableProfiling: false
healthzBindAddress: 0.0.0.0:10256
hostnameOverride: ""
iptables:
masqueradeAll: false
masqueradeBit: 14
minSyncPeriod: 0s
syncPeriod: 30s
ipvs:
excludeCIDRs: null
minSyncPeriod: 0s
scheduler: ""
strictARP: false
syncPeriod: 30s
kind: KubeProxyConfiguration
metricsBindAddress: 127.0.0.1:10249
mode: ipvs
nodePortAddresses: null
oomScoreAdj: -999
portRange: ""
udpIdleTimeout: 250ms
winkernel:
enableDSR: false
networkName: ""
sourceVip: ""