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(当 —logtostderr=true 时不生效)

—bind-address string     默认值:0.0.0.0

重写 kube-proxy 对其节点主要 IP 的理解。请注意,此名称是一个历史遗留字段, 并且 kube-proxy 实际上并没有将任何套接字绑定到此 IP。 如果配置文件由 —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 范围。对于双协议栈集群,这可以是逗号分隔的双协议栈 CIDR 范围对。 当 —detect-local-mode 设置为 ClusterCIDR 时, kube-proxy 会将源 IP 在此范围内的流量视为本地流量。否则不使用此字段。 如果配置文件由 —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-be-liberal

通过将 nf_conntrack_tcp_be_liberal 设置为 1,启用宽松模式以跟踪 TCP 数据包。

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

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

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

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

—conntrack-udp-timeout duration

UNREPLIED UDP 连接的空闲超时(0 保持当前设置)。

—conntrack-udp-timeout-stream duration

ASSURED UDP 连接的空闲超时(0 保持当前设置)。

—detect-local-mode LocalMode

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

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

一组 key=value 对,用来描述测试性/试验性功能的特性门控。可选项有:
APIResponseCompression=true|false (BETA - 默认值=true)
APIServerIdentity=true|false (BETA - 默认值=true)
APIServerTracing=true|false (BETA - 默认值=true)
AdmissionWebhookMatchConditions=true|false (BETA - 默认值=true)
AggregatedDiscoveryEndpoint=true|false (BETA - 默认值=true)
AllAlpha=true|false (ALPHA - 默认值=false)
AllBeta=true|false (BETA - 默认值=false)
AnyVolumeDataSource=true|false (BETA - 默认值=true)
AppArmor=true|false (BETA - 默认值=true)
CPUManagerPolicyAlphaOptions=true|false (ALPHA - 默认值=false)
CPUManagerPolicyBetaOptions=true|false (BETA - 默认值=true)
CPUManagerPolicyOptions=true|false (BETA - 默认值=true)
CRDValidationRatcheting=true|false (ALPHA - 默认值=false)
CSIMigrationPortworx=true|false (BETA - 默认值=false)
CSIVolumeHealth=true|false (ALPHA - 默认值=false)
CloudControllerManagerWebhook=true|false (ALPHA - 默认值=false)
CloudDualStackNodeIPs=true|false (BETA - 默认值=true)
ClusterTrustBundle=true|false (ALPHA - 默认值=false)
ClusterTrustBundleProjection=true|false (ALPHA - 默认值=false)
ComponentSLIs=true|false (BETA - 默认值=true)
ConsistentListFromCache=true|false (ALPHA - 默认值=false)
ContainerCheckpoint=true|false (ALPHA - 默认值=false)
ContextualLogging=true|false (ALPHA - 默认值=false)
CronJobsScheduledAnnotation=true|false (BETA - 默认值=true)
CrossNamespaceVolumeDataSource=true|false (ALPHA - 默认值=false)
CustomCPUCFSQuotaPeriod=true|false (ALPHA - 默认值=false)
DevicePluginCDIDevices=true|false (BETA - 默认值=true)
DisableCloudProviders=true|false (BETA - 默认值=true)
DisableKubeletCloudCredentialProviders=true|false (BETA - 默认值=true)
DisableNodeKubeProxyVersion=true|false (ALPHA - 默认值=false)
DynamicResourceAllocation=true|false (ALPHA - 默认值=false)
ElasticIndexedJob=true|false (BETA - 默认值=true)
EventedPLEG=true|false (BETA - 默认值=false)
GracefulNodeShutdown=true|false (BETA - 默认值=true)
GracefulNodeShutdownBasedOnPodPriority=true|false (BETA - 默认值=true)
HPAContainerMetrics=true|false (BETA - 默认值=true)
HPAScaleToZero=true|false (ALPHA - 默认值=false)
HonorPVReclaimPolicy=true|false (ALPHA - 默认值=false)
ImageMaximumGCAge=true|false (ALPHA - 默认值=false)
InPlacePodVerticalScaling=true|false (ALPHA - 默认值=false)
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)
InTreePluginvSphereUnregister=true|false (ALPHA - 默认值=false)
JobBackoffLimitPerIndex=true|false (BETA - 默认值=true)
JobPodFailurePolicy=true|false (BETA - 默认值=true)
JobPodReplacementPolicy=true|false (BETA - 默认值=true)
KubeProxyDrainingTerminatingNodes=true|false (ALPHA - 默认值=false)
KubeletCgroupDriverFromCRI=true|false (ALPHA - 默认值=false)
KubeletInUserNamespace=true|false (ALPHA - 默认值=false)
KubeletPodResourcesDynamicResources=true|false (ALPHA - 默认值=false)
KubeletPodResourcesGet=true|false (ALPHA - 默认值=false)
KubeletSeparateDiskGC=true|false (ALPHA - 默认值=false)
KubeletTracing=true|false (BETA - 默认值=true)
LegacyServiceAccountTokenCleanUp=true|false (BETA - 默认值=true)
LoadBalancerIPMode=true|false (ALPHA - 默认值=false)
LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - 默认值=false)
LogarithmicScaleDown=true|false (BETA - 默认值=true)
LoggingAlphaOptions=true|false (ALPHA - 默认值=false)
LoggingBetaOptions=true|false (BETA - 默认值=true)
MatchLabelKeysInPodAffinity=true|false (ALPHA - 默认值=false)
MatchLabelKeysInPodTopologySpread=true|false (BETA - 默认值=true)
MaxUnavailableStatefulSet=true|false (ALPHA - 默认值=false)
MemoryManager=true|false (BETA - 默认值=true)
MemoryQoS=true|false (ALPHA - 默认值=false)
MinDomainsInPodTopologySpread=true|false (BETA - 默认值=true)
MultiCIDRServiceAllocator=true|false (ALPHA - 默认值=false)
NFTablesProxyMode=true|false (ALPHA - 默认值=false)
NewVolumeManagerReconstruction=true|false (BETA - 默认值=true)
NodeInclusionPolicyInPodTopologySpread=true|false (BETA - 默认值=true)
NodeLogQuery=true|false (ALPHA - 默认值=false)
NodeSwap=true|false (BETA - 默认值=false)
OpenAPIEnums=true|false (BETA - 默认值=true)
PDBUnhealthyPodEvictionPolicy=true|false (BETA - 默认值=true)
PersistentVolumeLastPhaseTransitionTime=true|false (BETA - 默认值=true)
PodAndContainerStatsFromCRI=true|false (ALPHA - 默认值=false)
PodDeletionCost=true|false (BETA - 默认值=true)
PodDisruptionConditions=true|false (BETA - 默认值=true)
PodHostIPs=true|false (BETA - 默认值=true)
PodIndexLabel=true|false (BETA - 默认值=true)
PodLifecycleSleepAction=true|false (ALPHA - 默认值=false)
PodReadyToStartContainersCondition=true|false (BETA - 默认值=true)
PodSchedulingReadiness=true|false (BETA - 默认值=true)
ProcMountType=true|false (ALPHA - 默认值=false)
QOSReserved=true|false (ALPHA - 默认值=false)
RecoverVolumeExpansionFailure=true|false (ALPHA - 默认值=false)
RotateKubeletServerCertificate=true|false (BETA - 默认值=true)
RuntimeClassInImageCriApi=true|false (ALPHA - 默认值=false)
SELinuxMountReadWriteOncePod=true|false (BETA - 默认值=true)
SchedulerQueueingHints=true|false (BETA - 默认值=false)
SecurityContextDeny=true|false (ALPHA - 默认值=false)
SeparateTaintEvictionController=true|false (BETA - 默认值=true)
ServiceAccountTokenJTI=true|false (ALPHA - 默认值=false)
ServiceAccountTokenNodeBinding=true|false (ALPHA - 默认值=false)
ServiceAccountTokenNodeBindingValidation=true|false (ALPHA - 默认值=false)
ServiceAccountTokenPodNodeInfo=true|false (ALPHA - 默认值=false)
SidecarContainers=true|false (BETA - 默认值=true)
SizeMemoryBackedVolumes=true|false (BETA - 默认值=true)
StableLoadBalancerNodeSet=true|false (BETA - 默认值=true)
StatefulSetAutoDeletePVC=true|false (BETA - 默认值=true)
StatefulSetStartOrdinal=true|false (BETA - 默认值=true)
StorageVersionAPI=true|false (ALPHA - 默认值=false)
StorageVersionHash=true|false (BETA - 默认值=true)
StructuredAuthenticationConfiguration=true|false (ALPHA - 默认值=false)
StructuredAuthorizationConfiguration=true|false (ALPHA - 默认值=false)
TopologyAwareHints=true|false (BETA - 默认值=true)
TopologyManagerPolicyAlphaOptions=true|false (ALPHA - 默认值=false)
TopologyManagerPolicyBetaOptions=true|false (BETA - 默认值=true)
TopologyManagerPolicyOptions=true|false (BETA - 默认值=true)
TranslateStreamCloseWebsocketRequests=true|false (ALPHA - 默认值=false)
UnauthenticatedHTTP2DOSMitigation=true|false (BETA - 默认值=true)
UnknownVersionInteroperabilityProxy=true|false (ALPHA - 默认值=false)
UserNamespacesPodSecurityStandards=true|false (ALPHA - 默认值=false)
UserNamespacesSupport=true|false (ALPHA - 默认值=false)
ValidatingAdmissionPolicy=true|false (BETA - 默认值=false)
VolumeAttributesClass=true|false (ALPHA - 默认值=false)
VolumeCapacityPriority=true|false (ALPHA - 默认值=false)
WatchList=true|false (ALPHA - 默认值=false)
WinDSR=true|false (ALPHA - 默认值=false)
WinOverlay=true|false (BETA - 默认值=true)
WindowsHostNetwork=true|false (ALPHA - 默认值=true)
ZeroLimitedNominalConcurrencyShares=true|false (BETA - 默认值=false)
如果配置文件由 —config 指定,则忽略此参数。

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

