从概念、部署到优化,Kubernetes Ingress 网关的落地实践|学习笔记(一)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 快速学习从概念、部署到优化,Kubernetes Ingress 网关的落地实践

开发者学堂课程【从概念、部署到优化,Kubernetes Ingress 网关的落地实践从概念、部署到优化,Kubernetes Ingress  网关的落地实践】学习笔记,与课程紧密联系,让用户快速学习知识。  

课程地址:https://developer.aliyun.com/learning/course/1013/detail/15070


从概念、部署到优化,Kubernetes Ingress 网关的落地实践


点击确定

image.gif直接在终端进行查看是否安装成功。

提供 MSE Ingress Controller 主要是为了与容器服务 ACK 深度集成,使用声明式配置的方法管理资源比较符合容器内部的使用习惯。通过 K8s 定义MseIngressConfig 资源管理原生网关。 MseIngressConfig 跟 IngressClass 原生网关关系主要是如图所示,MseIngressConfig 主要管理云原生网关这个实例,IngressClass 主要是管理配置,原生网关监听由 IngressClass 提供分组管理。MseIngressConfig 是一个最小化的配置仅仅定义了一个网关的名字,这个网关名字其实也可以省略,默认就是 mse-ingress,需要配置一个交换机,apply 这个配置创建一个原生网关。

image.gif然后 apply 到 K8s上,可以看一下动态

image.gif现在处于 pending 状态,表示原生网关在初始化,大概需要三分钟。MSE Ingress Controller 的配置项,需要确保 MSE Ingress Controller 被赋予了 MSE 的访问权限,可以在集群点击到目标集群找到集群资源有一个 workRAM 角色

在角色中确保该角色拥有 AliyunMSEFullAccess 的权限。

image.gif然后回到应用市场查看配置总览,内容主要是网关的名称是可选的,默认是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 资源。

image.gif

部署后端服务先对灰度发布进行实践,按照 header 灰度,假设有一个原生网关,后端有一个 httpbin 服务,希望 header 中带有 stage 为 gray 的去访问 v2,其余流量都访问 v1。首先去部署服务,定义构写了一个v1、v2版本,定义 Ingress 资源对外暴露服务

image.gif

可以看到 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大概占百分之三十的情况。

image.gif另外还有一些 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

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
5天前
|
消息中间件 运维 Kubernetes
构建高效自动化运维体系:Ansible与Kubernetes的融合实践
【5月更文挑战第9天】随着云计算和微服务架构的普及,自动化运维成为确保系统可靠性和效率的关键。本文将深入探讨如何通过Ansible和Kubernetes的集成,构建一个强大的自动化运维体系。我们将分析Ansible的配置管理功能以及Kubernetes容器编排的优势,并展示如何将二者结合,以实现持续部署、快速扩展和高效管理现代云原生应用。文章还将涵盖实际案例,帮助读者理解在真实环境下如何利用这些工具优化运维流程。
|
1天前
|
Kubernetes 应用服务中间件 Docker
Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件
Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件
|
1天前
|
运维 Kubernetes Linux
Kubernetes详解(七)——Service对象部署和应用
Kubernetes详解(七)——Service对象部署和应用
8 3
|
4天前
|
Kubernetes 应用服务中间件 nginx
Kubernetes详解(六)——Pod对象部署和应用
在Kubernetes系列中,本文聚焦Pod对象的部署和管理。首先,通过`kubectl run`命令创建Pod,如`kubectl run pod-test --image=nginx:1.12 --port=80 --replicas=1`。接着,使用`kubectl get deployment`或`kubectl get pods`查看Pod信息,添加`-o wide`参数获取详细详情。然后,利用Pod的IP地址进行访问。最后,用`kubectl delete pods [Pod名]`删除Pod,但因Controller控制器,删除后Pod可能自动重建。了解更多细节,请参阅原文链接。
11 5
|
4天前
|
Kubernetes Linux Docker
Kubernetes详解(四)——基于kubeadm的Kubernetes部署
Kubernetes详解(四)——基于kubeadm的Kubernetes部署
15 2
|
4天前
|
缓存 负载均衡 API
微服务架构下的API网关性能优化实践
【5月更文挑战第10天】在微服务架构中,API网关作为前端和后端服务之间的关键枢纽,其性能直接影响到整个系统的响应速度和稳定性。本文将探讨在高并发场景下,如何通过缓存策略、负载均衡、异步处理等技术手段对API网关进行性能优化,以确保用户体验和服务的可靠性。
|
11天前
|
存储 运维 监控
Kubernetes 集群的持续监控与优化策略
【5月更文挑战第3天】在微服务架构和容器化部署日益普及的背景下,Kubernetes 已成为众多企业的首选容器编排平台。然而,随着集群规模的增长和业务复杂度的提升,有效的集群监控和性能优化成为确保系统稳定性和提升资源利用率的关键。本文将深入探讨针对 Kubernetes 集群的监控工具选择、监控指标的重要性解读以及基于数据驱动的性能优化实践,为运维人员提供一套系统的持续监控与优化策略。
|
15天前
|
Kubernetes 应用服务中间件 nginx
K8S二进制部署详解,一文教会你部署高可用K8S集群(二)
K8S二进制部署详解,一文教会你部署高可用K8S集群(二)
|
15天前
|
Kubernetes 网络安全 数据安全/隐私保护
K8S二进制部署详解,一文教会你部署高可用K8S集群(一)
K8S二进制部署详解,一文教会你部署高可用K8S集群(一)
|
15天前
|
SQL Kubernetes 调度
【一文看懂】部署Kubernetes模式的Havenask集群
本次分享内容为havenask的kubernetes模式部署,由下面2个部分组成(部署Kubernetes模式Havenask集群、 Kubernetes模式相关问题排查),希望可以帮助大家更好了解和使用Havenask。
83 1