查看原文
其他

洛神云网络集中式网关ACMG最佳实践

鱼日 冬南 云布道师 2023-06-18

云布道师

ACMG 是专门为东西向流量打造的集中式七层网关,使用无侵入式引流的方式,在满足用户流量治理需求的同时,相比 Sidecar 模式在资源利用率、运维复杂度、性能和时延等方面具有优势。
其中之前主流的分布式 Sidecar 模式在近几年受到了大家的青睐,但是在使用过程中也有问题逐渐暴露了出来,Sidecar 模式在内存消耗上比较可控,最多也是在 MB 这个量级,但是在 CPU 利用率上,随着业务吞吐量的增长,Sidecar 的 CPU 消耗基本达到了与业务消耗持平的量级,相当于在使用 Sidecar 之后,相同业务规模需要两倍的集群数来承载。
总的来看,业内也逐渐意识到了这个问题,逐渐演进出了其他方案,比如 Ambient、AWS VPC Lattice 都推出了与 Sidecar 不同的方案。
快速回答
自上次集中式网关方案发布后,收到了一些大家提出的问题,在这里挑选了一些典型问题,统一进行解答,感谢大家的关注。

 集中式网关和 Sidecar、Ambient 有什么区别?

集中式网关是专门为服务网格场景打造的集中式七层网关,整个集群的东西向流量都可以由集中式网关接管,无需 Sidecar;在满足用户流量治理需求的同时,相比 Sidecar、Ambient 在资源利用率、运维复杂度、性能和时延等方面具有优势。

 集中式网关的转发底座是什么?

集中式网关是基于 Envoy 进行开发设计的。

 集中式网关适合哪种业务使用?

1、业务规模较大,对 Sidecar 消耗的资源较为敏感。
2、运维复杂的 ServiceMesh 场景,出现问题时排查、解决都较为困难。
3、尝试了目前市面上的方案都不太满足自己的需求,欢迎来试用集中式网关。

 集中式网关打算一直坚持开源吗?

是的,我们坚持开源,不会改变。
最佳实践
下面介绍一下 ACMG 的安装以及使用方法,按照下面的教程可以体验 ACMG 的基本流量接管功能以及一些拓展的高级用法,同样支持开发者们基于 ACMG 的源代码进行二次开发。

 编译代码

$ make build

 编译镜像

$ make docker
$ docker images
经过编译,得到下图所示的 docker 镜像:
localhost:5000/app_sidecar_centos_7 latest localhost:5000/app_sidecar_debian_11 latest localhost:5000/app_sidecar_ubuntu_xenial latest localhost:5000/app_sidecar_ubuntu_jammy latest localhost:5000/app latest localhost:5000/install-cni latest localhost:5000/proxyv2 latest localhost:5000/operator latest localhost:5000/pilot latest localhost:5000/istioctl latest localhost:5000/acmg latest localhost:5000/ext-authz latest

 安装

Istio 有多种安装模式,我们选择 acmg(集中式网关)的模式进行安装。
$ ./out/linux_amd64/istioctl profile listIstio configuration profiles:acmgdefaultdemoemptyexternalminimalopenshiftpreview
$ ./out/linux_amd64/istioctl install --set profile=acmg
当上面的命令执行完毕,可以检查一下安装情况。
$ kubectl get pods -n istio-system
NAME READY STATUS RESTARTS AGEacmg-controller-798cbd6b9d-x4fmd 1/1 Running 0 5m32sacmg-gateway-66f9f86fcd-xx9qg 1/1 Running 0 3m8sistiod-945b9f699-sm4js 1/1 Running 0 5m31s
可以看到 acmg-controller,acmg-gateway,istiod 三个重要的角色已经就绪,其中 acmg-gateway 可以接管整个集群的东西向流量。

 使用

