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/
更多内容推荐
7. TableAPI 基于 OverWindow 的操作
2023-09-08
21《重学 JAVA》-- 集合 (三)
Map(映射)集合表示一种非常复杂的集合,允许按照某个键来访问元素。Map集合是由两个集合构 成的,一个是键(key)集合,一个是值(value)集合。键集合是Set类型,因此不能有重复的元素。 而值集合是Collection类型,可以有重复的元素。Map集合中的键和值是
2021-12-22
架构实战营模块 6 作业
拆分电商系统为微服务
2022-11-23
26|PPT 常用技巧:蒙版篇之镂空蒙版
2023-09-03
2022 秋招,Java 岗最全面试攻略,吃透 25 个技术栈 Offer 拿到手软
我分享的这份秋招 Java 后端开发面试总结包含了 JavaOOP、Java 集合容器、Java 异常、并发编程、Java 反射、Java 序列化、JVM、Redis、Spring MVC、MyBatis、MySQL 数据库、消息中间件 MQ、Dubbo、Linux、ZooKeeper、 分布式 &数据结构与算法等 25 个专题技术
2022-08-23
架构训练营 - 模块 1- 作业
架构训练营-模块1-作业
2022-03-31
05|K8s 极简实战:示例应用介绍
这节课,我们来设计一个更加接近真实业务的示例应用。
2022-12-19
Android 面试指南(三),kotlin 匿名内部类写法
装箱,int数据类型---->Integer对象,拆箱,Integer对象---->int数据类型
2021-11-02
39|GitOps 最佳实践,ArgoCD 凭什么脱颖而出?
ArgoCD 能在众多 CD 工具中脱颖而出,除了 GitOps 大背景的推动以外,其自身也具备非常多优秀的特性。
2023-03-08
【LeetCode】交替合并字符串 Java 题解
给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。
2022-11-11
过去一年对我帮助最大的三本书
书犹药也,善读之可以医愚
2022-05-23
Github 上线仅六天,收获 Star 超 55K+,这套笔记能拿下 90% 以上面试
该文档曾在Github上线6天,共收获55K+star的Java面试神技(这赞数,质量多高就不用我多说了吧)非常全面,包涵Java基础、Java集合、JavaWeb、Java异常、OOP、IO与NIO、反射、注解、多线程、JVM、MySQL、MongoDB、Spring全家桶、计算机网络、分布式架构、Redi
2021-11-04
第一财经《大发单带回血最牛的导师》MBA 智库百科
大发单带回血最牛的导师【龙导➕腾讯Q̴:27666374】✅ 罔:05cs.vip✅自带邀請碼✅ 实力带赚✅ 首存即送✅ 信誉实力老品牌✅加入我们只为下水的上岸,岸上的拼搏,一期迈进美好的生活有梦想就去追,不尝试你永远不知道你的潜力有多大 最重要还是要找对一个能
2023-09-04
Python 命令行输出彩色字符串
在 Python 中打印彩色文本,不是必须掌握的编程技巧。对,不是比较掌握的,平时显示的黑色字体也不是不能用。
2022-08-10
查询语句详解(下)
2022-12-29
53|容器化实战:怎样搭建 K8s 爬虫集群?
这节课让我们把爬虫项目相关的微服务部署到 Kubernetes 中。
2023-02-11
Java 并发 JUC(java.util.concurrent)集合不安全
Java并发JUC(java.util.concurrent)集合不安全
2022-05-04
软件测试 / 测试开发丨接口测试学习笔记
本文为霍格沃兹测试开发学社学员学习笔记分享,文末附原文链接。
2023-06-02
首批!青藤通过信通院 CWPP 能力评估检验
青藤万相·主机安全平台作为首批通过这一评估的厂商,获得中国信通院泰尔实验室认证的云工作负载保护平台能力评估检验证书!
2022-06-10
导师带计划赚钱一对一平台——玩家经验分享
导师带计划赚钱一对一平台✅郑凯<企鵝 Q>⎝5310129⎠ ✅「網」⎝37qy.cc⎠✅自 带 邀 请 码 ✅输入惘芷主彻来微聊好友找我✅行业第一✅疯狂彩金天天派送✅2 顶级信誉✅顶级体验✅平台微`聊✅联.系郑荖溮✅ “十年经验,都是专业的指导/规划/技巧✅没有做不到
2023-09-05
推荐阅读
orc file format
2023-09-18
11.Docker swarm 生产部署
2023-09-30
用友系列之 YonBuilder 低代码平台概论和基本使用
低代码4. Kylin 的基本操作
2023-09-08
区块链数字货币交易所开发方案,交易平台搭建
2023-09-27
HashMap 超全源码详解 (JDK1.8)
2023-12-05
29. 应收账款和固定资产的管理技巧
2023-10-17
电子书
大厂实战PPT下载
换一换 刘向阳 | 美的集团 首席信息安全官兼软件工程院院长,欧洲科学院院士,IEEE Fellow
关立胜 | News Break 架构师
井铎铎 | 转转公司 研发中心 技术总监
评论