在 Kubernetes 中使用 Ingress 和 TLS

阅读时长 7 分钟读完

在 Kubernetes 中使用 Ingress 和 TLS

云计算时代下,Kubernetes已成为一种常见的容器编排平台。为了支持Kubernetes上的应用程序可用性、可靠性和安全性,Kubernetes提供了Ingress和TLS支持。本文将深入探讨如何在Kubernetes中使用Ingress和TLS,并提供相应的指导和代码示例。

什么是Ingress

Ingress是Kubernetes集群中一个API对象,它允许管理外部访问集群中的服务。Ingress可以在每个服务之前定义所需的HTTP路由规则,可以定义域名、主机名、路径、端口等。Ingress Controller通过检查Ingress资源的规则并将其映射到相应的后端服务,然后将流量转发到相应的服务上。就像下面的YAML清单。首先定义了一个Ingress资源,然后定义多个Path配置。每个Path配置定义了请求的URL路径规则,并指向后端的Service。

-- -------------------- ---- -------
----------- ------------------
----- -------
---------
  ----- ----------
-----
  ------
  - ----- -----------
    -----
      ------
      - ----- ------
        --------
          ------------ ---------
          ------------ ----
      - ----- ------
        --------
          ------------ ---------
          ------------ ----

什么是TLS

TLS是一种安全协议,用于加密基于互联网的通信。在Kubernetes中,TLS可以通过Ingress对象配置。具体地说,Ingress对象提供了一种可以用来指定HTTPS协议监听器的方式。

要使用TLS,需要创建一个Secret对象,其中包含X.509证书和私钥。有了这个Secret对象,就可以在Ingress中定义TLS终端配置。

下面是一个使用TLS的Ingress对象的示例:

-- -------------------- ---- -------
----------- ------------------
----- -------
---------
  ----- ----------
-----
  ----
  - ------
    - -----------
    ----------- ---------
  ------
  - ----- -----------
    -----
      ------
      - ----- ------
        --------
          ------------ ---------
          ------------ ----

在上面的示例中,定义了一个TLS配置,使用名为“my-secret”的Secret对象。在rules中,也指定了host为example.com并且使用HTTP协议的入口。

指导和代码示例

让我们通过一个完整的示例来演示如何使用Ingress和TLS在Kubernetes中公开一个Web应用。本例中,我们将使用cert-manager管理证书,这是Kubernetes的一个特殊控制器,它可以自动化证书的颁发和管理。必须先安装它。如果您还没有安装cert-manager,请参阅官方文档。

步骤1: 创建一个Namespace

首先,让我们创建一个Namespace,其中我们将部署我们的应用:

步骤2: 创建一个Deployment

现在我们将创建一个Deployment,其中运行一个简单的Web服务器。在此示例中,我们使用了Docker Hub上的example-app映像。生成一个manifest.yaml,并使用kubectl apply应用:

-- -------------------- ---- -------
----------- -------
----- ----------
---------
  ----- -----
  ---------- -----
-----
  ---------
    ------------
      ---- -----
  --------- -
  ---------
    ---------
      -------
        ---- -----
    -----
      -----------
      - ----- -----
        ------ ----------------------------------------
        ------
        - -------------- --

步骤3: 创建一个Service

接下来,将Deployment公开为集群内部的HTTP服务:

-- -------------------- ---- -------
----------- --
----- -------
---------
  ----- -----
  ---------- -----
-----
  ------
  - ----- --
    ----------- --
  ---------
    ---- -----

步骤4: 安装cert-manager

安装cert-manager非常简单,仅需要一个kubectl apply命令:

此命令安装cert-manager所需的官方自定义资源定义(CRD),并在集群中创建必要的角色和服务帐户。

步骤5: 配置证书关联

创建一个名为“my-tls-secret”的Secret对象和关联集群中我们的TLS密钥对:

步骤6: 创建TLS配置

使用以下YAML配置文件创建Ingress:

-- -------------------- ---- -------
----------- ------------------
----- -------
---------
  ----- -------------
  ---------- -----
  ------------
    ---------------------------- -----
    ------------------------------- -------------
-----
  ----
  - ------
    - ----- -------
    ----------- -------------
  ------
  - ----- ----- -------
    -----
      ------
      - ----- -
        --------
          ------------ -----
          ------------ --

注:请注意替换<your>和<issuer-name>。

我们在这里使用cert-manager自定义的注释以及你用于监听TLS加密的隧道。使用spec.tls字段,我们指定了任何进入的连接都需要使用我们刚刚创建的TLS证书和私钥。使用rules字段,我们指定了主机名、请求路径和我们要负载平衡的服务。

步骤7: 应用更改

做好以上修改后,将清单应用到Kubernetes集群:

最后,您可以通过访问已经与TLS配置关联的URL来验证您的Ingress是否生效。如果证书的颁发过程顺利,您应该发现您的服务现在通过安全的HTTPS协议提供服务。

结论

在这篇文章中,我们深入探讨了如何在Kubernetes中使用Ingress和TLS。我们学习了如何配置Ingress规则和使用TLS证书,以便将Web应用程序公开传入的流量,并保证传输安全。我们还提供了一个完整的代码示例,以指导您在自己的Kubernetes集群上部署和配置Ingress和TLS。这些工具让您可以更加简单地扩展网络应用程序。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/677213fe6d66e0f9aad4668a

纠错
反馈