服务健康状态检查的 IP 地址和端口。 如果 —bind-address 未设置或设置为 IPv4,则默认为 “0.0.0.0:10256”。 如果 —bind-address 设置为 IPv6,则默认为 “[::]:10256”。 设置为空则禁用。如果配置文件由 —config 指定,则忽略此参数。

-h, —help

kube-proxy 操作的帮助命令。

—hostname-override string

如果非空,将使用此字符串而不是实际的主机名作为标识。 如果不设置,节点名称假定为与节点的主机名相同。

—init-only

如果设置为 true,则执行需要完整 root 权限才能执行的所有初始化步骤,然后退出。 完成此操作后,你可以仅使用 CAP_NET_ADMIN 权能再次运行 kube-proxy。

—iptables-localhost-nodeports     默认值:true

如果设为 false,Kube-proxy 将禁用允许通过本地主机访问 NodePort 服务的传统行为, 这仅适用于 iptables 模式和 ipv4。本地主机的 NodePort 在其他代理模式或 IPv6 下是不允许的。

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

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

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

iptables 规则重新同步之间的最小间隔(例如 ‘5s’、’1m’、’2h22m’)。 值为 0 表示每次 Service 或 EndpointSlice 更改都会立即进行 iptables 重新同步。

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

表示各种重新同步和清理操作执行频率的时间间隔(例如 ‘5s’、’1m’、’2h22m’)。必须大于 0。

