ingress Ingress 是 Kubernetes 中的一个 API 对象,用于将外部的 HTTP 和 HTTPS 流量路由到集群内部的服务。它充当了集群和外部世界之间的入口点,可以实现负载均衡、TLS 终止(通过 HTTPS 支持)和基于域名的路由等功能。
使用 Ingress,您可以定义一组规则来指定流量如何路由到不同的服务。这些规则通常基于域名、路径或其他 HTTP 请求标头进行匹配,并将流量转发到相应的后端服务。它可以与不同的 Ingress 控制器(例如 Nginx Ingress Controller、Traefik、HAProxy 等)配合使用,具体取决于您的选择和集群环境。
下面是一个示例 Ingress 资源清单文件的简单示例:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /app1
pathType: Prefix
backend:
service:
name: app1-service
port:
number: 80
- path: /app2
pathType: Prefix
backend:
service:
name: app2-service
port:
number: 80
在上述示例中,定义了一个名为 example-ingress 的 Ingress 对象。它使用域名 example.com 来匹配流量,并根据路径将流量路由到不同的后端服务。具体来说,路径以 /app1 开头的流量将被转发到名为 app1-service 的服务,路径以 /app2 开头的流量将被转发到名为 app2-service 的服务。
要使用 Ingress,通常需要以下几个步骤:
部署一个 Ingress 控制器:选择并部署适合您集群的 Ingress 控制器。这些控制器负责实际处理流量的转发和路由。
创建 Ingress 资源对象:编写一个包含 Ingress 规则的清单文件,并使用 kubectl 命令或其他 Kubernetes 工具将其应用到集群中。
配置 DNS:确保您的域名指向正确的 IP 地址,以便流量能够到达 Kubernetes 集群。
证书管理(可选):如果您需要启用 HTTPS 支持,您可能需要配置和管理 TLS 证书。这可以通过 Ingress 对象的注释或其他方式来完成。
请注意,Ingress 是一个 Kubernetes 的扩展 API 对象,因此要使用它,您的集群必须支持该 API 版本,并且已经部署了相应的 Ingress 控制器。
Kubernetes Ingress(Kubernetes Ingress Controller)是用于管理和配置Kubernetes集群中应用程序路由的一种资源。Ingress定义了从集群外部到集群内服务的规则,允许外部流量访问集群中的服务。这有助于将入站流量路由到不同的服务,实现灵活的应用程序访问和负载均衡。
以下是一些关于Kubernetes Ingress的关键概念和特性:
-
Ingress 资源: 在Kubernetes中,Ingress是一种API对象,用于定义外部流量如何被路由到集群中的服务。它包含了规则,指定了哪些服务应该处理特定的路径或主机名。
-
Ingress Controller: Ingress资源需要一个Ingress Controller来实际处理和应用规则。Ingress Controller是一种Kubernetes应用程序,它根据Ingress资源的定义来配置负载均衡器或其他方式,以确保外部流量被正确路由到内部服务。
-
规则和路径: Ingress规则定义了如何处理特定的域名或路径。例如,可以将
/app1
的流量路由到一个服务,而将/app2
的流量路由到另一个服务。 -
TLS 加密: Ingress支持通过TLS(传输层安全性)进行加密,以保护传输的数据。可以将TLS证书与Ingress关联,以启用安全的HTTPS通信。
-
后端服务: Ingress将外部流量路由到集群中的后端服务。这些服务可以是Kubernetes服务、NodePort服务或者其他负载均衡的服务。
-
Host 路由: Ingress可以根据域名进行路由,使得可以在同一集群上托管多个域名,并将流量路由到不同的服务。
-
路径匹配: 通过Ingress规则,可以定义路径匹配规则,将特定路径的流量路由到相应的服务。这提供了细粒度的流量控制。
以下是一个简化的Ingress资源的例子:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /app1
pathType: Prefix
backend:
service:
name: app1-service
port:
number: 80
- path: /app2
pathType: Prefix
backend:
service:
name: app2-service
port:
number: 80
tls:
- hosts:
- myapp.example.com
secretName: myapp-tls-secret
这个例子定义了一个Ingress,将myapp.example.com/app1
的流量路由到app1-service
,将myapp.example.com/app2
的流量路由到app2-service
。同时,还配置了TLS加密。这是一个简单的例子,实际使用中,Ingress可以根据需求配置更复杂的路由规则和安全设置。