在 Kubernetes 中,Ingress 是一种资源对象,用于管理入站网络流量。它允许管理员定义 HTTP 和 HTTPS 路由规则,从而实现 HTTP 请求的负载均衡和路由服务。Ingress 对象在 Kubernetes 中作为集群的内部网络之前暴露了一个路由器。在本文中,我们将介绍如何在 Kubernetes 中使用 Ingress 对象,以实现 HTTP 路由和负载均衡。
Ingress 对象基础
在使用 Ingress 对象之前,需要确保 Kubernetes 集群已经启用了 Ingress 控制器。Ingress 控制器是一种组件,负责设置网络端口,监听网络流量,并将流量路由到相应的服务。例如,您可以使用 NGINX Ingress Controller 来管理您的 Ingress 对象。
当您有一个可用的 Ingress 控制器后,您可以开始创建 Ingress 对象。在 Kubernetes 中,Ingress 是一个 Kubernetes 资源,它允许管理员定义 HTTP 和 HTTPS 路由规则,从而实现 HTTP 请求的负载均衡和路由服务。通过 Ingress 对象,您可以配置如下内容:
- Ingress 路由规则
- 监听端口
- 传输协议(HTTP 或者 HTTPS)
- TLS 证书配置
让我们看一个简单的示例:
-- -------------------- ---- ------- ----------- -------------------- ----- ------- --------- ----- --------- ----- ------ - ----- ----------- ----- ------ - ----- ---- --------- ------ -------- -------- ----- -------- ----- ----- ---- - ----- ---- --------- ------ -------- -------- ----- ------- ----- ----- ----
在此示例中,我们创建了一个名为 “webserver” 的 Ingress 对象,将会在 Kubernetes 网络上监听请求。它指定了一个名为 “example.com” 的主机名,其中包含了两个 HTTP 路径规则,一个为 “/foo”,另一个为 “/bar”。每个路径都指向一个不同的后端服务,每个服务都有自己的名称和相应的端口号。
路由规则
Ingress 路由规则定义了应该如何路由网络流量。路由规则由主机、路径和后端服务组成。让我们来更详细地说明一下这些组成部分。
主机
主机是指网络流量应该路由到的域名或 IP 地址。 Ingress 可以使用主机名(例如 www.example.com)或 IP 地址(例如 192.0.2.1)作为主机。
路径
路径是指应该被路由到的 URI。路径通常由一个斜杠和任意数量的 URI 组成。例如,如果您想将流量路由到 /api/v1/foo,则路径为 /api/v1/foo。
路径可以使用以下类型之一:
- Exact:要完全匹配指定的路径,使用 /path。
- Prefix:要前缀匹配指定的路径,使用 /path/。例如,/api 将匹配 /api/foo 和 /api/bar。
- Implementation-specific regex:要使用正则表达式匹配指定的路径,使用正则表达式的语法。例如,如果您希望将 xyz123、xyz789 和 xyz_xyz 匹配到同一路径,则可以使用 /xyz(\d{3}|_\w{3})。
后端服务
每个 Ingress 路由规则都应该指向一个后端服务,以便将网络流量路由到服务。后端服务应该是使用同一 Kubernetes 集群中的 Kubernetes Service 实现的。这使得您可以将流量负载均衡到不同的服务中,从而提高系统的可伸缩性和可用性。
在上面的示例中,我们有两个后端服务:“frontend” 和 “backend”,它们都在 Kubernetes 网络中被定义,并且在 Ingress 对象中引用。
TLS 配置
如果您想为入站网络流量启用 SSL/TLS 加密,可以使用 Ingress 对象来配置 SSL/TLS 证书。要使用 TLS,您需要创建一个 TLS 证书,该证书由您自己颁发,或者由一个受信任的 Certificate Authority 签发(例如 Let's Encrypt)。
让我们来看一个具有 TLS 配置的示例:
-- -------------------- ---- ------- ----------- -------------------- ----- ------- --------- ----- ------------- ----- ---- - ------ - ----------- ----------- --------------- ------ - ----- ----------- ----- ------ - ----- ---- --------- ------ -------- -------- ----- -------- ----- ----- ----
在此示例中,我们首先定义了一个包含 TLS 配置的 Ingress 对象。它使用名为 “example.com” 的主机名和一个名为 “example-com-tls” 的 SSL/TLS 证书密钥。该证书是一个 Kubernetes Secret 对象,其中包含 SSL/TLS 证书和相应的私钥。
Ingress Controller
如上所述,Ingress 控制器负责设置网络端口,监听网络流量,并将流量路由到相应的服务。下面是一些流行的 Ingress 控制器:
要添加 Ingress 控制器,请在 Kubernetes 集群中使用 Helm,然后使用 yaml 文件来定义您的 Ingress 对象池。接下来,使用以下命令部署 Ingress 控制器:
helm install NAME CHART [flags]
以下示例使用 Helm 部署 NGINX Ingress Controller:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm repo update helm install nginx ingress-nginx/ingress-nginx
结语
在本文中,我们介绍了使用 Kubernetes Ingress 对象来实现 HTTP 路由和负载均衡的方法。我们了解了 Ingress 路由规则、主机、路径和后端服务之间的关系,以及如何使用 Ingress 对象配置 SSL/TLS 加密。最后,我们提供了一些流行的 Ingress 控制器供参考,并说明了如何使用 Helm 部署它们。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67c2716f314edc2684bb5dc6