Ingress

Ingress 是一组规则的集合,它允许入站连接到达由后端定义的端点。

apiVersion: networking.k8s.io/v1

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

Ingress

Ingress 是一组规则的集合,它允许入站连接到达由后端定义的端点。Ingress 可以配置为给 Service 提供外部可访问的 URL、负载均衡流量、终止 SSL、提供基于名称的虚拟主机等。


IngressSpec

IngressSpec 描述了用户期望存在的 Ingress。


  • defaultBackend (IngressBackend)

    defaultBackend 是用于处理不匹配任何规则的请求的后端。如果未指定 Rules,则必须指定 DefaultBackend。如果未设置 DefaultBackend,则如何处理不匹配任何规则的请求将取决于 Ingress 控制器。

  • ingressClassName (string)

    ingressClassName 是一个 IngressClass 集群资源的名称。Ingress 控制器的实现使用此字段通过传递连接(控制器 -> IngressClass -> Ingress 资源)来判断它们是否应该服务此 Ingress 资源。尽管 kubernetes.io/ingress.class 注解(简单的常量名)从未被正式定义,但 Ingress 控制器广泛支持它,以在 Ingress 控制器和 Ingress 资源之间创建直接绑定。新创建的 Ingress 资源应优先使用此字段。然而,即使该注解已正式弃用,出于向后兼容性原因,如果该注解存在,Ingress 控制器仍应尊重它。

  • rules ([]IngressRule)

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

    rules 是用于配置 Ingress 的主机规则列表。如果未指定或没有规则匹配,所有流量都将发送到默认后端。

    IngressRule 表示将指定主机下的路径映射到相关后端 Service 的规则。首先对入站请求进行主机匹配评估,然后路由到与匹配的 IngressRuleValue 关联的后端。

    • rules.host (string)

      host 是网络主机的完全限定域名,定义见 RFC 3986。请注意与 RFC 3986 中定义的 URI 的“host”部分的一些不同之处:1. 不允许使用 IP。当前 IngressRuleValue 只能应用于父 Ingress 的 Spec 中的 IP。2. 不支持 : 分隔符,因为不允许指定端口。当前 Ingress 的 http 端口默认为 :80,https 端口默认为 :443。这两个默认端口将来可能会改变。在 IngressRuleValue 匹配之前,会先对入站请求进行主机匹配。如果未指定主机,则 Ingress 将根据指定的 IngressRuleValue 路由所有流量。

      host 可以是“精确”的域名(即不带末尾点的网络主机域名,例如 "foo.bar.com"),也可以是“通配符”域名(即以单个通配符标签为前缀的域名,例如 ".foo.com")。通配符字符 '' 必须单独作为第一个 DNS 标签出现,且只匹配单个标签。你不能仅使用通配符标签本身(例如 Host == "*")。请求将按照以下方式与 Host 字段进行匹配:1. 如果 host 是精确的,则当 http host 头部等于 Host 时,请求匹配此规则。2. 如果 host 是通配符,则当 http host 头部等于通配符规则的后缀(移除第一个标签)时,请求匹配此规则。

    • rules.http (HTTPIngressRuleValue)

      HTTPIngressRuleValue 是指向后端的 http 选择器列表。在示例 http:///? -> backend 中,URL 的各部分对应 RFC 3986,此资源将用于匹配最后一个 '/' 之后和第一个 '?' 或 '#' 之前的所有内容。

      • rules.http.paths ([]HTTPIngressPath), required

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

        paths 是一组路径集合,将请求映射到后端。

        HTTPIngressPath 将路径与后端关联。匹配该路径的入站 URL 将被转发到后端。

        • rules.http.paths.backend (IngressBackend), required

          backend 定义了引用的 Service 端点,流量将转发到该端点。

        • rules.http.paths.pathType (string), required

          pathType 决定了路径匹配的解释方式。PathType 可以是以下值之一:* Exact:精确匹配 URL 路径。* Prefix:基于按 '/' 分割的 URL 路径前缀进行匹配。匹配是基于路径元素的逐个匹配。路径元素是指路径中按 '/' 分隔的标签列表。如果请求路径的每个路径元素都是给定路径 p 的前缀,则请求匹配路径 p。注意,如果路径的最后一个元素是请求路径中最后一个元素的子串,则不匹配(例如,/foo/bar 匹配 /foo/bar/baz,但不匹配 /foo/barbaz)。

          • ImplementationSpecific:路径匹配的解释取决于 IngressClass。实现可以将其视为一个独立的 PathType,或者与 Prefix 或 Exact 路径类型完全相同。实现需要支持所有路径类型。
        • rules.http.paths.path (string)

          path 用于匹配入站请求的路径。目前它可能包含 RFC 3986 定义的 URL 传统“path”部分中不允许的字符。路径必须以 '/' 开头,并且当 PathType 的值为 "Exact" 或 "Prefix" 时必须存在。

  • tls ([]IngressTLS)

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

    tls 表示 TLS 配置。目前 Ingress 只支持一个 TLS 端口,即 443。如果此列表中的多个成员指定了不同的主机,它们将根据 SNI TLS 扩展指定的主机名在同一个端口上进行多路复用,前提是实现该 Ingress 的 Ingress 控制器支持 SNI。

    IngressTLS 描述了与 Ingress 关联的传输层安全性。

    • tls.hosts ([]string)

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

      hosts 是包含在 TLS 证书中的主机列表。此列表中的值必须与 tlsSecret 中使用的名称匹配。如果未指定,则默认为实现此 Ingress 的负载均衡器控制器的通配符主机设置。

    • tls.secretName (string)

      secretName 是用于终止端口 443 上的 TLS 流量的 Secret 的名称。此字段是可选的,以便仅基于 SNI 主机名进行 TLS 路由。如果在监听器中的 SNI 主机与 IngressRule 使用的 "Host" 头部字段冲突,则使用 SNI 主机进行终止,并使用 "Host" 头部的值进行路由。

