在 AWS EKS 平台上发布 K8S 服务(上)

2021-02-26

背景

目前已经有许多AWS EKS的客户通过使用ALB Ingress Controller来实现南北向七层流量的导入,在项目实施过程中碰到的一个比较集中的问题就是如何使用同一个Application Load Balancer(ALB)来实现对入口流量按照多个路由规则匹配来转发到EKS集群中运行的多个服务或者Pod内,避免因为多服务或者微服务架构中产生的大量服务对应生成几十个甚至数百个ALB的情况,进而避免增加运维管理负担以及资源使用上不必要的成本开销。

本文分为上下两篇,分别介绍在EKS上发布多个服务以及单个服务的不同方法,同时提供具体的操作步骤供大家动手实验。

上篇通过具体的示例来演示在同一个ALB Ingress Controller(V1) Ingress对象上通过扩展ALB Rule增加不同的URl路径映射来实现这个需求。同时随着AWS Load Balancer Controller在2020年10月份的发布,通过新的Annotation: alb.ingress.kubernetes.io/group.name注释来支持在不同的Ingress对象上共享同一个ALB,本文同样通过具体的示例介绍如何使用这个新功能。文中的实验会给读者一个相对直观的认识,从而理解和掌握在AWS EKS平台上灵活使用Ingress来实现HTTP(S)流量导入。通过同时介绍ALB Ingress Controller(V1)和AWS Load Balancer Controller(V2)Ingress的不同定义方法来实现绑定到同一个ALB的实现来对比两个版本的功能,进而更好的区别V1和V2中的异同点,避免在概念理解和项目实施过程中产生混淆。

下篇介绍在AWS Load Balancer Controller(V2)中发布的其他几项重要功能,包括对四层流量由Network Load Balancer转发下的IP模式支持,以及通过引入Target Group Binding CRD来实现将EKS中的服务灵活地绑定到已有Target Group上的新功能。

原理

下图介绍了AWS Load Balancer Controller创建的 AWS 组件,以及用户端流量经过 AWS Load Balancer Controller(图中为alb-ingress-controller组件)创建的ALB,然后通过URL路径匹配将不同路径的HTTP(S)请求转发到在K8S节点上Pod的过程,(mode instance)和(mode ip)分别代表了AWS Load Balancer Controller所支持的实例和IP两种模式,本文中的演示使用的均为IP模式,即将流量直接发送到Pod所绑定的ENI的IP。

操作步骤

前提:当前使用的用户具有Administrator Access权限

准备Cloud9实验环境

在AWS管理控制台中选择Cloud9服务,然后创建一个名称为:eksworkshop的环境,将Cost-saving setting选项设置为:After four hours,其他配置保持默认。创建完毕后关闭Welcome和底部的工作区页面,然后在主工作区中打开一个新的Terminal。

在IAM服务中,使用链接创建一个名称为:eksworkshop-admin的角色,确认:AWS service和EC2被选中,点击下一步,确认AdministratorAccess策略被选中,点击下一步,跳过Tag选项,点击下一步在Review页面中输入eksworkshop-admin作为新角色的名称,点击创建角色完成创建。

点击链接在EC2服务中查看刚刚创建的Cloud9环境对应的EC2实例,选中该实例,然后在菜单选择:Actions / Security / Modify IAM Role,在IAM Role的下拉列表中选择eksworkshop-admin的角色,点击保存。

返回刚刚创建好的Cloud9环境,点击页面右上角的齿轮,打开首选项设置页面,然后选择AWS SETTINGS,关闭AWS managed temporary credentials单选框,最后关闭首选项设置页面。

在打开的Terminal中运行以下命令确认临时的秘钥凭证已经被删除干净,并验证在返回结果 ARN 中包含eksworkshop-admin。

rm -vf ${HOME}/.aws/credentials
aws sts get-caller-identity

返回技术博客