以服务 default 命名空间里的 helloworld 为例,介绍一下如何使用集中式网关。
apiVersion: networking.istio.io/v1alpha3kind: VirtualServicemetadata: name: helloworld-acmg namespace: istio-systemspec: enableAcmg: true hosts: - "*" http: - match: - uri: exact: /hello route: - destination: host: helloworld.default.svc.cluster.local
其中 enableAcmg 字段表示此虚拟服务将托管到集中式网关中。发起对 helloworld 服务的访问,可以发现流量是经过集中式网关到达的 helloworld 服务。

 卸载

$ ./out/linux_amd64/istioctl uninstall --purge
当上面的命令执行完毕,检查一下卸载情况。
$ kubectl get pods -n istio-systemNo resources found.

可以看到,集中式网关的相关资源已经全部清理完毕。

高级用法

 流量分发

创建 DestinationRule,指定不同版本的 helloworld 服务。
apiVersion: networking.istio.io/v1alpha3kind: DestinationRulemetadata: name: helloworld-acmg namespace: istio-systemspec: host: helloworld.default.svc.cluster.local trafficPolicy: loadBalancer: simple: ROUND_ROBIN subsets: - name: v1 labels: version: v1 - name: v2 labels: version: v2
创建 VirtualService,引用不同版本的 helloworld 服务。
apiVersion: networking.istio.io/v1alpha3kind: VirtualServicemetadata: name: helloworld-acmg namespace: istio-systemspec: enableAcmg: true hosts: - "*" http: - match: - uri: exact: /hello route: - destination: host: helloworld.default.svc.cluster.local subset: v1 weight: 90 - destination: host: helloworld.default.svc.cluster.local subset: v2 weight: 10

 故障注入

例如,我们可以为访问 helloworld 服务千分之一的请求配置一个 5 秒的延迟访问:
apiVersion: networking.istio.io/v1alpha3kind: VirtualServicemetadata: name: helloworld-acmg namespace: istio-systemspec: enableAcmg: true hosts: - "*" http: - fault: delay: percentage: value: 0.1 fixedDelay: 5s - match: - uri: exact: /hello route: - destination: host: helloworld.default.svc.cluster.local

 服务熔断

例如下面的设置将 helloworld 服务 v1 子集的工作负载并发连接数限制为 100:
apiVersion: networking.istio.io/v1alpha3kind: DestinationRulemetadata: name: helloworld-acmg namespace: istio-systemspec: host: helloworld.default.svc.cluster.local trafficPolicy: loadBalancer: simple: ROUND_ROBIN subsets: - name: v1 labels: version: v1 trafficPolicy: connectionPool: tcp: maxConnections: 100 - name: v2 labels: version: v2
后期规划
云原生理念让我们受益良多,但是也带来了一些问题,比如原先的单体式应用变成了多个服务单元,这使得服务发现与路由规则变得更为复杂了;而且通常情况下,东西向流量的访问也是默认使用 http,当攻击者绕过防火墙进入 K8S 集群,那么整个集群内的服务都会直接暴露给攻击者。这时候就要考虑每个服务如何安全地与集群内其他服务进行通信。
ACMG 后期主要会着力于打造安全零信任网络,完善可观测能力,在访问控制、双向认证、身份识别等方面推出成熟的解决方案,在可观测性方面,通过无侵入的方式加强日志追踪、日志收集等能力,为集群内的服务生成完整的遥测数据。
ACMG 钉钉交流群:11360036029

开源代码链接:

https://github.com/alibaba/alibaba-centralized-mesh-gateway/tree/acmg1.0


你可能还想看

1. 如何构建故障与危机的处理能力?《高可用及容灾架构体系化建设》下篇

2. 怎样建设稳定性基础架构?《高可用及容灾架构体系化建设》上篇

3储留香|没想到,AI背后还有这些弯弯绕绕…

4. 一个成功开源项目的演进,会遇到哪些“坑”?

5. 一文看懂倚天云实例|科普漫画

关注我们欢迎关注加星标✨ 精彩推送不错过

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存