在 Kubernetes 中,Ingress 是一种管理 URL 的方式。它允许将多个服务发布到同一个 IP 地址和端口上,根据请求的 URL 路径将流量路由到不同的服务上。Ingress 资源提供了一种灵活、统一的方法来管理内部服务和外部客户端之间的流量。
Ingress 资源的基本概念
在 Kubernetes 中,Ingress 资源由以下三个组件组成:
- Ingress 对象 - 定义了 Ingress 的规则和配置。
- Ingress Controller - 一种负责管理 Ingress 的组件。
- Backend 服务 - 接受经过 Ingress 路由的客户端请求。
Ingress 对象定义了一系列的规则,这些规则指定了接受客户端请求的方式以及将请求转发到哪个 Backend 服务。每个规则包含一个或多个 Ingress 路径,每个 Ingress 路径指定了一个从特定的 URL 路径开始的前缀。
在 Ingress 规则中可以指定以下属性:
- Host - 域名名称,用于匹配客户端请求的 Host 头部。
- Path - URL 路径的正则表达式模式,用于匹配客户端请求的 URL。
- Service - 一个 Kubernetes 服务,用于将客户端请求转发到 Backend 服务。
Ingress 的使用
首先,需要确保安装了一个支持 Ingress 的 Kubernetes 集群。检查命令 kubectl describe pod <ingress-controller-pod>
应该输出如下字段:
Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 1d default-scheduler Successfully assigned <ingress-controller-pod> to <node> Normal SuccessfulMountVolume 1d kubelet, <node> MountVolume.SetUp succeeded for volume "default-token-<token_id>" Normal Pulling 1d kubelet, <node> pulling image "nginx-ingress-controller:<version>" Normal Pulled 1d kubelet, <node> Successfully pulled image "nginx-ingress-controller:<version>" Normal Created 1d kubelet, <node> Created container Normal Started 1d kubelet, <node> Started container
然后,需要创建一个 Kubernetes Service,用于将客户端请求转发到后端 Pod。可以使用以下命令创建一个名为 my-service 的 Kubernetes Service:
-- -------------------- ---- ------- ----------- -- ----- ------- --------- ----- ---------- ----- ----- --------- ------ - ----- ---- ----- -- ----------- ---- --------- ---- ------
接下来,创建一个 Ingress 对象,用于将客户端请求路由到 my-service 服务。
-- -------------------- ---- ------- ----------- -------------------- ----- ------- --------- ----- ---------- ----- ------ - ----- ------------- - ---- ----- ------ - ----- - - --- --------- --------- ------ -------- -------- ----- ---------- - ----- ---------- -- ----- ----- ---- - ----
上面的 Ingress 规则将客户端请求匹配到 / URL 路径,并将其转发到 my-service 服务的 80 端口。
Ingress 的其他属性
TLS
可以使用能证书将 Ingress 设置为 HTTPS。只需要添加以下规则到 Ingress 中即可。
-- -------------------- ---- ------- ----------- -------------------- ----- ------- --------- ----- ---------- ----- ---- - ------ - ------------- - ---- ----------- ------------- - -- --- --- ------ -- ------ - ----- ------------- ----- ------ - ----- - --------- ------ -------- -------- ----- ---------- ----- ----- ----
Annotations
Ingress 规则还支持通过 Annotations 属性进行更高级的配置。例如,可以使用以下 Annotation 启用 Ingress 的 SSL 重定向。
-- -------------------- ---- ------- ----------- -------------------- ----- ------- --------- ----- ---------- ------------ ----------------------------------------------- ------ ----- ---- - ------ - ------------- ----------- ------------- ------ - ----- ------------- ----- ------ - ----- - --------- ------ -------- -------- ----- ---------- ----- ----- ----
总结
Ingress 资源是 Kubernetes 中一种非常方便的工具,它提供了一种灵活、统一的方法来管理内部服务和外部客户端之间的流量。在本文中,我介绍了 Ingress 资源的基本概念和用法,并给出了一些示例代码。希望这篇文章能够帮助您更好地理解和使用 Kubernetes 中的 Ingress 资源。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c8b8f55ad90b6d04148197