Nginx Ingress怎么部署
本篇内容主要讲解“Nginx Ingress怎么部署”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Nginx Ingress怎么部署”吧!
概述
在开源社区当中,Kubernetes 的 Ingress Controller 的实现有多种方式,Nginx Ingress 只是其中的一种实现方式,当然也是目前社区中使用量最大的一种 Ingress Controller 的实现方式,其不仅功能强大,而且性能极高。
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
为例子,存在如下的一些问题:
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
的支持(两种模式混用)
我们以节点池部署的负载示例 当前方案性能好,所有的 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,多一层转发,但可能存在以下的问题:
转发路径较长,流量到 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 通过集成 腾讯云容器团队的高性能云原生监控服务(传送门:https://console.cloud.tencent.com/tke2/prometheus ),也可在以前发布的文章《如何用 Prometheus 监控十万 container 的 Kubernetes 集群》中了解 Prometheus,Kvass 和怎么利用 kvass 为基础的 Prometheus 集群化技术。
绑定监控实例
查看监控数据
如何采集和消费日志
TKE 通过集成 腾讯云日志服务 CLS,提供了全套完整的产品化能力,实现 nginx-ingress-controller
的日志采集和消费能力,但需要注意如下几个事项:
前置要求:确保当前集群已开启日志采集功能
在
nginx-ingress-controller
实例中,配置日志采集的相关选项。
到此,相信大家对“Nginx Ingress怎么部署”有了更深的了解,不妨来实际操作一番吧!这里是蜗牛博客网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
评论