服务

服务是软件服务的命名抽象(例如,mysql),它由代理监听的本地端口(例如 3306)和确定哪些 Pod 将响应通过代理发送的请求的选择器组成。

apiVersion: v1

import "k8s.io/api/core/v1"

服务

服务是软件服务的命名抽象(例如,mysql),它由代理监听的本地端口(例如 3306)和确定哪些 Pod 将响应通过代理发送的请求的选择器组成。


ServiceSpec

ServiceSpec 描述用户在服务上创建的属性。


  • selector (map[string]string)

    将服务流量路由到具有与该选择器匹配的标签键和值的 Pod。如果为空或不存在,则假设服务具有管理其端点的外部进程,Kubernetes 不会修改该进程。仅适用于类型 ClusterIP、NodePort 和 LoadBalancer。如果类型为 ExternalName,则忽略。更多信息:https://kubernetes.ac.cn/docs/concepts/services-networking/service/

  • ports ([]ServicePort)

    修补策略:在键 port 上合并

    映射:在合并期间,将保留键 port, protocol 上的唯一值

    此服务公开的端口列表。更多信息:https://kubernetes.ac.cn/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies

    ServicePort 包含有关服务端口的信息。

    • ports.port (int32), 必填

      此服务将公开的端口。

    • ports.targetPort (IntOrString)

      要访问服务目标 Pod 上的端口的编号或名称。编号必须在 1 到 65535 之间。名称必须是 IANA_SVC_NAME。如果这是一个字符串,它将被视为目标 Pod 容器端口中的命名端口查找。如果未指定,则使用 'port' 字段的值(身份映射)。此字段对于 clusterIP=None 的服务被忽略,并且应该省略或设置为等于 'port' 字段。更多信息:https://kubernetes.ac.cn/docs/concepts/services-networking/service/#defining-a-service

      IntOrString 是一种可以保存 int32 或字符串的类型。在 JSON 或 YAML 序列化和反序列化中使用时,它会生成或使用内部类型。这允许你拥有例如可以接受名称或数字的 JSON 字段。

    • ports.protocol (string)

      此端口的 IP 协议。支持“TCP”、“UDP”和“SCTP”。默认值为 TCP。

    • ports.name (string)

      此端口在服务中的名称。这必须是 DNS_LABEL。ServiceSpec 中的所有端口必须具有唯一的名称。在考虑服务的端点时,这必须与 EndpointPort 中的 'name' 字段匹配。如果服务上只定义了一个 ServicePort,则为可选。

    • ports.nodePort (int32)

      当类型为 NodePort 或 LoadBalancer 时,此服务在每个节点上公开的端口。通常由系统分配。如果指定了值,该值在范围内且未使用,则将使用该值,否则操作将失败。如果未指定,则如果此服务需要端口,则会分配一个端口。如果在创建不需要此字段的服务时指定此字段,则创建将失败。当将服务更新为不再需要它时(例如,将类型从 NodePort 更改为 ClusterIP),此字段将被清除。更多信息:https://kubernetes.ac.cn/docs/concepts/services-networking/service/#type-nodeport

    • ports.appProtocol (string)

      此端口的应用程序协议。这被用作实现提供更丰富行为的提示,因为它们理解的协议。此字段遵循标准 Kubernetes 标签语法。有效值为

  • type (string)

    type 确定服务的公开方式。默认为 ClusterIP。有效选项是 ExternalName、ClusterIP、NodePort 和 LoadBalancer。“ClusterIP”为负载均衡到端点分配一个集群内部 IP 地址。端点由选择器确定,如果未指定,则由手动构建的 Endpoints 对象或 EndpointSlice 对象确定。如果 clusterIP 为“None”,则不会分配虚拟 IP,并且端点将作为一组端点发布,而不是虚拟 IP。“NodePort”建立在 ClusterIP 之上,并在每个节点上分配一个端口,该端口路由到与 clusterIP 相同的端点。“LoadBalancer”建立在 NodePort 之上,并创建一个外部负载均衡器(如果当前云中支持),该负载均衡器路由到与 clusterIP 相同的端点。“ExternalName”将此服务别名为指定的 externalName。其他几个字段不适用于 ExternalName 服务。更多信息:https://kubernetes.ac.cn/docs/concepts/services-networking/service/#publishing-services-service-types

  • ipFamilies ([]string)

    原子:在合并期间将被替换

    IPFamilies 是分配给此服务的 IP 族(例如 IPv4、IPv6)列表。此字段通常根据集群配置和 ipFamilyPolicy 字段自动分配。如果手动指定此字段,请求的族在集群中可用,并且 ipFamilyPolicy 允许它,则它将被使用;否则服务创建将失败。此字段是条件可变的:它允许添加或删除辅助 IP 族,但不允许更改服务的首要 IP 族。有效值为“IPv4”和“IPv6”。此字段仅适用于类型为 ClusterIP、NodePort 和 LoadBalancer 的服务,不适用于“无头”服务。当将服务更新为类型 ExternalName 时,此字段将被清除。

    此字段最多可以包含两个条目(双栈族,以任意顺序)。这些族必须与 clusterIPs 字段的值(如果指定)相对应。clusterIPs 和 ipFamilies 都受 ipFamilyPolicy 字段的控制。

  • ipFamilyPolicy (string)

    IPFamilyPolicy 表示此服务请求或需要的双栈性。如果没有提供值,则此字段将设置为 SingleStack。服务可以是“SingleStack”(单个 IP 族)、“PreferDualStack”(在双栈配置的集群上使用两个 IP 族或在单栈配置的集群上使用单个 IP 族)或“RequireDualStack”(在双栈配置的集群上使用两个 IP 族,否则失败)。ipFamilies 和 clusterIPs 字段取决于此字段的值。当将服务更新为类型 ExternalName 时,此字段将被清除。

  • clusterIP (string)

    clusterIP 是服务的 IP 地址,通常随机分配。如果手动指定了地址,该地址在范围内(根据系统配置),并且未使用,则它将分配给服务;否则服务创建将失败。此字段可能无法通过更新更改,除非 type 字段也被更改为 ExternalName(这需要此字段为空白)或 type 字段被更改为 ExternalName(在这种情况下,此字段可以根据需要指定,如上所述)。有效值为“None”、空字符串("")或有效的 IP 地址。将其设置为“None”将创建一个“无头服务”(没有虚拟 IP),这在首选直接端点连接并且不需要代理时很有用。仅适用于类型 ClusterIP、NodePort 和 LoadBalancer。如果在创建类型为 ExternalName 的服务时指定此字段,则创建将失败。当将服务更新为类型 ExternalName 时,此字段将被清除。更多信息:https://kubernetes.ac.cn/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies

  • clusterIPs ([]string)

    原子:在合并期间将被替换

    ClusterIPs 是分配给此服务的 IP 地址列表,通常随机分配。如果手动指定了地址,该地址在范围内(根据系统配置),并且未使用,则它将分配给服务;否则服务创建将失败。此字段可能无法通过更新更改,除非 type 字段也被更改为 ExternalName(这需要此字段为空白)或 type 字段被更改为 ExternalName(在这种情况下,此字段可以根据需要指定,如上所述)。有效值为“None”、空字符串("")或有效的 IP 地址。将其设置为“None”将创建一个“无头服务”(没有虚拟 IP),这在首选直接端点连接并且不需要代理时很有用。仅适用于类型 ClusterIP、NodePort 和 LoadBalancer。如果在创建类型为 ExternalName 的服务时指定此字段,则创建将失败。当将服务更新为类型 ExternalName 时,此字段将被清除。如果未指定此字段,它将从 clusterIP 字段初始化。如果指定了此字段,客户端必须确保 clusterIPs[0] 和 clusterIP 具有相同的值。

    此字段最多可以包含两个条目(双栈 IP,以任意顺序)。这些 IP 必须与 ipFamilies 字段的值相对应。clusterIPs 和 ipFamilies 都受 ipFamilyPolicy 字段的控制。更多信息:https://kubernetes.ac.cn/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies

  • externalIPs ([]string)

    externalIPs 是一个 IP 地址列表,集群中的节点将为此服务接受流量。这些 IP 未由 Kubernetes 管理。用户负责确保流量到达具有此 IP 的节点。一个常见的例子是外部负载均衡器,它们不是 Kubernetes 系统的一部分。

  • sessionAffinity (string)

    支持“ClientIP”和“None”。用于维护会话亲缘性。启用基于客户端 IP 的会话亲缘性。必须是 ClientIP 或 None。默认为 None。更多信息:https://kubernetes.ac.cn/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies

  • loadBalancerIP (字符串)

    仅适用于服务类型:LoadBalancer。此功能取决于底层云提供商在创建负载均衡器时是否支持指定 loadBalancerIP。如果云提供商不支持此功能,则会忽略此字段。已弃用:此字段定义不足,其含义在不同实现之间会有所不同。使用它不可移植,并且可能不支持双栈。建议用户在可用时使用特定于实现的注释。

  • loadBalancerSourceRanges ([]字符串)

    如果指定且平台支持,这将限制通过云提供商负载均衡器的流量,这些流量将被限制为指定的客户端 IP。如果云提供商不支持此功能,则会忽略此字段。“更多信息:https://kubernetes.ac.cn/docs/tasks/access-application-cluster/create-external-load-balancer/

  • loadBalancerClass (字符串)

    loadBalancerClass 是此服务所属的负载均衡器实现的类别。如果指定,此字段的值必须是标签样式的标识符,可以选择带前缀,例如“internal-vip”或“example.com/internal-vip”。无前缀名称保留给最终用户。此字段只能在服务类型为 'LoadBalancer' 时设置。如果未设置,则使用默认的负载均衡器实现,目前通常是通过云提供商集成完成的,但应适用于任何默认实现。如果设置,则假定负载均衡器实现正在监视具有匹配类别的服务。任何默认负载均衡器实现(例如云提供商)都应忽略设置此字段的服务。此字段只能在创建或更新服务类型为 'LoadBalancer' 时设置。一旦设置,就不能更改。当服务更新为非 'LoadBalancer' 类型时,此字段将被清除。

  • externalName (字符串)

    externalName 是发现机制将返回的外部引用,作为此服务的别名(例如 DNS CNAME 记录)。不会涉及任何代理。必须是小写 RFC-1123 主机名 (https://tools.ietf.org/html/rfc1123),并且需要 type 为“ExternalName”。

  • externalTrafficPolicy (字符串)

    externalTrafficPolicy 描述节点如何分配它们在服务的一个“面向外部”地址(NodePorts、ExternalIPs 和 LoadBalancer IPs)上接收的服务流量。如果设置为“Local”,代理将以一种假设外部负载均衡器将负责在节点之间平衡服务流量的方式配置服务,因此每个节点将仅将流量传递到服务的节点本地端点,而不会伪造客户端源 IP。(错误地发送到没有端点的节点的流量将被丢弃。)默认值“Cluster”使用将流量均匀路由到所有端点的标准行为(可能会根据拓扑结构和其他功能进行修改)。请注意,从集群内部发送到 External IP 或 LoadBalancer IP 的流量将始终获得“Cluster”语义,但从集群内部发送到 NodePort 的客户端可能需要在选择节点时考虑流量策略。

  • internalTrafficPolicy (字符串)

    InternalTrafficPolicy 描述节点如何分配它们在 ClusterIP 上接收的服务流量。如果设置为“Local”,代理将假设 pod 仅希望与同一节点上服务的端点通信,如果不存在本地端点,则会丢弃流量。默认值“Cluster”使用将流量均匀路由到所有端点的标准行为(可能会根据拓扑结构和其他功能进行修改)。

  • healthCheckNodePort (int32)

    healthCheckNodePort 指定服务的健康检查 NodePort。这仅适用于类型设置为 LoadBalancer 且 externalTrafficPolicy 设置为 Local 时。如果指定了值,该值在范围内且未被使用,它将被使用。如果未指定,将自动分配一个值。外部系统(例如负载均衡器)可以使用此端口来确定给定节点是否持有此服务的端点。如果在创建不需要它的服务时指定了此字段,则创建将失败。当更新服务不再需要它时(例如更改类型),此字段将被清除。此字段一旦设置,就不能更新。

  • publishNotReadyAddresses (布尔值)

    publishNotReadyAddresses 指示任何处理此服务端点的代理应该忽略任何就绪/未就绪的指示。设置此字段的主要用例是,有状态集的无头服务传播其 Pod 的 SRV DNS 记录以进行对等发现。为服务生成端点和端点切片资源的 Kubernetes 控制器将其解释为意味着所有端点都被视为“就绪”,即使 Pod 本身不是也一样。仅通过端点或端点切片资源使用 Kubernetes 生成的端点的代理可以安全地假设这种行为。

  • sessionAffinityConfig (SessionAffinityConfig)

    sessionAffinityConfig 包含会话亲和性的配置。

    SessionAffinityConfig 表示会话亲和性的配置。

    • sessionAffinityConfig.clientIP (ClientIPConfig)

      clientIP 包含基于客户端 IP 的会话亲和性的配置。

      ClientIPConfig 表示基于客户端 IP 的会话亲和性的配置。

      • sessionAffinityConfig.clientIP.timeoutSeconds (int32)

        timeoutSeconds 指定 ClientIP 类型会话粘性时间(以秒为单位)。如果 ServiceAffinity ==“ClientIP”,则该值必须 >0 && <=86400(1 天)。默认值为 10800(3 小时)。

  • allocateLoadBalancerNodePorts (布尔值)

    allocateLoadBalancerNodePorts 定义是否为类型为 LoadBalancer 的服务自动分配 NodePorts。默认值为“true”。如果集群负载均衡器不依赖于 NodePorts,则可以将其设置为“false”。如果调用方请求特定的 NodePorts(通过指定一个值),这些请求将被尊重,无论此字段如何。此字段只能为类型为 LoadBalancer 的服务设置,如果类型更改为任何其他类型,将被清除。

ServiceStatus

ServiceStatus 表示服务的当前状态。


  • conditions ([]Condition)

    补丁策略:根据键 type 合并

    映射:在合并期间,将保留键类型上的唯一值

    当前服务状态

    Condition 包含有关此 API 资源当前状态的某个方面的详细信息。

    • conditions.lastTransitionTime (Time), 必需

      lastTransitionTime 是条件从一个状态转换为另一个状态的最后时间。这应该是底层条件更改的时间。如果不知道,那么使用 API 字段更改的时间是可以接受的。

      Time 是 time.Time 的包装器,支持正确地编组到 YAML 和 JSON 中。为 time 包提供的许多工厂方法提供了包装器。

    • conditions.message (字符串), 必需

      message 是一个人类可读的消息,指示有关转换的详细信息。这可能是一个空字符串。

    • conditions.reason (字符串), 必需

      reason 包含一个程序化标识符,指示条件最后转换的原因。特定条件类型的生产者可以为此字段定义预期值和含义,以及值是否被视为保证的 API。该值应该是驼峰式大小写字符串。此字段不能为空。

    • conditions.status (字符串), 必需

      条件的状态,为 True、False、Unknown 之一。

    • conditions.type (字符串), 必需

      条件的类型,为驼峰式大小写或 foo.example.com/CamelCase。

    • conditions.observedGeneration (int64)

      observedGeneration 表示条件基于其设置的 .metadata.generation。例如,如果 .metadata.generation 当前为 12,但 .status.conditions[x].observedGeneration 为 9,则该条件相对于实例的当前状态已过时。

  • loadBalancer (LoadBalancerStatus)

    LoadBalancer 包含负载均衡器的当前状态(如果存在)。

    LoadBalancerStatus 表示负载均衡器的状态。

    • loadBalancer.ingress ([]LoadBalancerIngress)

      Ingress 是一个列表,包含负载均衡器的入口点。打算用于服务的流量应发送到这些入口点。

      LoadBalancerIngress 表示负载均衡器入口点的状态:打算用于服务的流量应发送到入口点。

      • loadBalancer.ingress.hostname (字符串)

        Hostname 设置为基于 DNS 的负载均衡器入口点(通常是 AWS 负载均衡器)

      • loadBalancer.ingress.ip (字符串)

        IP 设置为基于 IP 的负载均衡器入口点(通常是 GCE 或 OpenStack 负载均衡器)

      • loadBalancer.ingress.ipMode (字符串)

        IPMode 指定负载均衡器 IP 的行为方式,并且只能在指定 ip 字段时指定。将其设置为“VIP”表示流量被传递到目的地设置为负载均衡器 IP 和端口的节点。将其设置为“Proxy”表示流量被传递到目的地设置为节点 IP 和节点端口或 pod IP 和端口的节点或 pod。服务实现可以使用此信息调整流量路由。

      • loadBalancer.ingress.ports ([]PortStatus)

        原子:在合并期间将被替换

        Ports 是服务端口记录的列表。如果使用,服务中定义的每个端口都应在此处包含一个条目

        **

        • loadBalancer.ingress.ports.port (int32), 必需

          Port 是此处记录状态的服务端口的端口号

        • loadBalancer.ingress.ports.protocol (字符串), 必需

          Protocol 是此处记录状态的服务端口的协议。支持的值为:“TCP”、“UDP”、“SCTP”

        • loadBalancer.ingress.ports.error (字符串)

          Error 用于记录服务端口的问题。错误的格式应符合以下规则:- 内置错误值应在此文件中指定,这些错误值应使用驼峰式大小写名称

          • 特定于云提供商的错误值必须具有符合 foo.example.com/CamelCase 格式的名称。

ServiceList

ServiceList 持有一个服务列表。


操作


get 读取指定的服务

HTTP 请求

GET /api/v1/namespaces/{namespace}/services/{name}

参数

  • name (在路径中): 字符串, 必需

    服务的名称

  • namespace (在路径中): 字符串, 必需

    命名空间

  • pretty (在查询中): 字符串

    pretty

响应

200 (Service): OK

401: 未经授权

get 读取指定服务的狀態

HTTP 请求

GET /api/v1/namespaces/{namespace}/services/{name}/status

参数

  • name (在路径中): 字符串, 必需

    服务的名称

  • namespace (在路径中): 字符串, 必需

    命名空间

  • pretty (在查询中): 字符串

    pretty

响应

200 (Service): OK

401: 未经授权

list 列出或观察类型为 Service 的对象

HTTP 请求

GET /api/v1/namespaces/{namespace}/services

参数

响应

200 (ServiceList): OK

401: 未经授权

list 列出或观察类型为 Service 的对象

HTTP 请求

GET /api/v1/services

参数

响应

200 (ServiceList): OK

401: 未经授权

create 创建一个服务

HTTP 请求

POST /api/v1/namespaces/{namespace}/services

参数

响应

200 (Service): OK

201 (服务): 已创建

202 (服务): 已接受

401: 未经授权

更新 替换指定的 Service

HTTP 请求

PUT /api/v1/namespaces/{namespace}/services/{name}

参数

  • name (在路径中): 字符串, 必需

    服务的名称

  • namespace (在路径中): 字符串, 必需

    命名空间

  • body: Service, 必需

  • dryRun (在查询中): 字符串

    dryRun

  • fieldManager (在查询中): 字符串

    fieldManager

  • fieldValidation (在查询中): 字符串

    字段验证

  • pretty (在查询中): 字符串

    pretty

响应

200 (Service): OK

201 (服务): 已创建

401: 未经授权

更新 替换指定 Service 的状态

HTTP 请求

PUT /api/v1/namespaces/{namespace}/services/{name}/status

参数

  • name (在路径中): 字符串, 必需

    服务的名称

  • namespace (在路径中): 字符串, 必需

    命名空间

  • body: Service, 必需

  • dryRun (在查询中): 字符串

    dryRun

  • fieldManager (在查询中): 字符串

    fieldManager

  • fieldValidation (在查询中): 字符串

    字段验证

  • pretty (在查询中): 字符串

    pretty

响应

200 (Service): OK

201 (服务): 已创建

401: 未经授权

修补 部分更新指定的 Service

HTTP 请求

PATCH /api/v1/namespaces/{namespace}/services/{name}

参数

  • name (在路径中): 字符串, 必需

    服务的名称

  • namespace (在路径中): 字符串, 必需

    命名空间

  • 主体: 补丁,必需

  • dryRun (在查询中): 字符串

    dryRun

  • fieldManager (在查询中): 字符串

    fieldManager

  • fieldValidation (在查询中): 字符串

    字段验证

  • force (在查询中): 布尔值

    force

  • pretty (在查询中): 字符串

    pretty

响应

200 (Service): OK

201 (服务): 已创建

401: 未经授权

修补 部分更新指定 Service 的状态

HTTP 请求

PATCH /api/v1/namespaces/{namespace}/services/{name}/status

参数

  • name (在路径中): 字符串, 必需

    服务的名称

  • namespace (在路径中): 字符串, 必需

    命名空间

  • 主体: 补丁,必需

  • dryRun (在查询中): 字符串

    dryRun

  • fieldManager (在查询中): 字符串

    fieldManager

  • fieldValidation (在查询中): 字符串

    字段验证

  • force (在查询中): 布尔值

    force

  • pretty (在查询中): 字符串

    pretty

响应

200 (Service): OK

201 (服务): 已创建

401: 未经授权

删除 删除一个 Service

HTTP 请求

DELETE /api/v1/namespaces/{namespace}/services/{name}

参数

响应

200 (Service): OK

202 (服务): 已接受

401: 未经授权

删除集合 删除 Service 集合

HTTP 请求

DELETE /api/v1/namespaces/{namespace}/services

参数

响应

200 (状态): 正常

401: 未经授权

此页面是自动生成的。

如果您要报告有关此页面的问题,请在您的问题描述中提及该页面是自动生成的。 修复可能需要在 Kubernetes 项目的其他地方进行。

上次修改时间:2023 年 7 月 26 日下午 1:45 PST: 生成的内容 (1e2ed88743)