kube-proxy

简介

Kubernetes 网络代理在每个节点上运行。网络代理反映了每个节点上 Kubernetes API 中定义的服务,并且可以执行简单的 TCP、UDP 和 SCTP 流转发,或者在一组后端进行 循环 TCP、UDP 和 SCTP 转发。 当前可通过 Docker-links-compatible 环境变量找到服务集群 IP 和端口, 这些环境变量指定了服务代理打开的端口。 有一个可选的插件,可以为这些集群 IP 提供集群 DNS。 用户必须使用 apiserver API 创建服务才能配置代理。

  1. kube-proxy [flags]

选项

—add_dir_header

如果为 true,将文件目录添加到日志消息的头部

—alsologtostderr

设置为 true 表示将日志输出到文件的同时输出到 stderr

—bind-address string     默认值:0.0.0.0

代理服务器的 IP 地址(所有 IPv4 接口设置为 “0.0.0.0”,所有 IPv6 接口设置为 “::”)。 如果配置文件由 —config 指定,则忽略此参数。

—bind-address-hard-fail

如果为 true,kube-proxy 会将无法绑定端口的失败操作视为致命错误并退出。

—boot_id_file string     默认值:”/proc/sys/kernel/random/boot_id”

逗号分隔的文件列表,用于检查 boot-id。使用第一个存在的文件。

—cleanup

如果为 true,清理 iptables 和 ipvs 规则并退出。

—cluster-cidr string

集群中 Pod 的 CIDR 范围。配置后,将从该范围之外发送到服务集群 IP 的流量被伪装,从 Pod 发送到外部 LoadBalancer IP 的流量将被重定向到相应的集群 IP。 对于双协议栈集群,接受一个逗号分隔的列表, 每个 IP 协议族(IPv4 和 IPv6)至少包含一个 CIDR。 如果配置文件由 —config 指定,则忽略此参数。

—config string

配置文件的路径。

—config-sync-period duration     默认值:15m0s

来自 apiserver 的配置的刷新频率。必须大于 0。

—conntrack-max-per-core int32     默认值:32768

每个 CPU 核跟踪的最大 NAT 连接数(0 表示保留当前限制并忽略 conntrack-min 设置)。

—conntrack-min int32     默认值:131072

无论 conntrack-max-per-core 多少,要分配的 conntrack 条目的最小数量(将 conntrack-max-per-core 设置为 0 即可 保持当前的限制)。

—conntrack-tcp-timeout-close-wait duration     默认值:1h0m0s

处于 CLOSE_WAIT 状态的 TCP 连接的 NAT 超时。

—conntrack-tcp-timeout-established duration     默认值:24h0m0s

已建立的 TCP 连接的空闲超时(0 保持当前设置)。

—detect-local-mode LocalMode

用于检测本地流量的模式。 如果配置文件由 —config 指定,则忽略此参数。

—feature-gates <逗号分隔的 ‘key=True|False’ 对>

