Kubernetes Ingress 是一种 API 对象,借助它可以管理对集群中运行的 Kubernetes 服务的外部(或)内部 HTTPS访问,通过ALB ingress controller可以在kubernetes上部署服务时自动触发创建 ALB 以及必要的 AWS 支持资源。下图详细描述了用户定义了 Ingress 资源时 aws-alb-ingress-controller 将会创建的 AWS 组件。
[](https://s3.cn-north-1.amazonaws.com.cn/awschinablog/merging-alb-progress-controller-on-the-eks-platform1.png)](https://s3.cn-north-1.amazonaws.com.cn/awschinablog/merging-alb-progress-controller-on-the-eks-platform1.jpg)
当客户在EKS上部署微服务时,他们发现AWS ALB Ingress Controller会为每个入口资源创建一个新的ALB。 当客户有数百个微服务时,也会生成数百个ALB,从管理和经济成本上分析,可能会让客户的使用成本变得非常高。 所以支持跨ingress资源重用ALB是客户的一个重要需求。 此外,每个帐户ALB的数量限制为50个,如果超过此限制需要不断的提升ALB的数量,这增加了客户运维的风险和负担。因此,针对这个现状,结合开源项目实现了一套合并ALB ingress controller的方法来解决客户的问题,其原理是:合并Ingress Controller并允许创建ingress资源,这些ingress资源将被组合在一起以创建将由同一控制器管理的新入口资源,工作流程见下图:
[](https://s3.cn-north-1.amazonaws.com.cn/awschinablog/merging-alb-progress-controller-on-the-eks-platform2.png)](https://s3.cn-north-1.amazonaws.com.cn/awschinablog/merging-alb-progress-controller-on-the-eks-platform2.jpg)
## 2. 合并过程
### 1) 前置条件
* Create an AWS account
* Create a Workspace
* Create an SSH key
* Install Kubernetes Tools
* Create an IAM role for your Workspace
* Attach the IAM role to your Workspace
* Update IAM settings for your Workspace
Note: 前置条件过程可以参考链接: https://eksworkshop.com/eksctl/
### 2) 安装kubectl过程
**创建安装目录(可选)**
YAML
$mkdir -p ~/.kube
#### 安装kubectl:
YAML
$sudo curl --silent --location -o /usr/local/bin/kubectl " https://storage.googleapis.com/kubernetes-release/release/v1.14.9/bin/linux/amd64/kubectl" sudo chmod +x /usr/local/bin/kubectl
#### 安装AWS IAM Authenticator(或升级到AWS CLI 的版本 1.16.232 或更高版本中):
YAML
$ go get -u -v github.com/kubernetes-sigs/aws-iam-authenticator/cmd/aws-iam-authenticator
sudo mv ~/go/bin/aws-iam-authenticator /usr/local/bin/aws-iam-authenticator
#### 注:AWS CLI 的版本 1.16.232 或更高版本中可用的 aws eks get-token 命令支持客户端安全令牌创建
#### ,所以也可以升级当前的AWS cli到最新版本,可以参考如下链接:
https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/install-cliv2-linux.html
#### 安装JQ:
sudo yum -y install jq
**下载与安装** ****[](https://eksctl.io/) **:**
YAML
$curl --silent --location "https://github.com/weaveworks/eksctl/releases/download/latest_release/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
$sudo mv -v /tmp/eksctl /usr/local/bin
$eksctl version
###
### 3) 创建EKS 集群(命令行中的AWS_REGION换成真实region)并开启访问alb-ingress权限
YAML
$eksctl create cluster --name=eksworkshop-eksctl --nodes=3 --node-ami=auto --region=${AWS_REGION} --alb-ingress-access
$kubectl get nodes
###
### 4) 部署Ingress_controller
YAML
$kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.3/docs/examples/rbac-role.yaml
$ curl -sS "https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.0.0/docs/examples/alb-ingress-controller.yaml" > alb-ingress-controller.yaml
Note:Change the parameter of alb-ingress-controller.yaml:–cluster-name = cluster-name
$ kubectl apply -f alb-ingress-controller.yaml
$kubectl logs -n kube-system $(kubectl get po -n kube-system | egrep -o alb-ingress[a-zA-Z0-9-]+)
### 5) 安装Ingress-Merge
YAML
$helm install --namespace kube-system --name ingress-merge ./helm
###
### 6) 部署demo application 2048
YAML
$curl -sS "https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.3/docs/examples/2048/2048-namespace.yaml" > 2048-namespace.yaml
$ curl -sS "https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.3/docs/examples/2048/2048-deployment.yaml " > 2048-deployment.yaml
$ curl -sS "https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.3/docs/examples/2048/2048-service.yaml" > 2048-service.yaml
$kubectl apply -f 2048-namespace.yaml
$kubectl apply -f 2048-deployment.yaml
$kubectl apply -f 2048-service.yaml
### 7) 部署demo application echoserver
YAML
$ curl -sS "https://github.com/kubernetes-sigs/aws-alb-ingress-controller/blob/master/docs/examples/echoservice/echoserver-deployment.yaml" > echoserver-deployment.yaml
$ curl -sS "https://github.com/kubernetes-sigs/aws-alb-ingress-controller/blob/master/docs/examples/echoservice/echoserver-service.yaml" > echoserver-service.yaml
#### **Note**: 修改echoserver相关的yaml文件中的namespace为同一个.
###
### 8) 创建configmap
YAML
$ cat merge-ingress-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: merged-ingress
namespace: game
data:
annotations: |
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
$kubectl apply -f merge-ingress-cm.yaml
### 9) 创建Merge ingress
YAML
$ cat merge-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: echoserver-ingress
namespace: game
annotations:
kubernetes.io/ingress.class: merge
merge.ingress.kubernetes.io/config: merged-ingress
labels:
app: echoserver-ingress
spec:
rules:
- http:
paths:
- path: /echo
backend:
serviceName: echoserver
servicePort: 8080
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: "2048-ingress"
namespace: "game"
annotations:
kubernetes.io/ingress.class: merge
merge.ingress.kubernetes.io/config: merged-ingress
labels:
app: 2048-ingress
spec:
rules:
- http:
paths:
- path: /*
backend:
serviceName: "service-2048"
servicePort: 80
$kubectl apply -f merge-ingress.yaml
$ cat ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: merged-ingress
namespace: game
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
spec:
rules:
- http:
paths:
- path: /echo
backend:
serviceName: echoserver
servicePort: 8080
- path: /game
backend:
serviceName: service-2048
servicePort: 80
$kubectl apply -f ingress.yaml
### 10) 检查生成的ALB和对应的规则
[](https://s3.cn-north-1.amazonaws.com.cn/awschinablog/merging-alb-progress-controller-on-the-eks-platform3.png)](https://s3.cn-north-1.amazonaws.com.cn/awschinablog/merging-alb-progress-controller-on-the-eks-platform3.jpg)
[](https://s3.cn-north-1.amazonaws.com.cn/awschinablog/merging-alb-progress-controller-on-the-eks-platform4.png)](https://s3.cn-north-1.amazonaws.com.cn/awschinablog/merging-alb-progress-controller-on-the-eks-platform4.jpg)
###
### 11) 访问这个服务来验证,出现如下内容即表示成功
第一个是echoserver:
[](https://s3.cn-north-1.amazonaws.com.cn/awschinablog/merging-alb-progress-controller-on-the-eks-platform5.png)](https://s3.cn-north-1.amazonaws.com.cn/awschinablog/merging-alb-progress-controller-on-the-eks-platform5.jpg)
第二个是2048:
[](https://s3.cn-north-1.amazonaws.com.cn/awschinablog/merging-alb-progress-controller-on-the-eks-platform6.png)](https://s3.cn-north-1.amazonaws.com.cn/awschinablog/merging-alb-progress-controller-on-the-eks-platform6.jpg)
#### 注:请自行修改nginx中对于path的处理逻辑。
###
### 12) 总结
通过ingress-merge-controller将服务对应的rules附加到ALB上,这样我们完成了原来需要两个ALB合并成一个ALB的目的,减少了客户管理的ALB的数量并由此可以降低成本。
需要提醒大家以下几点:
* Ingress controller 只支持http 和Https协议;
* 服务只支持nodeport和Loadbalancer 类型,即:Type=NodePort 或Service.Type=LoadBalancer
###
### 13) 参考资料
https://github.com/jakubkulhan/ingress-merge
https://github.com/kubernetes-sigs/aws-alb-ingress-controller
作者介绍:
### [](https://amazonaws-china.com/cn/blogs/china/tag/%E7%8E%8B%E5%BB%BA%E5%88%A9/)
王建利,AWS解决方案架构师,主要负责企业级大客户的上云工作,服务客户涵盖从能源,互联网,传统生产制造,擅长DevOps和容器领域。具备 15 年 IT 专业服务经验,历任程序设计师、项目经理、解决方案架构师。
</footer>
本文转载自 AWS 技术博客。
原文链接:https://amazonaws-china.com/cn/blogs/china/merging-alb-progress-controller-on-the-eks-platform/
更多内容推荐
【刷题记录】21. 合并两个有序链表
重温算法 - 合并两个有序链表
2022-07-25
AWS DataSync 支持在 AWS、Google Cloud 和 Azure 之间移动数据
亚马逊最近宣布,AWS DataSync现在支持将Google Cloud Storage和Azure Files存储作为存储位置。数据服务的这两个新选项有助于数据在AWS中的移入和移出,但数据传输费用可能仍然是一个限制条件。
29. 应收账款和固定资产的管理技巧
2023-10-17
Amazon Aurora 读写能力扩展之 ShardingSphere-JDBC 篇
文章来源亚马逊 AWS 官方博客
2022-04-27
Amazon CodePipeline 与 GitHub 集成
今年2月,Amazon CodePipeline 已经由光环新网运营的中国(北京)区域和由西云数据运营的中国(宁夏)区域提供。
2022-05-22
启科 QuSaaS 真随机数解决方案与 Amazon Braket 结合实践
作者:1.丘秉宜,2.邵伟,3.黄文,4.郭梦杰
2022-12-22
从乱到治谈数字化转型——一个操盘手的回忆录
讲师介绍 李强,沃尔玛中国 高级总监、 IT技术开发团队负责人 内容看点 结合创业团队成功上市的经验,为营业额在 10 亿以内的中小企业的数字化战略,提供一些可行的方案 分享大型国际化 IT 团队的管理经验,为营业额在 10 亿以上的中大型企业的数字化转型,提供一些中肯的建议
2022-08-09
JavaScript 闭包
做前端的可太需要了解闭包了,几乎每个面试都会问到闭包,闭包的重要性不言而喻。什么是闭包:闭包一般是指那些引用了另一个函数作用域中变量的函数,通常是在嵌套函数中实现的。也就是说,闭包让你可以在一个内层函数中访问到其外层函数的作用域。
2022-06-12
AWS CEO 再回应:不会从亚马逊剥离,可能会继续收购
其多年来已经投资了数十家小公司。
AWS CEO Adam Selipsky 演讲 Keynote @ re:Levent2022
Join Adam Selipsky, CEO of Amazon Web Services, as he looks at the ways that forward-thinking builders are transforming industries and even future, powered by AWS. He highlights innovations in data, infrastructure, security, and more that
2022-12-05
TLS 1.2 成为亚马逊云科技最低 TLS 协议级别
亚马逊云科技最近宣布,TLS 1.2将成为API端点的最低协议级别。
16. Middleware:OpenTelemetry 总结
2023-09-26
第三节 目标计划管理“三九”说明书之二——定计划
2023-10-17
读《A Philosophy of Software Design》——(16)
读《A Philosophy of Software Design》——(16)
2022-04-07
物联网场景中灵活实施对设备的控制管理
随着 Amazon IoT 设备的普及,如何安全、灵活地管理对设备的控制权限变得更加复杂。在以往简单的应用场景中,控制端 APP 仅仅需要使用 Amazon IoT 平台对一个设备进行控制。但随着家庭拥有的物联网设备愈加丰富,控制端 APP 需要同时控制多个设备。
2022-01-13
期末测验|来赴一场 100 分之约!
结课测试共20道题,10道单选,10道多选,满分为100分,快来挑战吧!
2022-12-29
如何获得一场黑客马拉松的胜利?听听 AWS 特约评委怎么说
5月9日,以“码力集结,与众不凡”为主题的FinClip Hackathon 圆满结束!本次开发大赛吸引了来自各行业的2000多名移动开发者汇聚一堂,150位参赛选手同台竞技,共同探索「小程序 」技术的能力边界。
2022-05-30
如何通过云效 Codeup 完成代码合并 | 云效
如何通过云效Codeup完成代码合并云效代码管理Codeup是阿里云出品的一款企业级代码管理平台,提供代码托管、代码评审、代码扫描、质量检测等功能,全方位保护企业代码资产,帮助企业实现安全、稳定、高效的研发管理。
2022-04-22
开源工具系列 3:Prowler
Prowler 是一个命令行工具,可帮助您进行 AWS 安全评估、审计、强化和事件响应。
2023-02-06
金融行业商业分析案例:金融第三方支付案例分析
2022-12-30
推荐阅读
轻松玩转 70 亿参数大模型!借助 Walrus 在 AWS 上部署 Llama2
2023-08-23
大中华区联合企业捷成集团在 AWS 上使用 F5 防御恶意 Web 攻击
2023-02-27
如何利用罗拉 ROLA-IP 代理 IP 提高运营效率和安全性
2023-11-22
24. 搭班子 - 团队管理的 16 字真经
2023-10-17
第二节 中层三大挑战如何实现上下同欲
2023-10-17
致谢
2023-12-01
AWS CodeWhisperer 上手初体验安装与使用
2023-06-06
电子书
大厂实战PPT下载
换一换 秦烁 | 字节跳动 高级前端工程师
郑吉敏 | 去哪儿网 机票目的地事业群/技术总监
杨文博 博士 | 蜚语 CTO
评论