—ipvs-exclude-cidrs strings

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

—ipvs-min-sync-period duration

ipvs 规则重新同步之间的最小间隔(例如 ‘5s’、’1m’、’2h22m’)。 值为 0 表示每次 Service 或 EndpointSlice 更改都会立即进行 ipvs 重新同步。

—ipvs-scheduler string

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

—ipvs-strict-arp

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

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

表示各种重新同步和清理操作执行频率的时间间隔(例如 ‘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-flush-frequency duration     默认值:5s

日志清洗之间的最大秒数

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

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

—log_dir string

如果非空,则在此目录中写入日志文件(当 —logtostderr=true 时不生效)

—log_file string

如果非空,使用此日志文件(当 —logtostderr=true 时不生效)

—log_file_max_size uint     默认值:1800

定义日志文件可以增长到的最大大小(当 —logtostderr=true 时不生效)。 单位是兆字节。如果值为 0,则最大文件大小不受限制。

—logging-format string     默认值:”text”

设置日志格式。允许的格式为:”text”。

—logtostderr     默认值:true

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

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

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

—masquerade-all

如果使用 iptables 或 ipvs 代理模式,则对通过 Service 集群 IP 发送的所有流量进行 SNAT。 这对某些 CNI 插件可能是必需的。

—master string

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

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

metrics 服务器要使用的 IP 地址和端口。 如果 —bind-address 未设置或设置为 IPv4,则默认为 “127.0.0.1:10249”。 如果 —bind-address 设置为 IPv6,则默认为 “[::1]:10249”。 设置为 “0.0.0.0:10249” / “[::]:10249” 可以在所有接口上进行绑定。 设置为空则禁用。如果配置文件由 —config 指定,则忽略此参数。

—nodeport-addresses strings

一个包含有效节点 IP 的 CIDR 范围列表。 如果设置了,到 NodePort 服务的连接只会在节点 IP 在指定范围内时才会被接受。 如果不设置,则 NodePort 连接将在所有本地 IP 上被接受。 如果配置文件由 —config 指定,则忽略此参数。

—one_output

如果为 true,则仅将日志写入其本身的严重性级别 (而不是写入每个较低的严重性级别;当 —logtostderr=true 时不生效)。

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

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

—pod-bridge-interface string
一个桥接接口名称。当 —detect-local-mode 设置为 BridgeInterface 时, kube-proxy 会将源自此桥接的流量视为本地流量。
—pod-interface-name-prefix string
一个接口名称前缀。当 —detect-local-mode 设置为 InterfaceNamePrefix 时, kube-proxy 会将源自名称以该前缀开头的所有接口的流量视为本地流量。
—profiling

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

—proxy-mode ProxyMode

使用哪种代理模式:在 Linux 上可以是 ‘iptables’(默认)或 ‘ipvs’。 在 Windows 上唯一支持的值是 ‘kernelspace’。 如果配置文件由 —config 指定,则忽略此参数。

—show-hidden-metrics-for-version string

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

—skip_headers

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

—skip_log_headers

如果为 true,则在打开日志文件时避免使用头部(当 —logtostderr=true 时不生效)

—stderrthreshold int     默认值:2

当写入到文件或 stderr 时设置严重程度达到或超过此阈值的日志输出到 stderr (当 —logtostderr=true—alsologtostderr=true 时不生效)。

-v, —v int

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

—version version[=true]

—version, —version=raw 打印版本信息并退出; —version=vX.Y.Z… 设置报告的版本。

—vmodule pattern=N,…

以逗号分割的 pattern=N 设置的列表,用于文件过滤日志(仅适用于文本日志格式)

—write-config-to string

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