IngressBackend

IngressBackend 描述了给定 Service 和端口的所有端点。


  • resource (TypedLocalObjectReference)

    resource 是一个指向 Ingress 对象命名空间中另一个 Kubernetes 资源的 ObjectRef。如果指定了 resource,则不能指定 service.Name 和 service.Port。此设置与 "Service" 互斥。

  • service (IngressServiceBackend)

    service 引用了一个 Service 作为后端。此设置与 "Resource" 互斥。

    IngressServiceBackend 将 Kubernetes Service 作为后端引用。

    • service.name (string), required

      name 是引用的 Service。该 Service 必须与 Ingress 对象位于同一个命名空间中。

    • service.port (ServiceBackendPort)

      引用的 Service 的端口。对于 IngressServiceBackend,端口名称或端口号是必需的。

      ServiceBackendPort 是被引用的 Service 端口。

      • service.port.name (string)

        name 是 Service 上端口的名称。此设置与 "Number" 互斥。

      • service.port.number (int32)

        number 是 Service 上的数字端口号(例如 80)。此设置与 "Name" 互斥。

IngressStatus

IngressStatus 描述 Ingress 的当前状态。


  • loadBalancer (IngressLoadBalancerStatus)

    loadBalancer 包含负载均衡器的当前状态。

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

    • loadBalancer.ingress ([]IngressLoadBalancerIngress)

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

      ingress 是包含负载均衡器入口点(ingress points)的列表。

      IngressLoadBalancerIngress 表示负载均衡器入口点(ingress point)的状态。

      • loadBalancer.ingress.hostname (string)

        对于基于 DNS 的负载均衡器入口点,会设置 hostname。

      • loadBalancer.ingress.ip (string)

        对于基于 IP 的负载均衡器入口点,会设置 ip。

      • loadBalancer.ingress.ports ([]IngressPortStatus)

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

        ports 提供了有关此负载均衡器暴露的端口的信息。

        IngressPortStatus 表示 Service 端口的错误情况

        • loadBalancer.ingress.ports.port (int32), required

          port 是入口端口的端口号。

        • loadBalancer.ingress.ports.protocol (string), required

          protocol 是入口端口的协议。支持的值包括:"TCP", "UDP", "SCTP"。

        • loadBalancer.ingress.ports.error (string)

          error 用于记录 Service 端口的问题。错误格式应符合以下规则:- 内置错误值应在此文件中指定,并且应使用 CamelCase 名称。

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

IngressList

IngressList 是 Ingress 的集合。


操作


get 读取指定的 Ingress

HTTP 请求

GET /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses/{name}

参数

  • name (in path): string, required

    Ingress 的名称

  • namespace (in path): string, required

    命名空间

  • pretty (in query): string

    pretty

响应

200 (Ingress): OK

401: Unauthorized

get 读取指定 Ingress 的状态

HTTP 请求

GET /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses/{name}/status

参数

  • name (in path): string, required

    Ingress 的名称

  • namespace (in path): string, required

    命名空间

  • pretty (in query): string

    pretty

响应

200 (Ingress): OK

401: Unauthorized

list 列出或监视类型为 Ingress 的对象

HTTP 请求

GET /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses

参数

响应

200 (IngressList): OK

401: Unauthorized

list 列出或监视类型为 Ingress 的对象

HTTP 请求

GET /apis/networking.k8s.io/v1/ingresses

参数

响应

200 (IngressList): OK

401: Unauthorized

create 创建一个 Ingress

HTTP 请求

POST /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses

参数

响应

200 (Ingress): OK

201 (Ingress): Created

202 (Ingress): Accepted

401: Unauthorized

update 替换指定的 Ingress

HTTP 请求

PUT /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses/{name}

参数

响应

200 (Ingress): OK

201 (Ingress): Created

401: Unauthorized

update 替换指定 Ingress 的状态

HTTP 请求

PUT /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses/{name}/status

参数

响应

200 (Ingress): OK

201 (Ingress): Created

401: Unauthorized

patch 部分更新指定的 Ingress

HTTP 请求

PATCH /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses/{name}

参数

响应

200 (Ingress): OK

201 (Ingress): Created

401: Unauthorized

patch 部分更新指定 Ingress 的状态

HTTP 请求

PATCH /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses/{name}/status

参数

响应

200 (Ingress): OK

201 (Ingress): Created

401: Unauthorized

delete 删除一个 Ingress

HTTP 请求

DELETE /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses/{name}

参数

响应

200 (Status): OK

202 (Status): Accepted

401: Unauthorized

deletecollection 删除 Ingress 的集合

HTTP 请求

DELETE /apis/networking.k8s.io/v1/namespaces/{namespace}/ingresses

参数

响应

200 (Status): OK

401: Unauthorized

此页面是自动生成的。

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

最后修改于 2025 年 4 月 9 日太平洋时间下午 6:36:更新 v1.32 的 API 参考文档 (a3b579d035)