Kubernetes 是现代云原生应用的标准平台,而 Ingress 则是 Kubernetes 上的流量管理器。在 Kubernetes 中,通过 Ingress 控制外部流量的路由,能够简化应用的部署和管理。这篇文章将深入介绍 Kubernetes 中的 Ingress,带领读者从入门到专业,探索 Ingress 阶梯之路。
Ingress 简介
Ingress 是 Kubernetes 中的一种 API 资源,它提供了访问集群内部服务的 HTTP 和 HTTPS 路由方式。Ingress 是一组规则,它定义了如何将流量从外部路由到 Kubernetes 集群中的服务。Ingress 可以提供负载均衡、SSL/TLS 终止以及基于主机名和 URL 路径的路由。
在 Kubernetes 中使用 Ingress 可以获得以下优势:
- 集中路由流量到集群内部服务,并提供负载均衡服务。
- 自定义路由规则,通过域名、路径来访问服务的不同版本。
- 支持 SSL/TLS 终止,保障传输安全。
- 扩展性更强,支持不同的 Ingress 控制器,可选第三方插件。
Ingress 基本配置
使用 Ingress 需要在 Kubernetes 集群中安装 ingress-controller,Ingress Controller 是负责处理流量的组件,它负责监视 Kubernetes 中的 Ingress 对象并将流量路由到正确的服务。Kubernetes 支持多种 Ingress 控制器,您可以选择根据需要使用不同的控制器。
假设我们要发布一个基于 Nginx 的 Ingress 服务,并路由到 Kubernetes 集群内的一个 Demo 应用服务,该服务暴露的端口号为 8080。
首先,我们需要创建一个 namespace 用于存储我们的应用和 Ingress。
apiVersion: v1 kind: Namespace metadata: name: example-namespace
接着,我们需要创建一个 Deployment.yaml 文件,它定义了我们的应用。该应用是一个简单的 Python Flask 应用,它仅仅返回 "Hello World" 字样。
-- -------------------- ---- ------- ----------- ------- ----- ---------- --------- ----- ----------- ---------- ----------------- ----- --------- - --------- ------------ ---- ----------- --------- --------- ------- ---- ----------- ----- ----------- - ----- --- ------ --------------- ------ - -------------- ---- -------- - ------ - -- - ------------- --------
然后,我们需要创建一个 Service.yaml 文件,它定义了我们的应用与 Ingress 在 Kubernetes 集群内的端口和 IP 的关系。该 Service 文件暴露在创建的应用 Deployment 上,它会将 8080 端口暴露在 ClusterIP 为 example-service.namespace.svc.cluster.local,暴露在 Ingress 上是 example.com。
-- -------------------- ---- ------- ----------- -- ----- ------- --------- ----- --------------- ---------- ----------------- ----- ------ - ----- ---- --------- --- ----- ---- ----------- ---- --------- ---- -----------
最后,我们需要创建一个 Ingress.yaml 文件,它定义了我们的实际流量规则,它通过 Host 和 Path 来路由 Ingress 流量。该 Ingress 文件将 example.com/example 导向到 example-service.namespace.svc.cluster.local/example。
-- -------------------- ---- ------- ----------- ------------------------- ----- ------- --------- ----- --------------- ---------- ----------------- ------------ ------------------------------------------- --- ----- ------ - ----- ----------- ----- ------ - ----- ----------------- -------- ------------ --------------- ------------ ----
Ingress 配置进阶
配置好了 Ingress 后,我们便能够通过 example.com/example 访问 Kubernetes 集群中的服务。但是在实际的生产环境中,我们需要进一步优化 Ingress 配置,以满足更加复杂的流量管理需求。
下面是对 Ingress 进阶配置的一些示例。
虚拟主机
假设我们需要在 Ingress 中为不同的应用程序定义虚拟主机。比如,我们需要将 example.com/example 应用程序转发到 example-service.namespace.svc.cluster.local/example,并将 example.com/another-example 应用程序转发到 another-service.namespace.svc.cluster.local。
-- -------------------- ---- ------- ----------- ------------------------- ----- ------- --------- ----- --------------- ---------- ----------------- ----- ------ - ----- ----------- ----- ------ - ----- ----------------- -------- ------------ --------------- ------------ ---- - ----- ----------- ----- ------ - ----- ------------------------- -------- ------------ --------------- ------------ --
路径转发
假设我们需要将 example.com/api/v1/** 转发到 api-v1-service.namespace.svc.cluster.local,example.com/api/v2/** 转发到 api-v2-service.namespace.svc.cluster.local。我们需要在 Ingress 中使用 Kubernetes 注释“nginx.ingress.kubernetes.io/rewrite-target”。
-- -------------------- ---- ------- ----------- ------------------------- ----- ------- --------- ----- --------------- ---------- ----------------- ------------ ------------------------------------------- --- ----- ------ - ----- ----------- ----- ------ - ----- ---------------- -------- ------------ -------------- ------------ ---- - ----- ---------------- -------- ------------ -------------- ------------ ----
Ingress 总结
本文介绍了 Kubernetes 中 Ingress 的基础概念和基本配置,以及如何使用 Kubernetes 在 Ingress 中实现更加复杂的路由规则。Ingress 可以大大的简化我们的应用程序的流量配置,同时它也能够为运维者提供更加灵活的服务管理工具。
强烈建议从 Ingress 入门开始,逐步掌握高级配置,深入理解 Ingress 的原理,这样将有助于在 Kubernetes 中提供最佳的服务体验。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/647b756e968c7c53b06e6049