ACK Istio ingress gateway 生产调优

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: istio ingress gateway 生产配置调优

前言

Istio Ingress Gateway作为服务网格的核心组件,对外提供服务统一的服务入口,gateway的能力对业务至关重要,但由于涉及到资源配置及费用开销等问题,ACK集群中默认安装istio的相关组件,不会做在资源层面做特定的配置,所以存在如下可能影响性能的点:

  • 默认部署资源规格小
  • 默认replica实例数少
  • 默认入口service slb实例规格低
  • 默认和其他业务pod混部
  • 默认宿主机内核sysctl部分参数并未调整到最适合大流量场景

如果只是简单开发测试体验下istio的功能,无需为这些点做专门的调优;但是如果以生产为目标,为了使ingress gateway能够拥有更强的能力,我们需要根据我们的业务场景,有选择性的对每个点进行适当的调整。

调整资源规格

默认的istio ingress gateway deployment中pod的资源规格如下:

          resources:
            limits:
              cpu: '2'
              memory: 2G
            requests:
              cpu: 200m
              memory: 256Mi

我们可以根据实际情况,将该资源的规格适当调大,gateway是计算敏感型业务,资源可适当多分配一些CPU资源

          resources:
            limits:
              cpu: '4'
              memory: 4G
            requests:
              cpu: '4'
              memory: 4G

扩充实例个数

默认的istio ingress gateway deployment中replica的个数为1,默认有80% cpu阈值做hpa,建议上来2个replica起步,另外加上hpa使之具备一定弹性。如果考虑采用本文所述的独立部署,可不做hpa弹缩gateway。

spec:
  replicas: 1

调优入口service slb实例规格

默认ingress gateway的service对应的slb规格是slb.s1.small,该规格实例的最大连接数为5000,每秒查询数为1000 QPS,建议可按照实际需求调整slb实例规格,具体slb实例规格可参考:
https://help.aliyun.com/document_detail/27695.html
注意:修改slb实例规格请不要在SLB控制台上手动修改,规格的变更请在service的yaml中以annotation方式进行修改,例如:

  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: slb.s3.small

独立部署

为避免ingress gateway和其他业务pod混部场景下出现南北向及东西向流量互相干扰的场景,可考虑将ingress gateway独立部署于某几台规格较高的节点上,使得gateway和业务pod之间只存在南北向的流量,在此处,我们建议独立部署于计算型ECS资源上(如前所述,gateway是计算型业务,cpu开销较大),步骤可参考如下:

  1. 在集群中扩容两新ECS节点,扩容时可同时给节点打上label及污点taint(添加已有节点,也请做同样的操作)

    kubectl label node nodename app=istio-ingressgateway
    kubectl taint node nodename istio=ingressgateway:NoExecute
  2. 给ingress gateway的deployment添加node selector及对应的容忍:

          nodeSelector:
            app: istio-ingressgateway
          tolerations:
            - effect: NoExecute
              key: istio
              operator: Equal
              value: ingressgateway
  3. 重启gateway的pod,使之能调度到专属的独立节点上去。

优化sysctl内核参数

为了使ingress gateway能有更强的处理高并发的能力,建议可在ingress gateway所在的节点上调整一下内核参数:

sysctl -w net.netfilter.nf_conntrack_max=2097152
sysctl -w net.ipv4.tcp_mem="786432 2097152 3145728"
sysctl -w net.ipv4.tcp_rmem="4096 4096 16777216"
sysctl -w net.ipv4.tcp_wmem="4096 4096 16777216"
sysctl -w net.ipv4.tcp_max_syn_backlog=65535

terway容器网络Pod独占ENI(可选)

如果我们选择的ACK集群容器网络为terway,且集群中的机型能够支持足够多的弹性网卡ENI,我们的业务也允许我们使用Terway容器网络下独占ENI的模式(每台机器支持ENI的个数有限,慎用独占模式,参考,https://help.aliyun.com/document_detail/25378.html ),那我们可以给ingress gateway及需要高性能的业务pod分配独占ENI以提高性能。

总结

经过以上几个点的调整后,可以有效提升istio ingress gateway的承载能力,为生产环境下可能出现的流量峰值提前做好准备,另外,为了应对峰值流量,gateway后端的服务也需要做相应的资源规划及hpa的配套,实测结果显示,端到端的优化配置可有效提升ingress gateway的可靠性及性能,推荐有istio生产需求的用户参照本文提升istio的承载能力。

15783104718493

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
29天前
|
缓存 Kubernetes Docker
容器服务ACK常见问题之容器服务ACK ingress websocket配置失败如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
3月前
|
Kubernetes 负载均衡 应用服务中间件
kubernetes—Ingress详解
kubernetes—Ingress详解
69 0
|
3月前
|
Kubernetes 应用服务中间件 nginx
|
4月前
|
Kubernetes 应用服务中间件 nginx
k8s ingress不生效的bug 解决了。
k8s ingress不生效的bug 解决了。
|
4月前
|
Kubernetes 负载均衡 应用服务中间件
k8s学习-Ingress(安装、模板、创建、删除)
k8s学习-Ingress(安装、模板、创建、删除)
89 0
|
5月前
|
Kubernetes 应用服务中间件 API
5 分钟了解 Kubernetes Ingress 和 Gateway API
5 分钟了解 Kubernetes Ingress 和 Gateway API
110 0
|
1月前
|
负载均衡 安全 网络协议
如何通过计算巢在ACK集群上使用Istio服务网格
本文主要介绍怎么通过计算巢部署Isito服务网格,并介绍了使用示例。
31 0
|
1月前
|
容器
在容器服务ACK中,如果你想更改ALB Ingress的域名和端口
【2月更文挑战第15天】在容器服务ACK中,如果你想更改ALB Ingress的域名和端口
13 3
|
4月前
|
Kubernetes 负载均衡 应用服务中间件
k8s学习-CKA真题-七层负载均衡Ingress
k8s学习-CKA真题-七层负载均衡Ingress
50 0
|
4月前
|
Kubernetes 安全 网络协议
k8s教程(service篇)-ingress 7层路由机制(下)
k8s教程(service篇)-ingress 7层路由机制(下)
76 0

相关产品

  • 容器服务Kubernetes版