一组键=值(key=value)对,描述了 alpha/experimental 的特征。可选项有:
APIListChunking=true|false (BETA - 默认值=true)
APIPriorityAndFairness=true|false (BETA - 默认值=true)
APIResponseCompression=true|false (BETA - 默认值=true)
APIServerIdentity=true|false (ALPHA - 默认值=false)
APIServerTracing=true|false (ALPHA - 默认值=false)
AllAlpha=true|false (ALPHA - 默认值=false)
AllBeta=true|false (BETA - 默认值=false)
AnyVolumeDataSource=true|false (BETA - 默认值=true)
AppArmor=true|false (BETA - 默认值=true)
CPUManager=true|false (BETA - 默认值=true)
CPUManagerPolicyAlphaOptions=true|false (ALPHA - 默认值=false)
CPUManagerPolicyBetaOptions=true|false (BETA - 默认值=true)
CPUManagerPolicyOptions=true|false (BETA - 默认值=true)
CSIInlineVolume=true|false (BETA - 默认值=true)
CSIMigration=true|false (BETA - 默认值=true)
CSIMigrationAWS=true|false (BETA - 默认值=true)
CSIMigrationAzureFile=true|false (BETA - 默认值=true)
CSIMigrationGCE=true|false (BETA - 默认值=true)
CSIMigrationPortworx=true|false (ALPHA - 默认值=false)
CSIMigrationRBD=true|false (ALPHA - 默认值=false)
CSIMigrationvSphere=true|false (BETA - 默认值=false)
CSIVolumeHealth=true|false (ALPHA - 默认值=false)
CronJobTimeZone=true|false (ALPHA - 默认值=false)
CustomCPUCFSQuotaPeriod=true|false (ALPHA - 默认值=false)
CustomResourceValidationExpressions=true|false (ALPHA - 默认值=false)
DaemonSetUpdateSurge=true|false (BETA - 默认值=true)
DelegateFSGroupToCSIDriver=true|false (BETA - 默认值=true)
DevicePlugins=true|false (BETA - 默认值=true)
DisableAcceleratorUsageMetrics=true|false (BETA - 默认值=true)
DisableCloudProviders=true|false (ALPHA - 默认值=false)
DisableKubeletCloudCredentialProviders=true|false (ALPHA - 默认值=false)
DownwardAPIHugePages=true|false (BETA - 默认值=true)
EndpointSliceTerminatingCondition=true|false (BETA - 默认值=true)
EphemeralContainers=true|false (BETA - 默认值=true)
ExpandedDNSConfig=true|false (ALPHA - 默认值=false)
ExperimentalHostUserNamespaceDefaulting=true|false (BETA - 默认值=false)
GRPCContainerProbe=true|false (BETA - 默认值=true)
GracefulNodeShutdown=true|false (BETA - 默认值=true)
GracefulNodeShutdownBasedOnPodPriority=true|false (BETA - 默认值=true)
HPAContainerMetrics=true|false (ALPHA - 默认值=false)
HPAScaleToZero=true|false (ALPHA - 默认值=false)
HonorPVReclaimPolicy=true|false (ALPHA - 默认值=false)
IdentifyPodOS=true|false (BETA - 默认值=true)
InTreePluginAWSUnregister=true|false (ALPHA - 默认值=false)
InTreePluginAzureDiskUnregister=true|false (ALPHA - 默认值=false)
InTreePluginAzureFileUnregister=true|false (ALPHA - 默认值=false)
InTreePluginGCEUnregister=true|false (ALPHA - 默认值=false)
InTreePluginOpenStackUnregister=true|false (ALPHA - 默认值=false)
InTreePluginPortworxUnregister=true|false (ALPHA - 默认值=false)
InTreePluginRBDUnregister=true|false (ALPHA - 默认值=false)
InTreePluginvSphereUnregister=true|false (ALPHA - 默认值=false)
JobMutableNodeSchedulingDirectives=true|false (BETA - 默认值=true)
JobReadyPods=true|false (BETA - 默认值=true)
JobTrackingWithFinalizers=true|false (BETA - 默认值=false)
KubeletCredentialProviders=true|false (BETA - 默认值=true)
KubeletInUserNamespace=true|false (ALPHA - 默认值=false)
KubeletPodResources=true|false (BETA - 默认值=true)
KubeletPodResourcesGetAllocatable=true|false (BETA - 默认值=true)
LegacyServiceAccountTokenNoAutoGeneration=true|false (BETA - 默认值=true)
LocalStorageCapacityIsolation=true|false (BETA - 默认值=true)
LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - 默认值=false)
LogarithmicScaleDown=true|false (BETA - 默认值=true)
MaxUnavailableStatefulSet=true|false (ALPHA - 默认值=false)
MemoryManager=true|false (BETA - 默认值=true)
MemoryQoS=true|false (ALPHA - 默认值=false)
MinDomainsInPodTopologySpread=true|false (ALPHA - 默认值=false)
MixedProtocolLBService=true|false (BETA - 默认值=true)
NetworkPolicyEndPort=true|false (BETA - 默认值=true)
NetworkPolicyStatus=true|false (ALPHA - 默认值=false)
NodeOutOfServiceVolumeDetach=true|false (ALPHA - 默认值=false)
NodeSwap=true|false (ALPHA - 默认值=false)
OpenAPIEnums=true|false (BETA - 默认值=true)
OpenAPIV3=true|false (BETA - 默认值=true)
PodAndContainerStatsFromCRI=true|false (ALPHA - 默认值=false)
PodDeletionCost=true|false (BETA - 默认值=true)
PodSecurity=true|false (BETA - 默认值=true)
ProbeTerminationGracePeriod=true|false (BETA - 默认值=false)
ProcMountType=true|false (ALPHA - 默认值=false)
ProxyTerminatingEndpoints=true|false (ALPHA - 默认值=false)
QOSReserved=true|false (ALPHA - 默认值=false)
ReadWriteOncePod=true|false (ALPHA - 默认值=false)
RecoverVolumeExpansionFailure=true|false (ALPHA - 默认值=false)
RemainingItemCount=true|false (BETA - 默认值=true)
RotateKubeletServerCertificate=true|false (BETA - 默认值=true)
SeccompDefault=true|false (ALPHA - 默认值=false)
ServerSideFieldValidation=true|false (ALPHA - 默认值=false)
ServiceIPStaticSubrange=true|false (ALPHA - 默认值=false)
ServiceInternalTrafficPolicy=true|false (BETA - 默认值=true)
SizeMemoryBackedVolumes=true|false (BETA - 默认值=true)
StatefulSetAutoDeletePVC=true|false (ALPHA - 默认值=false)
StatefulSetMinReadySeconds=true|false (BETA - 默认值=true)
StorageVersionAPI=true|false (ALPHA - 默认值=false)
StorageVersionHash=true|false (BETA - 默认值=true)
TopologyAwareHints=true|false (BETA - 默认值=true)
TopologyManager=true|false (BETA - 默认值=true)
VolumeCapacityPriority=true|false (ALPHA - 默认值=false)
WinDSR=true|false (ALPHA - 默认值=false)
WinOverlay=true|false (BETA - 默认值=true)
WindowsHostProcessContainers=true|false (BETA - 默认值=true) 如果配置文件由 —config 指定,则忽略此参数。

