云服务器内容精选

  • 切流至ELB Ingress 流量切换前,假设您已将业务域名通过A记录解析的方式指向了自建Nginx Ingress的公网地址。您可以使用DNS的流量权重分配,逐步将访问原Nginx Ingress的流量切换至新的ELB Ingress。 图1 使用DNS切流 您可以通过以下步骤完成流量的切换。 进入公网域名列表页面。 在“公网域名”页面的域名列表中,单击域名example.com的名称。 进入“解析记录”页面。此时已存在一个A记录,对应Nginx Ingress的公网IP。修改Nginx Ingress的A记录的权重为9。 单击“添加记录集”,添加A记录,地址为待迁移的ELB公网IP,并将权重设置为1。 图2 修改DNS记录集 在观察业务没有影响的情况下,逐步调整ELB实例解析记录的权重值至100%。
  • 场景示例 下图场景为例。某企业在华为云使用CCE集群,并通过自建Nginx Ingress Controller配置Ingress转发规则,配置域名和路径的转发策略,且对外通过DNS域名提供服务。客户端访问域名example.com时,Nginx Ingress接收到请求会根据对应的转发策略将流量转发至对应Service的Pod上。 由于业务发展需要,该企业需要将自建Nginx Ingress迁移到ELB Ingress上。为了保持业务稳定,希望不改变对外提供服务的DNS域名及后端服务器的IP地址。您可以通过在 CCE集群上配置 ELB Ingress 规则,使ELB提供的转发策略与之前一致,然后利用DNS域名解析的权重设置完成流量的迁移。 建议在业务低谷期进行流量的切换。 使用ELB会产生计费信息,具体计费详情请参见计费概述。
  • Ingress支持的Service类型 ELB Ingress支持的Service类型如表1所示。 表1 ELB Ingress支持的Service类型 集群类型 ELB类型 集群内访问(ClusterIP) 节点访问(NodePort) CCE Standard集群 共享型负载均衡 不支持 支持 独享型负载均衡 不支持(集群内访问服务关联实例未绑定eni网卡,独享型负载均衡无法对接) 支持 CCE Turbo集群 共享型负载均衡 不支持 支持 独享型负载均衡 支持 不支持(节点访问服务关联实例已绑定eni网卡,独享型负载均衡无法对接) Nginx Ingress支持的Service类型如表2所示。 表2 Nginx Ingress支持的Service类型 集群类型 ELB类型 集群内访问(ClusterIP) 节点访问(NodePort) CCE Standard集群 共享型负载均衡 支持 支持 独享型负载均衡 支持 支持 CCE Turbo集群 共享型负载均衡 支持 支持 独享型负载均衡 支持 支持
  • ELB Ingress Controller工作原理 CCE自研的ELB Ingress Controller基于弹性负载均衡服务ELB实现公网和内网(同一VPC内)的七层网络访问,通过不同的URL将访问流量分发到对应的服务。 ELB Ingress Controller部署于Master节点上,与集群所在VPC下的弹性负载均衡器绑定,支持在同一个ELB实例(同一IP)下进行不同域名、端口和转发策略的设置。ELB Ingress Controller的工作原理如图2,实现步骤如下: 用户创建Ingress资源,在Ingress中配置流量访问规则,包括负载均衡器、URL、SSL以及访问的后端Service端口等。 Ingress Controller监听到Ingress资源发生变化时,就会根据其中定义的流量访问规则,在ELB侧重新配置监听器以及后端服务器路由。 当用户进行访问时,流量根据ELB中配置的转发策略转发到对应的后端Service端口,然后再经过Service二次转发访问到关联的各个工作负载。 图2 ELB Ingress工作原理(CCE Standard集群以及CCE Turbo集群使用共享型ELB场景) 在使用CCE Turbo集群 + 独享型ELB实例时,Pod IP直接从VPC中分配,支持ELB直通Pod。创建集群外部访问的Ingress时,可使用ELB对接ClusterIP服务,直接将Pod作为ELB监听器的后端服务器,外部流量可以不经过节点端口转发直接访问集群中的Pod。 图3 ELB Ingress直通容器原理(CCE Turbo集群使用独享型ELB场景)
  • Nginx Ingress Controller工作原理 Nginx型的Ingress使用弹性负载均衡(ELB)作为流量入口,并在集群中部署nginx-ingress插件来对流量进行负载均衡及访问控制。 nginx-ingress插件使用开源社区的模板与镜像,使用过程中可能存在缺陷,CCE会定期同步社区版本来修复已知漏洞。请评估是否满足您的业务场景要求。 开源社区地址:https://github.com/kubernetes/ingress-nginx Nginx型的Ingress Controller通过pod部署在工作节点上,因此引入了相应的运维成本和Nginx组件运行成本,其工作原理如图4,实现步骤如下: 当用户更新Ingress资源后,Ingress Controller就会将其中定义的转发规则写入到Nginx的配置文件(nginx.conf)中。 内置的Nginx组件进行reload,加载更新后的配置文件,完成Nginx转发规则的修改和更新。 在流量访问集群时,首先被已创建的负载均衡实例转发到集群内部的Nginx组件,然后Nginx组件再根据转发规则将其转发至对应的各个工作负载。 图4 Nginx Ingress Controller工作原理
  • 为什么需要Ingress Service基于TCP和UDP协议进行访问转发,为集群提供了四层负载均衡的能力。但是在实际场景中,Service无法满足应用层中存在着大量的HTTP/HTTPS访问需求。因此,Kubernetes集群提供了另一种基于HTTP协议的访问方式——Ingress。 Ingress是Kubernetes集群中一种独立的资源,制定了集群外部访问流量的转发规则。如图1所示,用户可根据域名和路径对转发规则进行自定义,完成对访问流量的细粒度划分。 图1 Ingress示意图 下面对Ingress的相关定义进行介绍: Ingress资源:一组基于域名或URL把请求转发到指定Service实例的访问规则,是Kubernetes的一种资源对象,通过接口服务实现增、删、改、查的操作。 Ingress Controller:请求转发的执行器,用以实时监控资源对象Ingress、Service、Endpoint、Secret(主要是TLS证书和Key)、Node、ConfigMap的变化,解析Ingress定义的规则并负责将请求转发到相应的后端Service。 Ingress Controller在不同厂商之间的实现方式不同,根据负载均衡器种类的不同,可以将其分成ELB型和Nginx型。CCE支持上述两种Ingress Controller类型,其中ELB Ingress Controller基于弹性负载均衡服务(ELB)实现流量转发;而Nginx Ingress Controller使用Kubernetes社区维护的模板与镜像,通过Nginx组件完成流量转发。
  • 简介 Nginx Ingress:基于社区的Nginx Ingress Controller进行了优化,为精选开源插件,提供丰富的Ingress配置,如果您对网关定制有强烈的需求,可以选择Nginx Ingress。 ELB Ingress:基于华为弹性负载均衡ELB(Elastic Load Balance),全托管,免运维,支持千万级并发链接,百万级新建连接。支持对接共享型负载均衡、独享性负载均衡实例。
  • 功能对比 比较项 Nginx Ingress ELB Ingress 产品定位 七层流量治理,提供丰富的高级路由功能。 七层流量治理,提供丰富的高级路由功能。与云原生深度集成,提供高可用、高性能、超安全、多协议的全托管免运维负载均衡服务。 具备弹性能力,流量突发时支持扩展计算资源。 同时支持千万级并发连接,百万级新建连接。 基础路由 基于内容、源IP的路由。 支持HTTP标头改写、重定向、重写、限速、跨域、会话保持等。 支持请求方向转发规则和响应方向转发规则,其中响应方向转发规则可以通过扩展Snippet配置实现。 转发规则按照最长路径匹配,匹配到多条路径时,转发路径最长的优先匹配。 基于内容、源IP的路由。 支持HTTP标头改写、重定向、重写、限速、会话保持等。 支持请求方向转发规则和响应方向转发规则。 转发规则按照优先级从高到低开始匹配,匹配到多条路径时,转发规则编号的数值越小优先级越高。 支持协议 支持HTTP和HTTPS协议。 支持WebSocket、WSS和gRPC协议。 支持HTTP和HTTPS协议。 支持gRPC协议。 配置变更 非后端端点变更需要Reload进程,对长连接有损。 端点变更使用Lua实现热更新。 Lua插件变更需要Reload进程。 申明式API,变更后由云服务之间的OpenAPI能力将配置加载到ELB负载均衡,实现动态加载。 认证鉴权 支持Basic Auth认证方式。 支持oAuth协议。 支持TLS身份认证。 性能 性能依赖手动调优,需要进行系统参数调优和Nginx参数调优。 需要配置合理的副本数和资源限制。更多信息,请参见通过控制台创建Nginx Ingress。 支持千万级并发连接,百万级新建连接。 可观测能力 支持通过Access Log采集日志。 支持通过Prometheus进行监控和告警配置。 支持云服务访问日志(对接LTS)。 支持审计关键操作。 支持使用Metrics输出监控指标(对接云监控)。 支持告警规则配置(对接云监控)。 运维能力 自行维护组件,定期同步社区新版本。 通过配置HPA进行扩缩容。 需要主动配置规格进行调优。 全托管、免运维。 自动弹性,免配置支持超大容量。 处理能力随业务峰值自动伸缩。 安全 支持HTTPS协议。 支持黑白名单功能。 HTTPS(集成SSL)支持全链路HTTPS、SNI多证书、RSA、ECC双证、TLS 1.3协议和TLS算法套件选择。 支持WAF防护墙防护。 支持DDos防护。 支持黑白名单功能。 支持自定义安全策略。 服务治理 服务发现支持K8s。 服务灰度支持金丝雀发布。 服务高可用支持限流。 服务发现支持K8s。 服务灰度支持金丝雀发布。 服务高可用支持限流。 云原生集成 自行运维组件,与华为云CCE、CCI Serverless、UCS等容器服务结合使用。更多信息,请参见路由概述。 全托管自动运维,与华为云CCE、CCI Serverless、UCS等容器服务结合使用。
  • Ingress支持的Service类型 ELB Ingress支持的Service类型如表2所示。 表2 ELB Ingress支持的Service类型 集群类型 ELB类型 集群内访问(ClusterIP) 节点访问(NodePort) CCE集群 共享型负载均衡 不支持 支持 独享型负载均衡 不支持(集群内访问服务关联实例未绑定eni网卡,独享型负载均衡无法对接) 支持 CCE Turbo集群 共享型负载均衡 不支持 支持 独享型负载均衡 支持 不支持(节点访问服务关联实例已绑定eni网卡,独享型负载均衡无法对接) Nginx Ingress支持的Service类型如表3所示。 表3 Nginx Ingress支持的Service类型 集群类型 ELB类型 集群内访问(ClusterIP) 节点访问(NodePort) CCE集群 共享型负载均衡 支持 支持 独享型负载均衡 支持 支持 CCE Turbo集群 共享型负载均衡 支持 支持 独享型负载均衡 支持 支持