c语言sscanf函数的用法是什么
266
2022-10-11
使用腾讯云容器服务玩转 Nginx Ingress
作者林育新,腾讯云容器产品工程师。目前主要负责腾讯云TKE的控制台的相关研发工作。
概述
在开源社区当中,Kubernetes 的 Ingress Controller 的实现有多种方式,Nginx Ingress 只是其中的一种实现方式,当然也是目前社区中使用量最大的一种 Ingress Controller 的实现方式,其不仅功能强大,而且性能极高。本文主要介绍如何使用腾讯云容器服务实现多种方式进行 Nginx Ingress 的部署,并会简单介绍各种方式的实现原理以及优缺点和适用场景。
Nginx Ingress 是什么
目前社区中,针对于 Nginx Ingress 主要有如下的两种实现方式
Kubernetes 开源社区的实现 Nginx 官方的实现
为什么需要 Nginx Ingress
开源社区当中,对 Ingress Controller 的实现方式有多种,每一种 Controller 都有其适用的场景以及各自的优缺点,为什么推荐使用 nginx-ingress-controller?下面我们来探讨一下,如果不使用 nginx-ingress-controller 会给业务带来什么困扰
这里以腾讯云容器服务控制台(以下简称 TKE)默认推荐的 ingress controller 为例子,存在如下的一些问题:
CLB 类型的 Ingress 能力无法满足现有业务的需求,如无法共享同一个外网入口,支持默认默认转发后端等 原有业务已使用了 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 的节点池,同时设置节点池的污点 Taint 和 Label,防止其他 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-operator 和 nginx-ingress-controller 的使用流程和部署方案建议,完成以上步骤,仅仅是在集群内部署了 Nginx 的相关组件,但要接收外部的流量,还需要配置,还需要配置 nginx 的前端 LB。当前 TKE 已完成对 Nginx Ingress 的产品化支持,可以根据业务需要选择以下部署模式之一。
方案一:VPC-CNI 模式集群使用 CLB 直通 Nginx 的 Service(推荐)
前置条件(满足其一即可): 集群自身网络插件为 VPC-CNI 集群自身网络插件为 Global Router,并已开启 VPC-CNI 的支持(两种模式混用)
方案二: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,多一层转发,但可能存在以下的问题:
转发路径较长,流量到 NodePort 后,还会再经过 Kubernetes 内部负载均衡,通过 Iptables 或 IPVS 转发到 Nginx,会增加一点网络耗时 经过 NodePort,必然会发生 SNAT,如果流量过于集中,容易导致源端口耗尽或者 conntrack 插入冲突而导致丢包,引发部分流量异常。 每个节点的 NodePort 也充当一个负载均衡器,CLB 如果绑定大量节点的 NodePort,负载均衡的状态就分散在每个节点上,容易导致全局负载不均。 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 通过集成 腾讯云容器团队的高性能云原生监控服务(传送门:),也可在以前发布的文章《如何用 Prometheus 监控十万 container 的 Kubernetes 集群》中了解 Prometheus,Kvass 和怎么利用 kvass 为基础的 Prometheus 集群化技术。
绑定监控实例
查看监控数据
如何采集和消费日志
TKE 通过集成 腾讯云日志服务 CLS,提供了全套完整的产品化能力,实现 nginx-ingress-controller 的日志采集和消费能力,但需要注意如下几个事项:
前置要求:确保当前集群已开启日志采集功能 在 nginx-ingress-controller 实例中,配置日志采集的相关选项。
总结
本文梳理了如何使用腾讯云容器服务控制台玩转 Nginx Ingress,主要介绍了控制台上的对于 nginx-ingress-controller 的两种部署方式以及建议,以及前端接入 LB 的三种方式,除了在 TKE 上进行 Nginx Ingress 的一键部署,TKE 还提供集群所部署的 nginx-ingress-controller 日志和监控的相关能力的产品化支持。对于想要在 TKE 上使用 Nginx Ingress,本文是一个很好的参考和指引。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~