--- api_metadata: apiVersion: "discovery.k8s.io/v1" import: "k8s.io/api/discovery/v1" kind: "EndpointSlice" content_type: "api_reference" description: "EndpointSlice 代表一组服务端点。" title: "EndpointSlice" weight: 3 --- `apiVersion: discovery.k8s.io/v1` `import "k8s.io/api/discovery/v1"` ## EndpointSlice {#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} 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, 必需 }}">namespace - **pretty** (**查询参数**):string }}">pretty #### 响应 200 (}}">EndpointSlice):OK 401:Unauthorized ### `list` 列举或监测 EndpointSlice 类别的对象 #### HTTP 请求 GET /apis/discovery.k8s.io/v1/namespaces/{namespace}/endpointslices #### 参数 - **namespace** (**路径参数**):string, 必需 }}">namespace - **allowWatchBookmarks** (**查询参数**):boolean }}">allowWatchBookmarks - **continue** (**查询参数**):string }}">continue - **fieldSelector** (**查询参数**):string }}">fieldSelector - **labelSelector** (**查询参数**):string }}">labelSelector - **limit** (**查询参数**):integer }}">limit - **pretty** (**查询参数**):string }}">pretty - **resourceVersion** (**查询参数**):string }}">resourceVersion - **resourceVersionMatch** (**查询参数**):string }}">resourceVersionMatch - **sendInitialEvents** (**查询参数**): boolean }}">sendInitialEvents - **timeoutSeconds** (**查询参数**):integer }}">timeoutSeconds - **watch** (**查询参数**):boolean }}">watch #### 响应 200 (}}">EndpointSliceList): OK 401:Unauthorized ### `list` 列举或监测 EndpointSlice 类别的对象 #### HTTP 请求 GET /apis/discovery.k8s.io/v1/endpointslices #### 参数 - **allowWatchBookmarks** (**查询参数**):boolean }}">allowWatchBookmarks - **continue** (**查询参数**):string }}">continue - **fieldSelector** (**查询参数**):string }}">fieldSelector - **labelSelector** (**查询参数**):string }}">labelSelector - **limit** (**查询参数**):integer }}">limit - **pretty** (**查询参数**):string }}">pretty - **resourceVersion** (**查询参数**):string }}">resourceVersion - **resourceVersionMatch** (*查询参数*):string }}">resourceVersionMatch - **sendInitialEvents** (**查询参数**): boolean }}">sendInitialEvents - **timeoutSeconds** (**查询参数**):integer }}">timeoutSeconds - **watch** (**查询参数**):boolean }}">watch #### 响应 200 (}}">EndpointSliceList):OK 401:Unauthorized ### `create` 创建 EndpointSlice #### HTTP 请求 POST /apis/discovery.k8s.io/v1/namespaces/{namespace}/endpointslices #### 参数 - **namespace** (**路径参数**):string, 必需 }}">namespace - **body**:}}">EndpointSlice, 必需 - **dryRun** (**查询参数**):string }}">dryRun - **fieldManager** (**查询参数**):string }}">fieldManager - **fieldValidation** (**查询参数**):string }}">fieldValidation - **pretty** (**查询参数**):string }}">pretty #### 响应 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, 必需 }}">namespace - **body**:}}">EndpointSlice必需 - **dryRun** (**查询参数**):string }}">dryRun - **fieldManager** (**查询参数**):string }}">fieldManager - **fieldValidation** (**查询参数**):string- }}">fieldValidation - **pretty** (**查询参数**):string }}">pretty #### 响应 200 (}}">EndpointSlice):OK 201 (}}">EndpointSlice):Created 401:Unauthorized ### `patch` 部分更新指定的 EndpointSlice #### HTTP 请求 PATCH /apis/discovery.k8s.io/v1/namespaces/{namespace}/endpointslices/{name} #### 参数 - **name** (**路径参数**): string, 必需 EndpointSlice 的名称 - **namespace** (**路径参数**):string, 必需 }}">namespace - **body**:}}">Patch, 必需 - **dryRun** (**查询参数**):string }}">dryRun - **fieldManager** (**查询参数**):string }}">fieldManager - **fieldValidation** (**查询参数**):string }}">fieldValidation - **force** (**查询参数**):boolean }}">force - **pretty** (**查询参数**):string }}">pretty #### 响应 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, 必需 }}">namespace - **body**:}}">DeleteOptions - **dryRun** (**查询参数**):string }}">dryRun - **gracePeriodSeconds** (**查询参数**):integer }}">gracePeriodSeconds - **ignoreStoreReadErrorWithClusterBreakingPotential** (**查询参数**):boolean }}">ignoreStoreReadErrorWithClusterBreakingPotential - **pretty** (**查询参数**):string }}">pretty - **propagationPolicy** (**查询参数**):string }}">propagationPolicy #### 响应 200 (}}">Status):OK 202 (}}">Status):Accepted 401:Unauthorized ### `deletecollection` 删除 EndpointSlice 的集合 #### HTTP 请求 DELETE /apis/discovery.k8s.io/v1/namespaces/{namespace}/endpointslices #### 参数 - **namespace** (**路径参数**):string, 必需 }}">namespace - **body**:}}">DeleteOptions - **continue** (**查询参数**):string }}">continue - **dryRun** (**查询参数**):string }}">dryRun - **fieldSelector** (**查询参数**):string }}">fieldSelector - **gracePeriodSeconds** (**查询参数**):integer }}">gracePeriodSeconds - **ignoreStoreReadErrorWithClusterBreakingPotential** (**查询参数**):boolean }}">ignoreStoreReadErrorWithClusterBreakingPotential - **labelSelector** (**查询参数**):string }}">labelSelector - **limit** (**查询参数**):integer }}">limit - **pretty** (**查询参数**):string }}">pretty - **propagationPolicy** (**查询参数**):string }}">propagationPolicy - **resourceVersion** (**查询参数**):string }}">resourceVersion - **resourceVersionMatch** (**查询参数**):string }}">resourceVersionMatch - **sendInitialEvents** (**查询参数**): boolean }}">sendInitialEvents - **timeoutSeconds** (**查询参数**):integer }}">timeoutSeconds #### 响应 200 (}}">Status):OK 401:Unauthorized