ELB Ingress管理详解

Ingress 是 Kubernetes 中的一个 API 对象,用于管理外部访问集群内部的服务,ELB (Elastic Load Balancing) Ingress 则是在华为云 CCE (Cloud Container Engine)环境中,基于 ELB 实现的一种 Ingress 控制器,这种控制器能够帮助用户通过 ELB 实例将外部流量路由到集群内部的各个服务。
前提条件与约束
使用 ELB Ingress 之前,集群中需要提前部署可用的工作负载,如无状态负载(Deployment)、有状态负载(StatefulSet)或守护进程集(DaemonSet),这些工作负载还需要配置 Service,建议不要共享 Ingress 自动创建的 ELB 实例以避免资源残留问题,Ingress转发策略中注册的URL需与后端应用提供的URL一致,否则会返回404错误。
ELB Ingress 添加过程
以nginx作为工作负载为例,首先登录CCE控制台并进入集群,选择左侧导航栏的“服务”,在右侧选择“路由”页签,单击右上角“创建路由”,设置Ingress参数包括名称、负载均衡器类型(独享型或共享型)、创建方式(选择已有或自动创建)等。
表1: ELB配置
创建方式 | 配置选项 |
选择已有 | 仅支持选择与集群在同一个VPC下的ELB实例 |
自动创建 | 配置包括实例名称、企业项目、可用区、前端子网、后端子网、网络类型规格等 |
完成基本配置后,还需进行监听器配置,包括前端协议(HTTP/HTTPS)、对外端口、访问控制(白名单/黑名单)、证书来源和服务器证书、TLS密钥等,对于HTTPS协议,还可以配置SNI(Server Name Indication)和安全策略。
ELB Ingress 与 Nginx Ingress 对比

ELB Ingress 是基于华为云自研的 ELB 实现的全托管模式插件,支持千万级并发链接和百万级新建连接,而 Nginx Ingress 则是一个开源插件,提供丰富的Ingress配置,适合对网关定制需求强烈的场景。
ELB Ingress 的优点在于免运维、集中管理,而 Nginx Ingress 的优点在于可自定义配置参数,更加灵活,两者在工作原理上都是通过监听器进行流量分发,但具体实现机制有所不同,ELB Ingress 更适合需要高并发、低运维成本的场景,Nginx Ingress 则适合需要更多定制化功能的场景。
操作示例
通过kubectl命令添加ELB Ingress时,需要创建一个YAML文件来定义Ingress资源,这个文件中需要指定metadata(如name、annotations),spec(如rules、paths、backend)等,annotations用来配置ELB的参数,如端口、类型、是否自动创建等。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingresstest annotations: kubernetes.io/elb.class: union kubernetes.io/elb.port: '80' kubernetes.io/elb.autocreate: '{"type":"public","bandwidth_size":5}' spec: rules: http: paths: path: / pathType: ImplementationSpecific backend: service: name: myservice port: number: 8080
YAML文件定义了一个名为ingresstest的Ingress资源,使用公网类型的ELB实例,端口为80,自动创建,所有访问根路径("/")的流量都会被路由到名为myservice的服务的8080端口上。
上文归纳与常见问题解答
问:ELB Ingress 和 Nginx Ingress 各适用于什么场景?
答:ELB Ingress 适用于需要高并发、低运维成本且不需要复杂配置的七层负载均衡场景,Nginx Ingress 则适用于需要更多定制化功能和灵活配置的网关场景。

问:如何避免 ELB Ingress 的资源残留问题?
答:建议不要共享 Ingress 自动创建的 ELB 实例,并在删除 Ingress 时确保没有其他资源正在使用该 ELB 实例,这样可以有效避免资源残留问题。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复