关于腾讯云:使用腾讯云容器服务玩转-Nginx-Ingress

7次阅读

共计 3888 个字符,预计需要花费 10 分钟才能阅读完成。

概述

在开源社区当中,Kubernetes 的 Ingress Controller 的实现有多种形式,Nginx Ingress 只是其中的一种实现形式,当然也是目前社区中使用量最大的一种 Ingress Controller 的实现形式,其不仅功能强大,而且性能极高。本文次要介绍如何应用腾讯云容器服务实现多种形式进行 Nginx Ingress 的部署,并会简略介绍各种形式的实现原理以及优缺点和实用场景。

Nginx Ingress 是什么

Nginx Ingress 是 Kubernetes 的一种对象,通过 nginx-ingress-controller 将用户申明的 nginx-ingress 转化成 nginx 的转发规定。其外围解决的问题是流量的转发和东西向的负载平衡。
次要的工作原理是 nginx-ingress-controller 监听 api-server 的变动(Kubernetes Informers),通过 watch Kubernetes 的 Ingress、Service、Endpoint、Secret、ConfigMap 等对象变动,更改 Nginx 实例的配置,进行流量转发。

目前社区中,针对于 Nginx Ingress 次要有如下的两种实现形式

  • Kubernetes 开源社区的实现
  • Nginx 官网的实现

为什么须要 Nginx Ingress

开源社区当中,对 Ingress Controller 的实现形式有多种,每一种 Controller 都有其实用的场景以及各自的优缺点,为什么举荐应用 nginx-ingress-controller?上面咱们来探讨一下,如果不应用 nginx-ingress-controller 会给业务带来什么困扰

这里以腾讯云容器服务控制台(以下简称 TKE)默认举荐的 ingress controller 为例子,存在如下的一些问题:

  1. CLB 类型的 Ingress 能力无奈满足现有业务的需要,如无奈共享同一个外网入口,反对默认默认转发后端等
  2. 原有业务已应用了 nginx-inrgess,并且运维已习惯于配置 nginx.conf,不心愿做过多的扭转

应用 nginx-ingress-controller,可能很好地解决以上的问题。

须要什么前提条件

部署 nginx-ingress-operator

组件部署装置

进入腾讯云容器服务控制台当中,抉择须要部署 Nginx Ingress 的集群,进入集群 - 组件治理当中,部署装置 Nginx Ingess 组件,如下图:

组件装置并且失常运行

部署计划

TKE 提供了多种对于 nginx-ingress-controller 的部署计划以及接入 LB 的形式,适配不同的业务场景需要,以下会对不同的计划进行介绍。

nginx-ingress-controller 部署计划

计划一:DaemonSet + 节点池

Nginx 作为要害的流量接入网关,是至关重要的组件,不倡议将 Nginx 与其余业务部署在雷同的节点内,能够通过节点池设置污点的形式,进行部署。对于节点池的相干阐明,能够查看 腾讯云容器服务节点池概述

应用此部署计划,应该留神如下几个事项:

  • 提前准备好部署 nginx-ingress-controller 的节点池,同时设置节点池的污点 TaintLabel,避免其余 Pod 调度到该节点池。
  • 确保已胜利部署装置好 nginx-ingress-operator 组件,部署形式参考上方指引
  • 进入组件详情,创立

    nginx-ingress-controller

    实例(繁多集群内可同时存在多个实例)

    • 部署形式抉择 指定节点池 DaemonSet 部署
    • 设置容忍污点
    • 设置 Request/Limit,其中 Request 需设置比节点池的机型配置小(节点自身有资源预留,防止实例因资源有余而不可用),Limit 可不设置
    • 其余参数依据业务须要进行设置即可
计划二:Deployment + HPA

应用 Deployment + HPA 的计划进行部署,您能够依据业务须要配置污点和容忍,将 Nginx 和业务 Pod 进行扩散部署。搭配 HPA,设置 CPU/ 内存等指标进行弹性伸缩。

应用此部署计划,应该留神如下几个事项:

  • 在集群中设置行将部署 nginx-ingress-controller 的节点的 Label
  • 确保已胜利部署装置好 nginx-ingress-operator 组件,部署形式参考上方指引。
  • 进入组件详情,创立

    nginx-ingress-controller

    实例(繁多集群内可同时存在多个实例)

    • 部署形式抉择 自定义 Deployment+HPA 部署
    • 设置 HPA 触发策略
    • 设置 Request/Limit
    • 设置节点调度策略,举荐 nginx-ingress-controller 独占节点,防止其余业务资源强占而导致不可用
    • 其余参数依据业务须要进行设置即可

