写点什么

在 EKS 平台上合并 ALB Ingress Controller

  • 2019-12-16
  • 本文字数:4235 字

    阅读完需:约 14 分钟

在 EKS 平台上合并 ALB Ingress Controller
## 1. 背景


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/


2019-12-16 15:491201

评论

发布
暂无评论
发现更多内容

企业网站快速搭建的重点|软件定制app小程序建设

Geek_16d138

网站建设 小程序开发 app定制开发

面试官:网关如何实现限流?

王磊

Java 面试 java面试

光纤的跳线和尾纤

小齐写代码

GreatSQL社区与Amazon、Facebook、Tencent共同被MySQL致谢

GreatSQL

greatsql

10m带宽香港服务器的优势

Geek_f19a80

服务器

第9期 | 用友BIP项目云,助力企业投资类项目管理降本增收

用友BIP

项目管理

从热爱到深耕,全国Top10开源软件出品人探索“开源云上行”

华为云开发者联盟

开源 华为云 华为云开发者联盟 先锋开发者云上说

Embedding技术与应用(4): Embedding应用工程探析

Baihai IDP

人工智能 深度学习 程序员 AI 白海科技

鑫裕集团:引领建筑行业创新,开启数智化转型新篇章

用友BIP

建筑数智化

探索容灾架构演进之路-从单点到异地多活

柠檬汁Code(binbin0325)

容灾 异地多活 备份 & 恢复 部署架构 同城双活

第六期 |《实时洞察 智能运营一用友企业绩效管理白皮书》解读

用友BIP

企业绩效

开发者的福利-Amazon CodeWhisperer

归来

大模型 Amazon CodeWhisperer AWS Toolkit

app小程序定制开发的优势

Geek_16d138

小程序开发 app定制开发

专家观点:基于数智化GOT模型的流程制造业绩效管理

用友BIP

绩效管理

极速进化,融合“新“生 | StarRocks Summit 2023 技术交流峰会圆满落幕

StarRocks

数据库 OLAP StarRocks

业财融合促进企业高质量发展

用友BIP

业财融合

大模型重塑软件设计,南京真我加入飞桨技术伙伴,大模型生态圈成员又添一员!

飞桨PaddlePaddle

大模型 星河社区 AI原生应用

Kubernetes Gateway API 攻略:解锁集群流量服务新维度!

SEAL安全

Gateway 运维‘ kubernetes 运维 企业号11月PK榜

「Macos最新」XMind for mac v24.01中文版

加油,小妞!

思维导图 XMind

统一身份认证平台之SSO建设

权说安全

单点登录

华为云康宁:携手伙伴,基于核心技术构筑健康可持续新生态

华为云开发者联盟

云计算 后端 华为云 大模型 华为云开发者联盟

打造数字经济全新引擎,用友iuap构建实体经济数智底座

用友BIP

数智底座

租用VPS的终极指南:提升您的网络性能和灵活性

一只扑棱蛾子

VPS

龙蜥社区召开理事闭门会,讨论多项社区规划

OpenAnolis小助手

阿里云 开源 龙蜥社区 开放原子 理事会

微信多开插件:WeChatHooks for mac

加油,小妞!

微信多开 WeChatHooks 微信插件

在 EKS 平台上合并 ALB Ingress Controller_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章