CCE集群升级时,ELB Ingress与ELB配置不一致如何处理?
ELB资源简介
在CCE集群中,使用ELB Ingress可以将外部流量路由到集群内的服务。Ingress中定义的一系列参数实际上是作用于弹性负载均衡器(ELB)的配置,以便更好地控制流量管理和分发。表1将详细介绍这些ELB配置与Ingress参数的对应关系。
ELB配置 |
说明 |
ELB Ingress中的对应关系 |
|
---|---|---|---|
负载均衡器(elb) |
- |
接受来自客户端的传入流量并将请求转发到一个或多个可用区中的后端服务器。 |
对应Ingress注解中的kubernetes.io/elb.id |
监听器(listener) |
- |
监听器使用配置的协议和端口检查来自客户端的连接请求,并根据定义的分配策略和转发策略将请求转发到一个后端服务器组里的后端服务器。 |
对应Ingress注解中的kubernetes.io/elb.port,如果不填默认是80/443 |
转发策略(l7policy) |
转发策略 |
ELB转发规则:通过域名、路径进行转发。 |
转发规则中的域名和路径分别对应Ingress参数中的spec.rules[].host和spec.rules[].http.paths[].path配置 |
ELB转发动作:转发至后端服务器组。 |
后端服务器组对应Ingress参数中spec.rules[].http.paths[].backend.service填写的Service后端服务 |
||
高级转发策略 |
ELB转发规则:域名、路径、HTTP请求方法、HTTP请求头、查询字符串、网段。 |
对应Ingress注解中kubernetes.io/elb.actions、kubernetes.io/elb.conditions等高级转发策略相关的注解。
详情请参见:
|
|
ELB转发动作:转发至后端服务器组、重定向至监听器、重定向至URL、返回固定响应、重写、写入Header、删除Header、限速。 |
|||
后端服务器组(pool) |
- |
后端服务器组是一个或多个后端服务器的逻辑集合,用于将客户端的流量转发到一个或多个后端服务器,满足用户同时处理海量并发业务的需求。后端服务器可以是云服务器实例、辅助弹性网卡或IP地址。 |
对应Ingress参数中的spec.rules[].http.paths[].backend |
后端服务器(member) |
- |
负载均衡器会将客户端的请求转发给后端服务器处理。例如,您可以添加ECS实例作为负载均衡器的后端服务器,监听器使用您配置的协议和端口检查来自客户端的连接请求,并根据您定义的分配策略将请求转发到后端服务器组里的后端服务器。 |
Ingress对应Service的endpoint |
Ingress与ELB配置不一致处理思路
集群升级前检查中,可能扫描出多个Ingress与ELB配置不一致项,并显示每个不一致项期望的配置。示例如下:
inconsistent: ingress(default/nginx) need create listener(HTTP/8000) of elb(4a090bf3-9d11-45dc-8d04-f9cf010ba2ec), the wanted configuration is {"name":"k8s_HTTP_8000","protocol_port":8000,"protocol":"HTTP","loadbalancer_id":"4a090bf3-9d11-45dc-8d04-f9cf010ba2ec","sni_container_refs":null,"http2_enable":false} inconsistent: ingress(default/nginx) need create pool(k8s_default_nginx-80_HTTP-8000), the wanted configuration is {"name":"k8s_default_nginx-80_HTTP-8000","protocol":"HTTP","loadbalancer_id":"4a090bf3-9d11-45dc-8d04-f9cf010ba2ec","lb_algorithm":"ROUND_ROBIN","slow_start":{"enable":false,"duration":30}} inconsistent: need create member(address: 172.16.0.54) of pool(k8s_default_nginx-80_HTTP-8000), the wanted configuration is {"name":"2c2405d1abc17da48c70e9edc9a340fc","subnet_cidr_id":"77b9ad29-e30f-451b-92e7-949b83220b0f","address":"172.16.0.54","protocol_port":30838,"weight":6} inconsistent: ingress(default/nginx) need create l7policy(k8s_default_nginx_6666cd76) of listener(k8s_HTTP_8000/HTTP/8000), the wanted configuration is {"name":"k8s_default_nginx_6666cd76","listener_id":"k8s_HTTP_8000/HTTP/8000","action":"REDIRECT_TO_POOL","redirect_pool_id":"k8s_default_nginx-80_HTTP-8000"} inconsistent: ingress(default/nginx) need create rule of l7policy(k8s_default_nginx_6666cd76), the wanted configuration is {"type":"PATH","compare_type":"STARTS_WITH","value":"/"}
您可按照以下顺序依次处理:
序号 |
异常项 |
异常原因 |
---|---|---|
1 |
监听器(listener) |
|
2 |
转发策略(l7Policy) |
|
3 |
转发规则(rule) |
|
4 |
后端服务器组(pool) |
|
5 |
后端服务器(member) |
|
6 |
健康检查(healthMonitor) |
监听器存在不一致-需要创建监听器
inconsistent: ingress(xxx) need create listener ...
此问题出现在用户通过ELB控制台修改了监听器的名字、描述,或者删除了监听器。可在ELB控制台根据端口查看监听器是否存在,并进一步检查监听器名字与描述是否匹配。可按照以下步骤处理:
监听器的描述信息应为如下所示,其中cluster_id的值为本集群ID。
{"attention":"Auto-generated by CCE service, do not modify!","cluster_id":"5d4d44bd-0891-11f0-84d3-0255ac10003e"}
例如:
inconsistent: ingress(default/nginx) need create listener(HTTP/8000) of elb(4a090bf3-9d11-45dc-8d04-f9cf010ba2ec), the wanted configuration is {"name":"k8s_HTTP_8000","protocol_port":8000,"protocol":"HTTP","loadbalancer_id":"4a090bf3-9d11-45dc-8d04-f9cf010ba2ec","sni_container_refs":null,"http2_enable":false}
表示default名称空间下的nginx这个ingress,需要在ELB(id:4a090bf3-9d11-45dc-8d04-f9cf010ba2ec)下创建端口为8000,协议为HTTP的监听器,监听器的名字为k8s_HTTP_8000(sni_container_refs为null,http2_enable为false表示无SNI与HTTP2配置),描述信息也需同时设置。
监听器存在不一致-需要更新监听器
inconsistent: ingress(xxx) need update listener ...
此问题出现在用户通过ELB控制台修改了监听器的配置,并未在CCE侧同步,可在ELB控制台查看该监听器的实际配置,并与期望配置项逐一对比,若存在不一致,则需将监听器的配置手动修改为CCE侧的期望配置,或者修改Ingress。
例如:
inconsistent: ingress(default/cce-elb-ingress) need update listener(5ca8a931-9d7a-465e-b503-08f88d528cd8), the wanted configuration is {"id":"5ca8a931-9d7a-465e-b503-08f88d528cd8","sni_container_refs":null}
the wanted configuration is后打印了监听器的期望配置,此处为sni_container_refs: null,可排查ELB侧监听器的SNI功能是否开启,而Ingress里没有配置。若Ingress里没有配置,则需在Ingress里加上SNI配置。操作步骤详情请参见为ELB Ingress配置服务器名称指示(SNI)。
转发策略存在不一致-需要创建转发策略
inconsistent: ingress(xxx) need create l7policy(xxx) ...
此问题出现在用户通过ELB控制台修改了CCE创建的转发策略的描述,或者删除了转发策略。可在ELB控制台对应监听器下根据转发策略名字搜索其是否存在,并进一步检查转发策略的描述是否匹配。可按照以下步骤处理:
转发策略的描述信息如下所示,其中cluster_id的值为本集群ID,ingress_id为当前Ingress的UID。
{"attention":"Auto-generated by CCE service, do not modify!","cluster_id":"5d4d44bd-0891-11f0-84d3-0255ac10003e","ingress_id":"8a79a17b-f9ab-4431-95f6-0e1125093aac"}
需要注意的是,ELB控制台不会显示转发策略的描述信息,需从浏览器接口返回信息中查看。
例如:
inconsistent: ingress(default/nginx) need create l7policy(k8s_default_nginx_6666cd76) of listener(0bdabd92-a85b-4f9b-96df-0fde706ea028), the wanted configuration is {"name":"k8s_default_nginx_6666cd76","listener_id":"0bdabd92-a85b-4f9b-96df-0fde706ea028","action":"REDIRECT_TO_POOL","redirect_pool_id":"k8s_default_nginx-80_HTTP-8000"}
表示default名称空间下nginx这个ingress,需要在监听器(id:0bdabd92-a85b-4f9b-96df-0fde706ea028)下创建名为k8s_default_nginx_6666cd76的转发策略,并转发到名为k8s_default_nginx-80_HTTP-8000的后端服务器组,描述信息也需同时设置。您可通过创建转发策略接口进行创建。
在浏览器接口返回信息中查看创建的转发策略。
转发策略存在不一致-需要更新转发策略
inconsistent: ingress(xxx) need update l7policy(xxx) of listener(xxx) ...
此问题出现在用户通过ELB控制台修改了CCE创建的转发策略的后端服务器组(redirect_pool_id)。例如:
inconsistent: ingress(default/nginx) need update l7policy(c4beb313-0a32-4add-9d0e-68b8f0f90e01) of listener(0bdabd92-a85b-4f9b-96df-0fde706ea028), the wanted configuration is {"id":"c4beb313-0a32-4add-9d0e-68b8f0f90e01","redirect_pool_id":"k8s_default_nginx-80_HTTP-8000","redirect_pools_config":[]}
表示default命名空间下nginx这个Ingress,需要在监听器(id:0bdabd92-a85b-4f9b-96df-0fde706ea028)下把转发策略(id:c4beb313-0a32-4add-9d0e-68b8f0f90e01)的重定向后端服务器组id(redirect_pool_id)修改为k8s_default_nginx-80_HTTP-8000这个后端服务器组的id,并删除重定向后端服务器组(redirect_pools_config)的配置。
转发策略存在不一致-需要删除转发策略
inconsistent: ingress(xxx) need delete l7policy(id: xxx) ...
此问题出现在用户通过ELB控制台在CCE创建的监听器下新建了转发策略。需根据转发策略id找到对应的转发策略,并将其删除。
例如:
inconsistent: need delete l7policy(id: f4eda0af-869a-47fb-a699-2f27f286b641)
可通过查询转发策略详情接口查询该转发策略位于哪个ELB监听器下,并将其删除。若您想保留该转发策略,可在Ingress里加上配置。
转发规则存在不一致-需要创建/删除转发规则
inconsistent: ingress(xxx) need create rule of l7policy(xxx) ...
此问题出现在用户通过ELB控制台修改了CCE创建的转发策略下的转发规则,通常是修改了类型、匹配方式、路径。由于CCE对于转发规则的更新方式为删除后重创,因此需要创建/删除转发规则的不一致问题通常会同时出现。
例如:
inconsistent: ingress(default/nginx) need create rule of l7policy(k8s_default_nginx_6666cd76), the wanted configuration is {"type":"PATH","compare_type":"STARTS_WITH","value":"/"} inconsistent: need delete rule(6cf87a3e-373e-4378-bf7a-16a709feee63) of l7policy(c4beb313-0a32-4add-9d0e-68b8f0f90e01)
表示default名称空间nginx这个ingress,需要在转发策略k8s_default_nginx_6666cd76下创建类型为PATH,匹配方式为STARTS_WITH(前缀匹配),值为/的转发规则。同时需要在转发策略(id:c4beb313-0a32-4add-9d0e-68b8f0f90e01)下将转发规则(id:6cf87a3e-373e-4378-bf7a-16a709feee63)删除。
后端服务器组存在不一致-需要创建后端服务器组
inconsistent: need create pool(xxx)...
此问题出现在用户通过ELB控制台修改了CCE创建的转发策略的后端服务器组(redirect_pool_id),通常伴随着“need update l7policy ...”一起出现。可根据后端服务器组的名称、监听器查找其是否存在。若存在,则需修改转发策略的后端服务器组。
例如:
inconsistent: ingress(default/nginx) need create pool(k8s_default_nginx-80_HTTP-8000), the wanted configuration is {"name":"k8s_default_nginx-80_HTTP-8000","protocol":"HTTP","loadbalancer_id":"4a090bf3-9d11-45dc-8d04-f9cf010ba2ec","lb_algorithm":"ROUND_ROBIN","slow_start":{"enable":false,"duration":30}}
若不存在,则需按照打印出的配置项进行创建。
后端服务器存在不一致-需要创建后端服务器
inconsistent: need create member(address: xxx) of pool(xxx) ...
此问题出现在用户通过ELB控制台修改了CCE创建的后端服务器组中的后端服务器。
例如:
inconsistent: need create member(address: 172.16.0.54) of pool(dab7b0c1-623e-4499-8c70-7477f36fc2ef), the wanted configuration is {"name":"2c2405d1abc17da48c70e9edc9a340fc","subnet_cidr_id":"77b9ad29-e30f-451b-92e7-949b83220b0f","address":"172.16.0.54","protocol_port":30838,"weight":6}
需要在后端服务器(id:dab7b0c1-623e-4499-8c70-7477f36fc2ef)下添加IP地址为172.16.0.54,端口30838,权重为6,子网为77b9ad29-e30f-451b-92e7-949b83220b0f,名称为2c2405d1abc17da48c70e9edc9a340fc的后端服务器。ELB控制台无法填写名称,您可通过创建后端服务器接口进行创建。
后端服务器存在不一致-需要更新后端服务器
inconsistent: need update member(address: xxx) of pool(xxx) ...
此问题出现在用户通过ELB控制台修改了CCE创建的后端服务器组中的后端服务器的权重。
例如:
inconsistent: need update member(9a65b96c-891a-439e-a692-508c3e095095) of pool(dab7b0c1-623e-4499-8c70-7477f36fc2ef), the wanted configuration is {"id":"9a65b96c-891a-439e-a692-508c3e095095","name":"2c2405d1abc17da48c70e9edc9a340fc","weight":6}
需要在后端服务器组(id:dab7b0c1-623e-4499-8c70-7477f36fc2ef)中将后端服务器(id:9a65b96c-891a-439e-a692-508c3e095095)的权重修改为6。
后端服务器存在不一致-需要删除后端服务器
inconsistent: need delete member(address: xxx) of pool(xxx) ...
此问题出现在用户通过ELB控制台修改了CCE创建的后端服务器组中的后端服务器。
例如:
inconsistent: need delete members([d0891296-daf9-496b-9cac-ad1a1101b303]) of pool(dab7b0c1-623e-4499-8c70-7477f36fc2ef)
需要在后端服务器组(id:dab7b0c1-623e-4499-8c70-7477f36fc2ef)中将后端服务器(id:d0891296-daf9-496b-9cac-ad1a1101b303)删除。
健康检查配置存在不一致-需要删除健康检查
inconsistent: need delete healthMonitor(xxx) of pool(xxx) ...
此问题出现在用户通过ELB控制台开启了后端服务器组的健康检查,而未在Ingress里配置。
例如:
inconsistent: need delete healthMonitor(ef7ad2c3-bdda-4727-8a1c-de37eeb48b55) of pool(402dbff8-58b8-4a49-bb99-0dc5cf87c35b)
需要将后端服务器组(id:402dbff8-58b8-4a49-bb99-0dc5cf87c35b)上配置的健康检查删除(可通过删除健康检查接口进行删除),或者在对应的Ingress中开启健康检查。
健康检查配置存在不一致-需要更新健康检查
inconsistent: need update healthMonitor(xxx) of pool(xxx) ...
此问题出现在用户通过ELB控制台修改了后端服务器组的健康检查配置。
例如:
inconsistent: need update healthMonitor(9d438b19-4342-42af-a876-77d49bbc9447) of pool(402dbff8-58b8-4a49-bb99-0dc5cf87c35b), the wanted configuration is {"delay":5,"max_retries":3,"timeout":10,"type":"HTTP","url_path":"/","monitor_port":null,"admin_state_up":true}
需要将健康检查(id:9d438b19-4342-42af-a876-77d49bbc9447)的配置修改正确。