MultiClusterIngress v1alpha1
apiVersion: networking.karmada.io/v1alpha1
import "github.com/karmada-io/karmada/pkg/apis/networking/v1alpha1"
MultiClusterIngress
MultiClusterIngress 是允许入站连接到达后端定义的端点的规则集合。MultiClusterIngress 的结构 与 Ingress 相同,表示多集群中的 Ingress。
-
apiVersion: networking.karmada.io/v1alpha1
-
kind: MultiClusterIngress
-
metadata (ObjectMeta)
-
spec (IngressSpec)
Spec 是 MultiClusterIngress 的期望状态。
IngressSpec 描述用户希望存在的 Ingress。
-
spec.defaultBackend (IngressBackend)
defaultBackend 是负责处理与任何规则都不匹配的请求的后端。如果未指定 Rules,则必须指定 DefaultBackend。如果未设置 DefaultBackend,则与任何规则都不匹配的请求的处理将由 Ingress 控制器决定。
IngressBackend 描述给定服务和端口的所有端点。
-
spec.defaultBackend.resource (TypedLocalObjectReference)
Resource 是一个 ObjectRef 对象,指向同一命名空间内的另一个 Kubernetes 资源,将其视为 Ingress 对象。如果指定了 Resource,则不能指定 service.Name 和 service.Port。Resource 与 Service 互斥。
-
spec.defaultBackend.service (IngressServiceBackend)
Service 引用一个服务作为后端,与 Resource 互斥。
IngressServiceBackend 引用一个 Kubernetes Service 作为后端。
-
spec.defaultBackend.service.name (string),必选
Name 是引用的服务。该服务必须与 Ingress 对象在同一命名空间。
-
spec.defaultBackend.service.port (ServiceBackendPort)
所引用的服务的端口。IngressServiceBackend 需要端口名或端口号。
ServiceBackendPort 是被引用的服务端口。
-
spec.defaultBackend.service.port.name (string)
Name 是服务上的端口名称,与 Number 互斥。
-
spec.defaultBackend.service.port.number (int32)
Number 是服务上的数字形式端口号(例如 80),与 Name 互斥。
-
-
-
-
spec.ingressClassName (string)
ingressClassName 是 IngressClass 集群资源的名称。Ingress 控制器实现使用此字段来了解它们是否应该通过传递连接(控制器 - IngressClass -> Ingress 资源)为该 Ingress 资源提供服务。尽管
kubernetes.io/ingress.class注解(简单的常量名称)从未正式定义,但它被 Ingress 控制器广泛支持,以在 Ingress 控制器和 Ingress 资源之间创建直接绑定。新创建的 Ingress 资源应该优先选择使用该字段。但是,即使注解已被正式弃用,出于向后兼容的原因,Ingress 控制器仍应能够处理该注解(如果存在)。 -
spec.rules ([]IngressRule)
Atomic:将在合并期间被替换
rules 是用于配置 Ingress 的主机规则列表。如果未指定或没有规则匹配,则所有流量都将发送到默认后端。
IngressRule 表示将指定主机下的路径映射到相关后端服务的规则。传入请求首先评估主机匹配,然后路由到与匹配的 IngressRuleValue 关联的后端。
-
spec.rules.host (string)
host 是 RFC 3986 定义的网络主机的完全限定域名。请注意以下与 RFC 3986 中定义的 URI 的 host 部分的偏差:
-
不允许 IP。当前 IngressRuleValue 只能应用于父 Ingress Spec 中的 IP。
-
由于不允许使用端口,因此
:分隔符会被忽略。当前 Ingress 的端口隐式为: :80 用于 http 和 :443 用于 https
这两种情况在未来都可能发生变化。入站请求在通过 IngressRuleValue 处理之前会先进行主机匹配。如果主机未指定,Ingress 将根据指定的 IngressRuleValue 规则路由所有流量。
主机可以是“精确”的,设置为一个不含终止句点的网络主机域名(例如, foo.bar.com ),也可以是一个“通配符”,设置为以单个通配符标签为前缀的域名(例如, .foo.com )。通配符 “” 必须单独显示为第一个 DNS 标签,并且仅与单个标签匹配。不能单独使用通配符作为标签(例如,Host == "")。请求将按以下方式与主机字段匹配:- 如果主机是精确匹配的,在 http host 头等于 Host 值的情况下,请求与此规则匹配。- 如果主机是用通配符给出的,在 http host 头与通配符规则的后缀(删除第一个标签)相同的情况下,请求与此规则匹配。
-
-
spec.rules.http (HTTPIngressRuleValue)
HTTPIngressRuleValue 是指向后端的 http 选择算符列表。例如 http://<host>/<path>?<searchpart> -> 后端,其中 url 的部分对应 RFC 3986,此资源将用于匹配最后一个 “/” 之后和第一个 “?” 之前的所有内容或 “#”。
-
spec.rules.http.paths ([]HTTPIngressPath),必选
Atomic:将在合并期间被替换
paths 是一个将请求映射到后端的路径集合。
HTTPIngressPath 将路径与后端关联。与路径匹配的传入 URL 将转发到后端。
-
spec.rules.http.paths.backend (IngressBackend),必选
backend 定义将流量转发到的引用服务端点。
IngressBackend 描述给定服务和端口的所有端点。
-
spec.rules.http.paths.backend.resource (TypedLocalObjectReference)
resource 是一个 ObjectRef 对象,指向同一命名空间内的另一个 Kubernetes 资源,将其视为 Ingress 对象。如果指定了 resource,则不能指定 service.Name 和 service.Port。resource 与 Service 互斥。
-
spec.rules.http.paths.backend.service (IngressServiceBackend)
service 引用一个服务作为后端,与 Resource互斥。
IngressServiceBackend 引用一个 Kubernetes Service 作为后端。
-
spec.rules.http.paths.backend.service.name (string),必选
name 是引用的服务。该服务必须与 Ingress 对象在同一命名空间。
-
spec.rules.http.paths.backend.service.port (ServiceBackendPort)
所引用的服务的端口。IngressServiceBackend 需要端口名或端口号。
ServiceBackendPort 是被引用的服务端口。
-
spec.rules.http.paths.backend.service.port.name (string)
name 是服务上的端口名称,与 Number 互斥。
-
spec.rules.http.paths.backend.service.port.number (int32)
number 是服务上的数字形式端口号(例如 80),与 Name 互斥。
-
-
-
-
spec.rules.http.paths.pathType (string),必选
pathType 决定如何解释路径匹配。取值包括: * Exact:与 URL 路径完全匹配。* Prefix:根据按 “/” 拆分的 URL 路径前缀进行匹配。匹配是按路径元素逐个元素完成。 路径元素引用的是路径中由“/”分隔符拆分的标签列表。如果每个 p 都是 请求路径 p 的元素前缀,则请求与路径 p 匹配。请注意,如果路径的最后一个元素是请求路径中的最后一个元素的子字符串,则匹配不成功(例如,/foo/bar 匹配 /foo/bar/baz,但不匹配 /foo/barbaz)。
- ImplementationSpecific:路径匹配的解释取决于 IngressClass。 实现可以将其视为单独的路径类型,也可以将其视为前缀或确切的路径类型。
实现需要支持所有路径类型。
枚举值包括:
"Exact":与URL路径完全匹配,并区分大小写。"ImplementationSpecific":匹配取决于 IngressClass。 实现可以将其视为单独的路径类型,也可以将其视为前缀或确切的路径类型。"Prefix":根据按 “/” 拆分的 URL 路径前缀进行匹配。匹配区分大小写,是按路径元素逐个元素完成。路径元素引用的是路径中由“/”分隔符拆分的标签列表。如果每个 p 都是请求路径 p 的元素前缀,则请求与路径 p 匹配。请注意,如果路径的最后一个元素是请求路径中的最后一个元素的子字符串,则匹配不成功(例如,/foo/bar 匹配 /foo/bar/baz,但不匹配 /foo/barbaz)。如果 Ingress 规范中存在多个匹配路径,则匹配路径最长者优先。例如, - /foo/bar 不匹配 /foo/barbaz - /foo/bar 匹配 /foo/bar和/foo/bar/baz - /foo和/foo/均匹配 /foo 和 /foo/。如果仍然有两条同等的匹配路径,则匹配路径最长者(例如,/foo/)优先。
-
spec.rules.http.paths.path (string)
path 要与传入请求的路径进行匹配。目前,它可以包含 RFC 3986 定义的 URL 的常规“路径”部分所不允许的字符。路径必须以 “/” 开头,并且在 pathType 值为 Exact 或 Prefix 时必须存在。
-
-
-
-
-
spec.tls ([]IngressTLS)
Atomic:将在合并期间被替换
tls 表示 TLS 配置。目前,Ingress 仅支持一个 TLS 端口 443。如果此列表的多个成员指定了不同的主机,在实现 Ingress 的 Ingress 控制器支持 SNI的情况下,它们将根据通过 SNI TLS 扩展指定的主机名在同一端口上多路复用。
IngressTLS 描述与 Ingress 相关的传输层安全性。
-
spec.tls.hosts ([]string)
Atomic:将在合并期间被替换
hosts 是 TLS 证书中包含的主机列表。此列表中的值必须与 tlsSecret 中使用的名称匹配。如果未指定,默认为实现此 Ingress 的负载均衡控制器的通配符主机设置。
-
spec.tls.secretName (string)
secretName 是用于终止端口 443 上 TLS 通信的 secret 的名称。字段是可选的,以允许仅基于 SNI 主机名的 TLS 路由。如果监听器中的 SNI 主机与 IngressRule 使用的 “Host” 头字段冲突,则 SNI 主机用于终止,Host 头的值用于路由。
-
-
status (IngressStatus)
Status 是 MultiClusterIngress 的当前状态。
IngressStatus 描述 Ingress 的当前状态。
-
status.loadBalancer (IngressLoadBalancerStatus)
loadBalancer 包含负载均衡器的当前状态。
IngressLoadBalancerStatus 表示负载均衡器的状态。
-
status.loadBalancer.ingress ([]IngressLoadBalancerIngress)
ingress 是一个包含负载均衡器入口点的列表。
IngressLoadBalancerIngress 表示负载均衡器入口点的状态。
-
status.loadBalancer.ingress.hostname (string)
hostname 是为基于 DNS 的负载均衡器入口点所设置的主机名。
-
status.loadBalancer.ingress.ip (string)
ip 是为基于 IP 的负载均衡器入口点设置的 IP。
-
status.loadBalancer.ingress.ports ([]IngressPortStatus)
Atomic:将在合并期间被替换
ports 提供有关此 LoadBalancer 公开端口的信息。
IngressPortStatus 表示服务端口的错误情况。
-
status.loadBalancer.ingress.ports.port (int32),必选
port 是入栈端口的端口号。
-
status.loadBalancer.ingress.ports.protocol (string),必选
protocol 是入栈端口的协议。取值包括:TCP、UDP 和·SCTP。
枚举值包括:
"SCTP":SCTP协议。"TCP":TCP协议。"UDP":UDP协议。
-
status.loadBalancer.ingress.ports.error (string)
error 用来记录服务端口的问题。错误的格式应符合以下规则:
-
应在此文件中指定内置错误码,并且错误码应使用驼峰法命名。
-
特定于云提供商的错误码名称必须符合 foo.example.com/CamelCase 格式。
-
-
-
-
-
MultiClusterIngressList
MultiClusterIngressList 是 MultiClusterIngress 的集合。
-
apiVersion: networking.karmada.io/v1alpha1
-
kind: MultiClusterIngressList
-
metadata (ListMeta)
-
items ([]MultiClusterIngress),必选
Items 是 MultiClusterIngress 的列表。
操作
get:查询指定的 MultiClusterIngress
HTTP 请求
GET /apis/networking.karmada.io/v1alpha1/namespaces/{namespace}/multiclusteringresses/{name}
参数
-
name(路径参数):string,必选
name of the MultiClusterIngress
-
namespace(路径参数):string,必选
-
pretty(查询参数):string
响应
200 (MultiClusterIngress): OK
get:查询指定 MultiClusterIngress 的状态
HTTP 请求
GET /apis/networking.karmada.io/v1alpha1/namespaces/{namespace}/multiclusteringresses/{name}/status
参数
-
name(路径参数):string,必选
MultiClusterIngress 的名称
-
namespace(路径参数):string,必选
-
pretty (in query): string
响应
200 (MultiClusterIngress): OK
list:查询指定命名空间内的所有 MultiClusterIngress
HTTP 请求
GET /apis/networking.karmada.io/v1alpha1/namespaces/{namespace}/multiclusteringresses
参数
-
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 (MultiClusterIngressList): OK
list:查询所有 MultiClusterIngress
HTTP 请求
GET /apis/networking.karmada.io/v1alpha1/multiclusteringresses
参数
-
allowWatchBookmarks(查询参数):boolean
-
continue(查询参数):string
-
fieldSelector(查询参数):string
-
labelSelector(查询参数):string
-
limit(查询参数):integer
-
pretty(查询参数):string
-
resourceVersion(查询参数):string
-
resourceVersionMatch(查询参数):string
-
sendInitialEvents(查询参数):boolean
-
timeoutSeconds(查询参数):integer
-
watch(查询参数):boolean
响应
200 (MultiClusterIngressList): OK
create:创建一个 MultiClusterIngress
HTTP 请求
POST /apis/networking.karmada.io/v1alpha1/namespaces/{namespace}/multiclusteringresses
参数
-
namespace(路径参数):string,必选
-
body: MultiClusterIngress, required
-
dryRun(查询参数):string
-
fieldManager(查询参数):string
-
fieldValidation(查询参数):string
-
pretty(查询参数):string
响应
200 (MultiClusterIngress): OK
201 (MultiClusterIngress): Created
202 (MultiClusterIngress): Accepted
update:更新指定的 MultiClusterIngress
HTTP 请求
PUT /apis/networking.karmada.io/v1alpha1/namespaces/{namespace}/multiclusteringresses/{name}
参数
-
name(路径参数):string,必选
MultiClusterIngress 的名称
-
namespace(路径参数):string,必选
-
body: MultiClusterIngress,必选
-
dryRun(查询参数):string
-
fieldManager(查询参数):string
-
fieldValidation(查询参数):string
-
pretty(查询参数):string
响应
200 (MultiClusterIngress): OK
201 (MultiClusterIngress): Created
update:更新指定 MultiClusterIngress 的状态
HTTP 请求
PUT /apis/networking.karmada.io/v1alpha1/namespaces/{namespace}/multiclusteringresses/{name}/status
参数
-
name(路径参数):string,必选
MultiClusterIngress 的名称
-
namespace(路径参数):string,必选
-
body: MultiClusterIngress,必选
-
dryRun(查询参数):string
-
fieldManager(查询参数):string
-
fieldValidation(查询参数):string
-
pretty(查询参数):string
响应
200 (MultiClusterIngress): OK
201 (MultiClusterIngress): Created
patch:更新指定 MultiClusterIngress 的部分信息
HTTP 请求
PATCH /apis/networking.karmada.io/v1alpha1/namespaces/{namespace}/multiclusteringresses/{name}
参数
-
name(路径参数):string,必选
MultiClusterIngress 的名称
-
namespace(路径参数):string,必选
-
body: Patch,必选
-
dryRun(查询参数):string
-
fieldManager(查询参数):string
-
fieldValidation(查询参数):string
-
force(查询参数):boolean
-
pretty(查询参数):string
响应
200 (MultiClusterIngress): OK
201 (MultiClusterIngress): Created
patch:更新指定 MultiClusterIngress 状态的部分信息
HTTP 请求
PATCH /apis/networking.karmada.io/v1alpha1/namespaces/{namespace}/multiclusteringresses/{name}/status
参数
-
name(路径参数):string,必选
MultiClusterIngress 的名称
-
namespace(路径参数):string,必选
-
body: Patch,必选
-
dryRun(查询参数):string
-
fieldManager(查询参数):string
-
fieldValidation(查询参数):string
-
force(查询参数):boolean
-
pretty(查询参数):string
响应
200 (MultiClusterIngress): OK
201 (MultiClusterIngress): Created
delete:删除一个 MultiClusterIngress
HTTP 请求
DELETE /apis/networking.karmada.io/v1alpha1/namespaces/{namespace}/multiclusteringresses/{name}
参数
-
name(路径参数):string,必选
MultiClusterIngress 的名称
-
namespace(路径参数):string,必选
-
body: DeleteOptions
-
dryRun(查询参数):string
-
gracePeriodSeconds(查询参数):integer
-
pretty(查询参数):string
-
propagationPolicy(查询参数):string
响应
200 (Status): OK
202 (Status): Accepted
deletecollection:删除所有 MultiClusterIngress
HTTP 请求
DELETE /apis/networking.karmada.io/v1alpha1/namespaces/{namespace}/multiclusteringresses
参数
-
namespace(路径参数):string,必选
-
body: DeleteOptions
-
continue(查询参数):string
-
dryRun(查询参数):string
-
fieldSelector(查询参数):string
-
gracePeriodSeconds(查询参数):integer
-
labelSelector(查询参数):string
-
limit(查询参数):integer
-
pretty(查询参数):string
-
propagationPolicy(查询参数):string
-
resourceVersion(查询参数):string
-
resourceVersionMatch(查询参数):string
-
sendInitialEvents(查询参数):boolean
-
timeoutSeconds(查询参数):integer
响应
200 (Status): OK