开发者学堂课程【从概念、部署到优化,Kubernetes Ingress 网关的落地实践:从概念、部署到优化,Kubernetes Ingress 网关的落地实践】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1013/detail/15070
从概念、部署到优化,Kubernetes Ingress 网关的落地实践
点击确定
直接在终端进行查看是否安装成功。
提供 MSE Ingress Controller 主要是为了与容器服务 ACK 深度集成,使用声明式配置的方法管理资源比较符合容器内部的使用习惯。通过 K8s 定义MseIngressConfig 资源管理原生网关。 MseIngressConfig 跟 IngressClass 原生网关关系主要是如图所示,MseIngressConfig 主要管理云原生网关这个实例,IngressClass 主要是管理配置,原生网关监听由 IngressClass 提供分组管理。MseIngressConfig 是一个最小化的配置仅仅定义了一个网关的名字,这个网关名字其实也可以省略,默认就是 mse-ingress,需要配置一个交换机,apply 这个配置创建一个原生网关。
然后 apply 到 K8s上,可以看一下动态
现在处于 pending 状态,表示原生网关在初始化,大概需要三分钟。MSE Ingress Controller 的配置项,需要确保 MSE Ingress Controller 被赋予了 MSE 的访问权限,可以在集群点击到目标集群找到集群资源有一个 workRAM 角色
在角色中确保该角色拥有 AliyunMSEFullAccess 的权限。
然后回到应用市场查看配置总览,内容主要是网关的名称是可选的,默认是mse-ingress。付费类型目前只支持按量付费,用户可以忽略。instance 主要用来定义网关的规格性,规格默认是4c8g。副本数是默认3个,这是默认的推荐配置。交换机推荐配置主在前备在后,这个是必填的,用户可以填至少一个至多两个。network 主要是配置公网 SLB 和私网 SLB 的规格,同样安全组类型可以配置企业安全组和普通安全组。Ingress 下面主要配置了原生网关可以监听那些域名或对象,Ingress 资源如果为空表示监听所有云空间,如果指定值就可以监听指定命令空间下的 Ingress。虽然当前只支持一个,但是后面会推出支持多个进行选择。
IngressClass 主要定义一个 Ingress 解析类用来关联对应的 Ingress Provider,其中parameters 值用来定义额外资源用来管理 Ingress Provider,这里指向一个 MseIngressConfig 看到定义的 Ingress Class 的名字是 mse,并且关联 config 值,配置名也是 test。另外指定了 Ingress Class 值,在创建 Ingress Class 默认都是 MSE 就是 K8s新推出的一个特性。
终端查看创建成功并且处于 listen 的状态,因为这个集群中应该有一个 IngressClass
关联了 mse-config,这样的话就创建了一个 MSE 原生网关,并且已经处于 listen 状态,监听集群 Ingress 资源。
部署后端服务先对灰度发布进行实践,按照 header 灰度,假设有一个原生网关,后端有一个 httpbin 服务,希望 header 中带有 stage 为 gray 的去访问 v2,其余流量都访问 v1。首先去部署服务,定义构写了一个v1、v2版本,定义 Ingress 资源对外暴露服务
可以看到 host 是 test.com, path 是/version,打向v1版本。对于灰度的 Ingress 配置,同样也是 host 是 test.com, path 是/version,打向v2,只不过要求通过 header 做灰度流量标识,通过 Annotation 的方式指出 header 为 stage, value 为 gray 的灰度流量,然后应用该 Ingress 资源。
可以看到资源和 IP,然后验证。首先不带 header,访问到v1。这时加一个 header,访问到v2。这样就完成了基于 header 的灰度。
接下来展示基于权重灰度,希望无差别对待线上流量,将百分之三十流量迁移到v2版本,百分之七十流量迁移到v1版本。首先查看 Ingress 资源
这是稳定版本的资源,同样 host 是 test.com, path 是 /version,访问 v1版本。灰度 Ingress 资源定义了灰度的权重是30,权重总和默认为100,在这个 灰度 Ingress 访问v2。然后应用该 Ingress 资源,查看解析情况,解析成功,通过访问多次验证,可以看到v2大概占百分之三十的情况。
另外还有一些 Ingress 的高阶用法,举了两个例子,一个是重定向,另一个是 path 重写。在最佳实践中介绍了与业务的 API,比如按照那个原则设计 API,业务刚开始发展的时候没有办法按该原则设计,对外暴露直接是/version,通过重定向可以将线上老的 API 重定向到一个新的 API,可以应用业务域拆分的原则,再由网关统一经过 path 重写将业务域前缀去掉,转发给后端服务仍然是/ version。实践一下同样查看 Ingress 资源
为了看到重定向后的效果,path 用了新的 API 叫 /meta,是精确匹配,永久重定向到/httpbin/meta,因为业务是httpbin。重定向之后需要为新的 httpbin 定义一个规则在 Ingress 中体现。同样 host 是 test.com, path 换到一个正则匹配,业务域前缀是httpbin, Annotation 用的一个 rewrite-target的重写的注解,当该注解出现之后,pathType 就失效,会被转换为最早匹配,会捕获匹配到的值并且替换这个语法,$1就是捕获组的第一个位置。
在 Ingress 终端查看是否解析成功,直接服务 meta,正常情况下会直接重定向到 httpbin/meta,然后服务该 API,可以看到访问成功,这个 meta 打印出来了网关转发给后端的请求详情,可以看到 path 变为 meta,这样就完成了一个 path 重写。
基于 Ingress 可以有更多的高阶用法, MSE 网关兼容了 Nginx Ingress 核心的 Annotation,比如跨域等,更多的可以参考官方文档:https://help.aliyun.com/document_detail/424813.html