---
api_metadata:
apiVersion: "discovery.k8s.io/v1"
import: "k8s.io/api/discovery/v1"
kind: "EndpointSlice"
content_type: "api_reference"
description: "EndpointSlice 是实现某 Service 的端点的子集."
title: "EndpointSlice"
weight: 3
---
`apiVersion: discovery.k8s.io/v1`
`import "k8s.io/api/discovery/v1"`
## EndpointSlice {#EndpointSlice}
EndpointSlice 是实现某 Service 的端点的子集。一个 Service 可以有多个 EndpointSlice 对象与之对应,
必须将所有的 EndpointSlice 拼接起来才能形成一套完整的端点集合。Service 通过标签来选择 EndpointSlice。
- **apiVersion**:discovery.k8s.io/v1
- **kind**:EndpointSlice
- **metadata** (}}">ObjectMeta)
标准的对象元数据。
- **addressType** (string), 必需
addressType 指定当前 EndpointSlice 携带的地址类型。一个 EndpointSlice 只能携带同一类型的地址。
EndpointSlice 对象创建完成后不可以再更改 addressType 字段。
目前支持的地址类型为:
* IPv4:表示 IPv4 地址。
* IPv6:表示 IPv6 地址。
* FQDN:表示完全限定域名。
- **endpoints** ([]Endpoint), 必需
**原子性:合并期间将被替换**
endpoints 是当前 EndpointSlice 中一组唯一的端点。每个 EndpointSlice 最多可以包含 1000 个端点。
**端点是实现某 Service 的一个逻辑“后端”。**
- **endpoints.addresses** ([]string), 必需
**集合:不重复的值在合并期间会被保留**
本端点的地址。此字段的内容会根据对应的 EndpointSlice addressType 字段的值进行解释。
消费者必须根据自身能力处理不同类型的地址。此字段必须至少包含 1 个地址,最多不超过 100 个地址。
假定这些地址都是可替换的,而且客户端也可能选择只用第一个元素。参阅: https://issue.k8s.io/106267
- **endpoints.conditions** (EndpointConditions)
conditions 包含和本端点当前状态有关的信息。
**EndpointConditions 是端点的当前状况。**
- **endpoints.conditions.ready** (boolean)
ready 说明此端点已经准备好根据相关的系统映射接收流量。nil 值表示状态未知。
在大多数情况下,消费者应将这种未知状态视为就绪(ready)。
考虑到兼容性,对于正在结束状态下的端点,永远不能将 ready 设置为“true”,
除非正常的就绪行为被显式覆盖,例如当关联的服务设置了 publishNotReadyAddresses 标志时。
- **endpoints.conditions.serving** (boolean)
serving 和 ready 非常相似。唯一的不同在于,
即便某端点的状态为 Terminating 也可以设置 serving。
对于处在终止过程中的就绪端点,此状况应被设置为 “true”。
如果设置为 nil,则消费者应该以 ready 值为准。
- **endpoints.conditions.terminating** (boolean)
terminating 说明当前端点正在终止过程中。nil 值表示状态未知。
消费者应将这种未知状态视为端点并不处于终止过程中。
- **endpoints.deprecatedTopology** (map[string]string)
deprecatedTopology 包含 v1beta1 API 的拓扑信息部分。目前已经弃用了此字段,
移除 v1beta1 API 时(不早于 Kubernetes v1.24)会一起移除此字段。
此字段目前仍然可以存储值,但是不能通过 v1 API 写入数据。
向此字段写入数据的任何尝试都会被忽略,并且不会通知用户。
移除此字段后,可以在 zone 和 nodeName 字段中查看拓扑信息。
- **endpoints.hints** (EndpointHints)
hints 是关于应该如何使用某端点的提示信息。
**EndpointHints 提供应该如何使用某端点的提示信息。**
- **endpoints.hints.forZones** ([]ForZone)
**原子性:合并期间将被替换**
forZones 表示应该由哪个可用区调用此端点从才能激活拓扑感知路由。
**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 中各个端点所暴露的网络端口。每个端口的名称不得重复。
当 ports 列表为空时,表示没有已经指定暴露哪些端口。如果端口值被定义为 nil,表示暴露“所有端口”。
每个 EndpointSlice 最多可以包含 100 个端口。
**EndpointPort 是 EndpointSlice 使用的端口。**
- **ports.port** (int32)
port 表示端点的端口号。如果未指定,就不限制端口,且必须根据消费者的具体环境进行解释。
- **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/rfc7540
* '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
- **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
- **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