EndpointSlice
apiVersion: discovery.k8s.io/v1
import "k8s.io/api/discovery/v1"
EndpointSlice
EndpointSlice 表示一组服务端点。大多数 EndpointSlice 由 EndpointSlice
控制器创建,用于表示被 Service 对象选中的 Pod。对于一个给定的服务,可能存在多个
EndpointSlice 对象,这些对象必须被组合在一起以产生完整的端点集合;
你可以通过在服务的命名空间中列出 kubernetes.io/service-name
标签包含 Service 名称的 EndpointSlices 来找到给定 Service 的所有 slices。
-
apiVersion:discovery.k8s.io/v1
-
kind:EndpointSlice
-
metadata (ObjectMeta)
标准的对象元数据。
-
addressType (string), 必需
addressType 指定当前 EndpointSlice 携带的地址类型。一个 EndpointSlice 只能携带同一类型的地址。 EndpointSlice 对象创建完成后不可以再更改 addressType 字段。 目前支持的地址类型为:
- IPv4:表示 IPv4 地址。
- IPv6:表示 IPv6 地址。
- FQDN:表示完全限定域名。
- (已弃用)EndpointSlice 控制器仅生成地址类型为 "IPv4" 和 "IPv6" 的切片, 且 kube-proxy 也仅处理这些类型的切片。对于 "FQDN" 类型,未定义其语义。
-
endpoints ([]Endpoint), 必需
原子性:合并期间将被替换
endpoints 是当前 EndpointSlice 中一组唯一的端点。每个 EndpointSlice 最多可以包含 1000 个端点。
端点是实现某 Service 的一个逻辑“后端”。
-
endpoints.addresses ([]string), 必需
集合:不重复的值在合并期间会被保留
本端点的地址。对于地址类型为 "IPv4" 或 "IPv6" 的 EndpointSlices, 值是规范形式的 IP 地址。其他地址类型值的语法和语义未定义。 这必须包含至少一个地址但不超过 100 个。由 EndpointSlice 控制器生成的 EndpointSlices 将始终只有 1 个地址。对于第一个之后的额外地址,未定义其语义, 并且 kube-proxy 不会查看它们。
-
endpoints.conditions (EndpointConditions)
conditions 包含和本端点当前状态有关的信息。
EndpointConditions 是端点的当前状况。
-
endpoints.conditions.ready (boolean)
ready 说明此端点已经准备好根据相关的系统映射接收流量。nil 值应解释为 "true"。 通常,如果 endpoint 正在服务且未终止,则应将其标记为 ready, 尽管在某些情况下可以覆盖此设置,例如当关联的 Service 设置了 publishNotReadyAddresses 标志时。
-
endpoints.conditions.serving (boolean)
serving 表示此端点能够接收流量,根据管理端点的系统。对于由 Pod 支持的端点, 如果 Pod 的 Ready 条件为 True,EndpointSlice 控制器会将端点标记为 serving。 nil 值应解释为 "true"。
-
endpoints.conditions.terminating (boolean)
terminating 说明当前端点正在终止过程中。 nil 值应解释为 "false"。
-
-
endpoints.deprecatedTopology (map[string]string)
deprecatedTopology 包含 v1beta1 API 的拓扑信息部分。目前已经弃用了此字段, 移除 v1beta1 API 时(不早于 Kubernetes v1.24)会一起移除此字段。 此字段目前仍然可以存储值,但是不能通过 v1 API 写入数据。 向此字段写入数据的任何尝试都会被忽略,并且不会通知用户。 移除此字段后,可以在 zone 和 nodeName 字段中查看拓扑信息。
-
endpoints.hints (EndpointHints)
hints 是关于应该如何使用某端点的提示信息。
EndpointHints 提供应该如何使用某端点的提示信息。
-
endpoints.hints.forNodes ([]ForNode)
原子性:合并期间将被替换
forNodes 表示在使用拓扑感知路由时,此端点应由哪个(些)节点消费。 最多可能包含 8 个条目。这是一个 Alpha 级别特性,仅在启用了 PreferSameTrafficDistribution 特性门控时使用。
ForNode 提供关于哪个节点应调用此端点的信息。
-
endpoints.hints.forNodes.name (string),必需
name 表示节点的名称。
-
-
endpoints.hints.forZones ([]ForZone)
原子性:合并期间将被替换
forZones 表示在使用拓扑感知路由时,该端点应由哪个(些)区域消费。 最多可能包含 8 个条目。
ForZone 指示应该由哪些可用区调度此端点。
-
endpoints.hints.forZones.name (string), 必需
name 代表可用区的名称。
-
-
-
endpoints.hostname (string)
此端点的主机名称。端点的使用者可以通过此字段区分各个端点(例如,通过 DNS 域名)。 使用同一主机名称的多个端点应被视为可替换(例如,DNS 中的多个 A 记录)。 必须为小写字母,并且需要通过 DNS Label (RFC 1123) 验证。
-
endpoints.nodeName (string)
nodeName 是托管此端点的 Node 的名称,使用 nodeName 可以决定 Node 本地有哪些端点。
-
endpoints.targetRef (ObjectReference)
targetRef 是对代表此端点的 Kubernetes 对象的引用。
-
endpoints.zone (string)
zone 是此端点所在的可用区(Zone)的名称。
-
-
ports ([]EndpointPort)
原子性:合并期间会被替代
ports 列出了当前 EndpointSlice 中各个端点所暴露的网络端口。每个端口的名称不得重复。 每个切片最多可能包含 100 个端口。Service 总是至少有 1 个端口,因此由 EndpointSlice 控制器生成的 EndpointSlices 同样总是至少有 1 个端口。用于其他目的的 EndpointSlices 可能有一个空的 ports 列表。
EndpointPort 是 EndpointSlice 使用的端口。
-
ports.port (int32)
port 表示端点的端口号。如果 EndpointSlice 是从 Kubernetes 服务派生的, 这必须设置为服务的目标端口。用于其他目的的 EndpointSlices 可能有一个 nil 端口。
-
ports.protocol (string)
protocol 表示此端口的 IP 协议。必须为 UDP、TCP 或 SCTP。默认为 TCP。
-
ports.name (string)
name 表示此端口的名称。EndpointSlice 中所有端口的名称都不得重复。 如果 EndpointSlice 是基于 Kubernetes Service 创建的, 那么此端口的名称和 Service.ports[].name 字段的值一致。默认为空字符串。 名称必须是空字符串,或者必须通过 DNS_LABEL 验证:
- 最多包含 63 个字符。
- 必须包含英文小写字母或'-'。
- 必须以字母开头并以字母结尾。
-
ports.appProtocol (string)
此端口的应用层协议。字段值被用作提示,允许协议实现为其所理解的协议提供更丰富的行为。 此字段遵循标准的 Kubernetes 标签句法。有效的取值是:
-
不带前缀的协议名 - 是 IANA 标准服务的保留名称(参见 RFC-6335 和 https://www.iana.org/assignments/service-names)。
-
Kubernetes 定义的前缀名称:
- 'kubernetes.io/h2c' - HTTP/2 通过明文预先了解知识,如 https://www.rfc-editor.org/rfc/rfc9113.html#name-starting-http-2-with-prior- 中所述。
- 'kubernetes.io/ws' - 通过明文传输的 WebSocket,详见 https://www.rfc-editor.org/rfc/rfc6455
- 'kubernetes.io/wss' - 通过 TLS 传输的 WebSocket,详见 https://www.rfc-editor.org/rfc/rfc6455
-
其他协议应该使用带前缀的名称,例如 mycompany.com/my-custom-protocol。
-
-
EndpointSliceList
EndpointSliceList 是 EndpointSlice 的列表。
-
apiVersion:discovery.k8s.io/v1
-
kind:EndpointSliceList
-
metadata (ListMeta)
标准的列表元数据
-
items ([]EndpointSlice), 必需
items 是 EndpointSlice 列表
操作
get
读取指定的 EndpointSlice
HTTP 请求
GET /apis/discovery.k8s.io/v1/namespaces/{namespace}/endpointslices/{name}
参数
-
name (路径参数):string, 必需
EndpointSlice 的名称
-
namespace (路径参数):string, 必需
-
pretty (查询参数):string
响应
200 (EndpointSlice):OK
401:Unauthorized
list
列举或监测 EndpointSlice 类别的对象
HTTP 请求
GET /apis/discovery.k8s.io/v1/namespaces/{namespace}/endpointslices
参数
-
namespace (路径参数):string, 必需
-
allowWatchBookmarks (查询参数):boolean
-
continue (查询参数):string
-
fieldSelector (查询参数):string
-
labelSelector (查询参数):string
-
limit (查询参数):integer
-
pretty (查询参数):string
-
resourceVersion (查询参数):string
-
resourceVersionMatch (查询参数):string
-
sendInitialEvents (查询参数): boolean
-
timeoutSeconds (查询参数):integer
-
watch (查询参数):boolean
响应
200 (EndpointSliceList): OK
401:Unauthorized
list
列举或监测 EndpointSlice 类别的对象
HTTP 请求
GET /apis/discovery.k8s.io/v1/endpointslices
参数
-
allowWatchBookmarks (查询参数):boolean
-
continue (查询参数):string
-
fieldSelector (查询参数):string
-
labelSelector (查询参数):string
- limit (查询参数):integer limit
- pretty (查询参数):string pretty
-
resourceVersion (查询参数):string
-
resourceVersionMatch (查询参数):string
-
sendInitialEvents (查询参数): boolean
-
timeoutSeconds (查询参数):integer
-
watch (查询参数):boolean
响应
200 (EndpointSliceList):OK
401:Unauthorized
create
创建 EndpointSlice
HTTP 请求
POST /apis/discovery.k8s.io/v1/namespaces/{namespace}/endpointslices
参数
-
namespace (路径参数):string, 必需
-
body:EndpointSlice, 必需
-
dryRun (查询参数):string
-
fieldManager (查询参数):string
-
fieldValidation (查询参数):string
-
pretty (查询参数):string
响应
200 (EndpointSlice):OK
201 (EndpointSlice):Created
202 (EndpointSlice):Accepted
401:Unauthorized
update
替换指定的 EndpointSlice
HTTP 请求
PUT /apis/discovery.k8s.io/v1/namespaces/{namespace}/endpointslices/{name}
参数
-
name (路径参数):string, 必需
EndpointSlice 的名称
-
namespace (路径参数):string, 必需
-
body:EndpointSlice,必需
-
dryRun (查询参数):string
-
fieldManager (查询参数):string
-
fieldValidation (查询参数):string-
-
pretty (查询参数):string
响应
200 (EndpointSlice):OK
201 (EndpointSlice):Created
401:Unauthorized
patch
部分更新指定的 EndpointSlice
HTTP 请求
PATCH /apis/discovery.k8s.io/v1/namespaces/{namespace}/endpointslices/{name}
参数
-
name (路径参数): string, 必需
EndpointSlice 的名称
-
dryRun (查询参数):string
-
fieldManager (查询参数):string
-
fieldValidation (查询参数):string
-
force (查询参数):boolean
-
pretty (查询参数):string
响应
200 (EndpointSlice):OK
201 (EndpointSlice):Created
401:Unauthorized
delete
删除 EndpointSlice
HTTP 请求
DELETE /apis/discovery.k8s.io/v1/namespaces/{namespace}/endpointslices/{name}
参数
-
name (路径参数):string, 必需
EndpointSlice 的名称
-
namespace (路径参数):string, 必需
-
body:DeleteOptions
-
dryRun (查询参数):string
-
gracePeriodSeconds (查询参数):integer
-
ignoreStoreReadErrorWithClusterBreakingPotential (查询参数):boolean
-
pretty (查询参数):string
-
propagationPolicy (查询参数):string
响应
200 (Status):OK
202 (Status):Accepted
401:Unauthorized
deletecollection
删除 EndpointSlice 的集合
HTTP 请求
DELETE /apis/discovery.k8s.io/v1/namespaces/{namespace}/endpointslices
参数
-
namespace (路径参数):string, 必需
-
body:DeleteOptions
-
continue (查询参数):string
-
dryRun (查询参数):string
-
fieldSelector (查询参数):string
-
gracePeriodSeconds (查询参数):integer
-
ignoreStoreReadErrorWithClusterBreakingPotential (查询参数):boolean
-
labelSelector (查询参数):string
-
limit (查询参数):integer
-
pretty (查询参数):string
-
propagationPolicy (查询参数):string
-
resourceVersion (查询参数):string
-
resourceVersionMatch (查询参数):string
-
sendInitialEvents (查询参数): boolean
-
timeoutSeconds (查询参数):integer
响应
200 (Status):OK
401:Unauthorized