一、背景介绍
随着微服务架构的广泛应用,API网关在微服务场景下发挥着重要作用。MSE-Higress作为阿里云推出的开源微服务网关,提供了服务发现、流量控制、安全防护等功能,可以有效简化网关管理,提高系统性能。
二、产品定位
MSE-Higress定位为云原生微服务网关,采用开源模式,面向Kubernetes环境,与服务网格等云原生技术栈深度融合,降低微服务治理的学习和使用成本。
三、产品功能
MSE-Higress作为新一代微服务网关,主要具备以下功能:
1. 流量调度:支撑多种负载均衡算法,提供精细化的流量调度功能。
2. 服务治理:通过插件实现访问控制、限流熔断、灰度发布等服务治理能力。
3. 安全防护:提供WAF、黑白名单等安全防护能力。
4. 可观察性:支持OpenTracing、Prometheus,实现服务调用链追踪和metrics监控。
5. 扩展性:插件市场帮助快速扩展网关功能,满足业务需求。
四、使用场景
MSE-Higress适用于以下使用场景:
1. 替换传统硬件/软件网关,实现向云原生网关的平滑迁移。
2. Kubernetes上的微服务治理,提供核心的服务注册发现、流量管控、安全防护等功能。
3. 与服务网格结合,在边缘提供入口流量管理和安全控制。
4. 中后台系统的API管理,实现细粒度的访问控制和流量调度。
五、基于MSE实现K8s集群内多服务的灰度发布实操
在容器服务中安装MSE Ingress Controller组件来管理云原生网关,并通过MSEIngress来暴露集群中的容器服务安装Controller。
1.复制以下链接打开浏览器新页面在应用市场开始安装操作。
https://cs.console.aliyun.com/?#/next/app-catalog/ack/incubator/ack-mse-ingress-controller
2.在打开的介绍页面,点击一键部署。
3.在创建面板中选择集群(名称随机生成)和命名空间,设置组件发布名称,然后单击下一步。
4.在参数配置向导中确认组件参数信息,并且确保授权模式为ramrole。然后单击确定。
5.安装完成后,切回到ACK集群详情的无状态页面,将目标集群的命名空间切换到mse-ingress-controller,如果出现ack-mse-ingress-controller应用(命名空间出现可能有延迟,稍等一会尝试刷新),表示安装成功。
至此我们完成了MSE Ingress Controller组件的安装工作。
通过Yaml配置创建MSE云原生网关
1.复制以下配置文,用于部署名称为test的Deployment。
apiVersion:mse.alibabacloud.com/v1alpha1 kind: MseIngressConfig metadata: name: test spec: name: mse-ingress common: pay: payType: POSTPAY instance: spec: 2c4g replicas: 1 network: publicSLBSpec: slb.s1.small securityGroupType: normal global: deleteSLB: true
2.切换到工作负载-自定义资源页面点击使用YAML创建资源,在打开的页面粘贴上面复制的内容,点击创建。
3.创建完成后,按下图切换到资源对象浏览器,再API组中找到mse.alibabacloud.com下的MseIngressConfig资源,左侧列表操作栏点击YAML编辑确认当状态显示为Listening时表示云原生网关创建成功并且处于运行状态。并自动监听集群中IngressClass为mse的Ingress资源。
4.页面切到网络-路由页面,创建并应用以下Ingress资源:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress namespace: default spec: ingressClassName:mse rules: - http: paths: - backend: service: name: go-httpbin-v1 port: number: 80 path: /version pathType: Prefix
5.查看目标Ingress的IP地址。
6.复制上述端点信息再拼接“/version”进行访问测试。
完成了Ingress资源的配置,并成功验证从公网访问到go-httpbin-v1服务响应返回如上图展示。
7.修改Ingress配置生效灰度
基于客户端请求的流量切分场景,假设当前线上环境,您已经有一套服务go-httpbin-v1对外提供7层服务,此时上线了一些新的特性,需要发布上线一个新的版本go-httpbin-v2。但又不想直接替换go-httpbin-v1服务,而是希望将请求头中包含version=v2的客户端请求转发到go-httpbin-v2服务中。
8.页面切到网络-路由页面,再新增一个canary-v2的路由资源。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: canary-v2 namespace:default annotations: nginx.ingress.kubernetes.io/canary: 'true' nginx.ingress.kubernetes.io/canary-by-header: version nginx.ingress.kubernetes.io/canary-by-header-value: 'v2' spec: ingressClassName: mse rules: - http: paths: - backend: service: name: go-httpbin-v2 port: number: 80 path: /version pathType: ImplementationSpecific
9.使用本地电脑打开终端程序(linux/macOS打开终端,windows打开安装有curl命令的CMD或者本地安装有支持header设置的HTTP请求工具,如PostMan)执行以下命令,请求头中满足version=v2的客户端请求访问服务。
10.通过终端测试
curl -H "version: v2"'http://120.55.xx.xx/version'
预期请求头满足version=v2的请求如下返回:
预期没有特殊请求头的请求如下正常返回:
11.通过PostMan测试,请求头带有headerversion=v2 将访问灰度服务go-httpbin-v2。
预期没有特殊请求头的请求将会访问正式服务go-httpbin-v1
至此基于MSE云原生网关在ACK上的Ingress场景灰度就全部实操完毕了。
六、使用评估
1. 部署安装:提供Helm Chart包,可以在Kubernetes集群中一键安装。
2. 使用难易程度:配置简单,采用Kubernetes Ingress API,降低学习成本。
3. 功能完整性:基础功能齐全,支持多种负载均衡算法和丰富的访问控制方式。
4. 扩展能力:插件市场提供认证、限流、Tracing等扩展能力。
5. 性能表现:支持热更新,资源消耗较低。
七、总结评价
1.MSE-Higress作为云原生微服务网关,兼顾了易用性、扩展性和性能,可以有效落地微服务架构中的API管理需求,助力构建高性能和可靠的微服务系统,是云原生架构不可或缺的重要组件之一。
2.竞品比较相比Nginx,Envoy等网关,MSE-Higress具备更丰富的流量管理功能,并基于SIG Ingress标准,支持Kubernetes原生API,降低使用门槛。
3.市场口碑MSE-Higress作为阿里云自研的网关,处于 similar projects的领先地位。开源社区活跃,认可度较高。
4.综合MSE-Higress的产品设计、功能实现、社区口碑等方面,作为云原生微服务网关,其兼顾了易用性、扩展性、安全性和高性能。已经成为云原生架构中不可或缺的API管理组件,值得业界 USER 重点关注和使用。