Kubernetes 之 Ingress 阶梯之路

阅读时长 8 分钟读完

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。

接着,我们需要创建一个 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

纠错
反馈