容器服务中多个SLB负载均衡并透传源 IP

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 1. 前言     负载均衡 SLB各地域带宽有峰值限制,国内区域一般量为5Gbps,对于超高流量,超高并发的应用单个 SLB 没法满足需求,因而需要前置安全设施,比如 DDOS 高防,web应用防火墙的源服务器地址都支持多个 IP轮询均匀访问,指向多个 SLB,如图: 域名服务,CName 指向 DDOS 高防的 CName; DDOS 高防源地址配置多个 SL

1. 前言

    负载均衡 SLB各地域带宽有峰值限制,国内区域一般量为5Gbps,对于超高流量,超高并发的应用单个 SLB 没法满足需求,因而需要前置安全设施,比如 DDOS 高防,web应用防火墙的源服务器地址都支持多个 IP轮询均匀访问,指向多个 SLB,如图:

  1. 域名服务,CName 指向 DDOS 高防的 CName;
  2. DDOS 高防源地址配置多个 SLB IP,DDOS 高防访问时会均匀轮询访问 SLB;
  3. SLB 负载均衡配置后端服务器,通过后端服务器指向 K8S集群的 NodePort 服务,每个SLB 平均添加多个集群的后端服务器;
    1. SLB 后端服务器数量有阈值限制;
    2. SLB 通过健康的后端服务器转发请求到 K8S 集群。
  4. K8S 集群的 Service NodePort externalTrafficPolicy 配置 Local 模式,透传实际访问 IP 到K8S 应用。

2. 透传实际 IP

  • DDOS 防护 获取客户端真实 IP: https://help.aliyun.com/knowledge_detail/40535.html?spm=5176.11065259.1996646101.searchclickresult.25cf41a8ADwJgw
  • SLB 获取客户端真实 IP:https://help.aliyun.com/document_detail/54007.html?spm=5176.11065259.1996646101.searchclickresult.22542e49qVwaU9
  • K8S 集群: Service 的 NodePort 或者 SLB 将externalTrafficPolicy 设置为 Local,该方式需要按照一定规则设置后端服务器,不然可能导致负载不均衡。

        说明:Service.spec.externalTrafficPolicy - 如果这个服务需要将外部流量路由到 本地节点或者集群级别的端点,那么需要指明该参数。存在两种选项:”Cluster”(默认)和 “Local”。 “Cluster” 隐藏源 IP 地址,可能会导致第二跳(second hop)到其他节点,但是全局负载效果较好。”Local” 保留客户端源 IP 地址,避免 LoadBalancer 和 NodePort 类型服务的第二跳,但是可能会导致负载不平衡。

3. 负载均衡请求

     透传 IP 后,需要合理设置后端服务器,并控制应用的 POD 均匀分布到后端服务器,才可以保持负载均衡,具体策略如下:

假设配置接入层应用A,域名为 a.xxx.com, 高并发高流量,需要8个 SLB 负载均衡接入,SLB 负载均衡指向 K8S 集群的 NodePort Service;

DDOS 高防 --> 8个 SLB-->2个 K8S 集群(共800台 worker 机器) NodePort service --> 400台 POD 接入层服务,

配置流程:

  1. 规划2个集群各200台 Node 设置 Label 为 role.app.a: "true";
  2. 设置应用发布的 Deployment 的 yaml 中的Pod Affinity, 设置其调度到role.app.a: "true" 的 Node 上;
  3. 使用每个 pod 平均调度,将 pod 均匀部署到2个集群的400个 Node 上,方法参考:https://www.atatech.org/articles/147431
  4. 设置8个 SLB,每个 SLB 后设置400/8=50台后端服务器,2个集群的 Node 各25台;
  5. 设置 DDOS 高防的源站 IP 为8个 SLB 的 IP 地址;
  6. 设置2个 k8s 集群的该接入层应用的 Service 为 NodePort,externalTrafficPolicy 为 Local;

这样完成配置和部署成功后,请求通过 DDOS 均匀分发到8个 SLB,每个 SLB 又均匀分发到后端服务器,后端服务器平均部署一个 POD,请求按照 NodePort 的设置,包括真实 IP 分发到每个 POD,实现 POD 请求数均匀。

以上方案是纯人力操作,比较完美的方式是开发一个调度任务,比如 ScheduleX Job,均匀发布应用 POD 到每个 Node 上,并在每次应用重新部署或者其它导致 POD 漂移时候,重新均匀设置 SLB 负载均衡的后端服务器。

 

 

 

 

 

 

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
22天前
|
容器
在容器服务ACK中,如果你想更改ALB Ingress的域名和端口
【2月更文挑战第15天】在容器服务ACK中,如果你想更改ALB Ingress的域名和端口
12 3
|
2月前
|
弹性计算 负载均衡 容器
当您在使用应用型负载均衡ALB时遇到后端容器中的traefik返回404错误
【1月更文挑战第7天】【1月更文挑战第32篇】当您在使用应用型负载均衡ALB时遇到后端容器中的traefik返回404错误
17 1
|
负载均衡
创建ALB负载均衡实例
创建ALB负载均衡实例
136 0
创建ALB负载均衡实例
|
运维 负载均衡 Cloud Native
容器网络 ALB Ingress|学习笔记
快速学习容器网络 ALB Ingress
352 0
容器网络 ALB Ingress|学习笔记
|
弹性计算 负载均衡 算法
记一次负载均衡的配置和使用
负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。 负载均衡构建在原有网络结构之上,它提供了一种透明且廉价有效的方法扩展服务器和网络设备的带宽、加强网络数据处理能力、增加吞吐量、提高网络的可用性和灵活性。
132 0
记一次负载均衡的配置和使用
|
负载均衡 算法 前端开发
自定义负载均衡器
自定义负载均衡器
125 0
自定义负载均衡器
|
弹性计算 负载均衡 前端开发
Day3-SLB负载均衡相关配置
在服务器应对大量用户访问(高并发情况)时, 会导致响应速度变慢, 影响用户的正常访问. 而运用负载均衡(Server Load Balancer)可以将访问流量根据转发策略分发到后端多台云服务器的流量分发控制服务. 负载均衡扩展了应用的服务能力, 增强了应用的可用性.
342 0
|
负载均衡 Kubernetes 网络安全
容器服务中多个SLB负载均衡并透传源 IP
1. 前言  负载均衡 SLB各地域带宽有峰值限制,国内区域一般量为5Gbps,对于超高流量,超高并发的应用单个 SLB 没法满足需求,因而需要前置安全设施,比如 DDOS 高防,web应用防火墙的源服务器地址都支持多个 IP轮询均匀访问,指向多个 SLB,如图:  1.
2341 0
|
Kubernetes 应用服务中间件 nginx
kubernetes部署Ingress访问代理与负载均衡器
Kubernetes中的pod都有独立的内部IP(外部不可访问),通过Service可以对多个pod进行负载均衡和故障转移,Service可以具有ClusterIP、NodeIP或LoadBanlancer模式。
3331 0
|
网络协议 应用服务中间件 nginx
如何配置阿里云容器服务K8S Ingress Controller使用私网SLB
本文主要讲述如何配置阿里云容器服务K8S Ingress Controller使用私网SLB。
13887 0

相关产品

  • 容器镜像服务
  • 容器服务Kubernetes版