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