—healthz-bind-address 0.0.0.0     默认值:0.0.0.0:10256

服务健康状态检查的 IP 地址和端口(设置为 ‘0.0.0.0:10256’ 表示使用所有 IPv4 接口,设置为 ‘[::]:10256’ 表示使用所有 IPv6 接口); 设置为空则禁用。 如果配置文件由 —config 指定,则忽略此参数。

-h, —help

kube-proxy 操作的帮助命令。

—hostname-override string

如果非空,将使用此字符串而不是实际的主机名作为标识。

—iptables-masquerade-bit int32     默认值:14

在使用纯 iptables 代理时,用来设置 fwmark 空间的 bit,标记需要 SNAT 的数据包。必须在 [0,31] 范围内。

—iptables-min-sync-period duration     默认值:1s

iptables 规则可以随着端点和服务的更改而刷新的最小间隔(例如 ‘5s’、’1m’、’2h22m’)。

—iptables-sync-period duration     默认值:30s

刷新 iptables 规则的最大间隔(例如 ‘5s’、’1m’、’2h22m’)。必须大于 0。

—ipvs-exclude-cidrs strings

逗号分隔的 CIDR 列表,ipvs 代理在清理 IPVS 规则时不会此列表中的地址范围。

—ipvs-min-sync-period duration

ipvs 规则可以随着端点和服务的更改而刷新的最小间隔(例如 ‘5s’、’1m’、’2h22m’)。

—ipvs-scheduler string

代理模式为 ipvs 时所选的 ipvs 调度器类型。

—ipvs-strict-arp

通过将 arp_ignore 设置为 1 并将 arp_announce 设置为 2 启用严格的 ARP。

—ipvs-sync-period duration     默认值:30s

刷新 ipvs 规则的最大间隔(例如 ‘5s’、’1m’、’2h22m’)。必须大于 0。

—ipvs-tcp-timeout duration

空闲 IPVS TCP 连接的超时时间,0 保持连接(例如 ‘5s’、’1m’、’2h22m’)。

—ipvs-tcpfin-timeout duration

收到 FIN 数据包后,IPVS TCP 连接的超时,0 保持当前设置不变。(例如 ‘5s’、’1m’、’2h22m’)。

—ipvs-udp-timeout duration

IPVS UDP 数据包的超时,0 保持当前设置不变。(例如 ‘5s’、’1m’、’2h22m’)。

—kube-api-burst int32     默认值:10

与 kubernetes apiserver 通信的突发数量。

—kube-api-content-type string     默认值:”application/vnd.kubernetes.protobuf”

发送到 apiserver 的请求的内容类型。

—kube-api-qps float32     默认值:5

与 kubernetes apiserver 交互时使用的 QPS。

—kubeconfig string

包含鉴权信息的 kubeconfig 文件的路径(主控节点位置由 master 标志设置)。