Nginx 前端接入 LB 的部署形式

上文介绍了在 TKE 的集群当中部署 nginx-ingress-operatornginx-ingress-controller 的应用流程和部署计划倡议,实现以上步骤,仅仅是在集群内部署了 Nginx 的相干组件,但要接管内部的流量,还须要配置,还须要配置 nginx 的前端 LB。以后 TKE 已实现对 Nginx Ingress 的产品化反对,能够依据业务须要抉择以下部署模式之一。

计划一:VPC-CNI 模式集群应用 CLB 直通 Nginx 的 Service(举荐)

前置条件(满足其一即可):

  1. 集群本身网络插件为 VPC-CNI
  2. 集群本身网络插件为 Global Router,并已开启 VPC-CNI 的反对(两种模式混用)

咱们以节点池部署的负载示例

以后计划性能好,所有的 Pod 都应用的弹性网卡,弹性网卡的 Pod 是反对 CLB 直绑 Pod 的,能够绕过 NodePort,并且不须要手动保护 CLB,反对主动扩缩容,是最现实的计划。

计划二:Global Router 模式集群应用一般 LoadBalancer 模式的 Service

以后 TKE 对于 LoadBalancer 类型的 Service 默认的实现是基于 NodePort,CLB 会绑定各节点的 NodePort 作为后端的 RS,将流量转发到节点的 NodePort,而后节点再通过 Iptables 或 IPVS 将申请路由到 Service 对应的后端 Pod(指 Nginx Ingress Controller 的 Pod)。

您的集群如果不反对 VPC-CNI 的网络模式,能够通过惯例的 LoadBalancer 拜访形式的 Service 接入流量。
这是在 TKE 上部署 Nginx Ingress 最简略的形式,流量会通过一层 NodePort,多一层转发,但可能存在以下的问题:

  1. 转发门路较长,流量到 NodePort 后,还会再通过 Kubernetes 外部负载平衡,通过 Iptables 或 IPVS 转发到 Nginx,会减少一点网络耗时
  2. 通过 NodePort,必然会产生 SNAT,如果流量过于集中,容易导致源端口耗尽或者 conntrack 插入抵触而导致丢包,引发局部流量异样。
  3. 每个节点的 NodePort 也充当一个负载均衡器,CLB 如果绑定大量节点的 NodePort,负载平衡的状态就扩散在每个节点上,容易导致全局负载不均。
  4. CLB 会对 NodePort 进行衰弱探测,探测包最终会被转发到 Nginx Ingress 的 Pod,如果 CLB 绑定的节点数量多于 Nginx Ingress 的 Pod,会导致探测包对 Nginx Ingress 造成较大的压力。
计划三:应用 HostNetwork + LB

计划二尽管是最简略的部署形式,然而流量会通过一层 NodePort,且可能存在如上所形容的问题,咱们能够让 Nginx Ingress 应用 HostNetwork,CLB 间接绑定节点 IP + 端口 (80,443)。因为应用 HostNetwork,nginx ingress 的 Pod 就不能被调度到同一个节点当中,防止端口监听抵触。
因为 TKE 尚未对此计划进行产品化,能够通过提前布局,抉择局部节点,专门用于部署 nginx-ingress-controller,为节点打上 Label,而后以 DaemonSet 的形式部署在这些节点上(即 nginx-ingress-controller 的部署计划一)。

如何集成监控

TKE 通过集成 腾讯云容器团队的高性能云原生监控服务(传送门:https://console.cloud.tencent…),也可在以前公布的文章《如何用 Prometheus 监控十万 container 的 Kubernetes 集群》中理解 Prometheus,Kvass 和怎么利用 kvass 为根底的 Prometheus 集群化技术。

绑定监控实例

查看监控数据

如何采集和生产日志

TKE 通过集成 腾讯云日志服务 CLS,提供了全套残缺的产品化能力,实现 nginx-ingress-controller 的日志采集和生产能力,但须要留神如下几个事项:

  1. 前置要求:确保以后集群已开启日志采集性能
  2. nginx-ingress-controller 实例中,配置日志采集的相干选项。

总结

本文梳理了如何应用腾讯云容器服务控制台玩转 Nginx Ingress,次要介绍了管制台上的对于 nginx-ingress-controller 的两种部署形式以及倡议,以及前端接入 LB 的三种形式,除了在 TKE 上进行 Nginx Ingress 的一键部署,TKE 还提供集群所部署的 nginx-ingress-controller 日志和监控的相干能力的产品化反对。对于想要在 TKE 上应用 Nginx Ingress,本文是一个很好的参考和指引。

【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!

正文完
 0