—log_backtrace_at <“file:N” 格式的字符串>     默认值:0

当日志命中 file:N,触发一次堆栈追踪

—log_dir string

如果非空,则在此目录中写入日志文件

—log_file string

如果非空,使用此日志文件

—log_file_max_size uint     默认值:1800

定义日志文件可以增长到的最大大小。单位是兆字节。 如果值为 0,则最大文件大小不受限制。

—logtostderr     默认值:true

日志输出到 stderr 而不是文件。

—machine_id_file string     默认值:”/etc/machine-id,/var/lib/dbus/machine-id”

用来检查 Machine-ID 的文件列表,用逗号分隔。 使用找到的第一个文件。

—masquerade-all

如果使用纯 iptables 代理,则对通过服务集群 IP 发送的所有流量 进行 SNAT(通常不需要)。

—master string

Kubernetes API 服务器的地址(覆盖 kubeconfig 中的相关值)。

—metrics-bind-address ipport     默认值:127.0.0.1:10249

metrics 服务器要使用的 IP 地址和端口 (设置为 ‘0.0.0.0:10249’ 则使用所有 IPv4 接口,设置为 ‘[::]:10249’ 则使用所有 IPv6 接口) 设置为空则禁用。 如果配置文件由 —config 指定,则忽略此参数。

—nodeport-addresses strings

一个字符串值,指定用于 NodePort 服务的地址。 值可以是有效的 IP 块(例如 1.2.3.0/24, 1.2.3.4/32)。 默认的空字符串切片([])表示使用所有本地地址。 如果配置文件由 —config 指定,则忽略此参数。

—one_output

如果为 true,则仅将日志写入本地的严重性级别(而不是写入每个较低的严重性级别)

—oom-score-adj int32     默认值:-999

kube-proxy 进程中的 oom-score-adj 值,必须在 [-1000,1000] 范围内。 如果配置文件由 —config 指定,则忽略此参数。

—pod-bridge-interface string
集群中的一个桥接接口名称。 Kube-proxy 将来自与该值匹配的桥接接口的流量视为本地流量。 如果 DetectLocalMode 设置为 BridgeInterface,则应设置该参数。
—pod-interface-name-prefix string
集群中的一个接口前缀。 Kube-proxy 将来自与给定前缀匹配的接口的流量视为本地流量。 如果 DetectLocalMode 设置为 InterfaceNamePrefix,则应设置该参数。
—profiling

如果为 true,则通过 Web 接口 /debug/pprof 启用性能分析。 如果配置文件由 —config 指定,则忽略此参数。

—proxy-mode ProxyMode

使用哪种代理模式:’iptables’(仅 Linux)、’ipvs’(仅 Linux)、’kernelspace’(仅 Linux) 或者 ‘userspace’(Linux/Windows, 已弃用)。 Linux 系统上的默认值是 ‘iptables’,Windows 系统上的默认值是 ‘userspace’。 如果配置文件由 —config 指定,则忽略此参数。

—proxy-port-range port-range

可以用来代理服务流量的主机端口范围(包括’起始端口-结束端口’、 ‘单个端口’、’起始端口+偏移’几种形式)。 如果未指定或者设置为 0(或 0-0),则随机选择端口。

—show-hidden-metrics-for-version string

要显示隐藏指标的先前版本。 仅先前的次要版本有意义,不允许其他值。 格式为 <major>.<minor> ,例如:’1.16’。 这种格式的目的是确保你有机会注意到下一个发行版是否隐藏了其他指标, 而不是在之后将其永久删除时感到惊讶。 如果配置文件由 —config 指定,则忽略此参数。

—skip_headers

如果为 true,则避免在日志消息中使用头部前缀

—skip_log_headers

如果为 true,则在打开日志文件时避免使用头部

—stderrthreshold int     默认值:2

设置严重程度达到或超过此阈值的日志输出到标准错误输出。

—udp-timeout duration     默认值:250ms

空闲 UDP 连接将保持打开的时长(例如 ‘250ms’,’2s’)。必须大于 0。 仅适用于 proxy-mode=userspace。

-v, —v int

设置日志级别详细程度的数值。

—version version[=true]

打印版本信息并退出。

—vmodule <逗号分割的 “pattern=N” 设置>

以逗号分割的 pattern=N 设置的列表,用于文件过滤日志

—write-config-to string

如果设置,将默认配置信息写入此文件并退出。