Kubernetes Ingress 与 AWS ALB Ingress 控制器的配合使用

2019 年 10 月 16 日

Kubernetes Ingress 与 AWS ALB Ingress 控制器的配合使用

Kubernetes Ingress 是一种 API 对象,借助它可以管理对集群中运行的 Kubernetes 服务的外部(或)内部 HTTP[s] 访问。Amazon Elastic Load Balancing Application Load Balancer (ALB) 是一个非常受欢迎的 AWS 服务,它可在应用程序层(第 7 层)跨一个区域的多个目标(例如 Amazon EC2 实例)调整传入流量的负载平衡。ALB 支持多种功能,包括基于主机或路径的路由、TLS(传输层安全性)终止、WebSocket、HTTP/2、AWS WAF(Web 应用程序防火墙)集成、综合访问日志以及运行状况检查等。


AWS ALB Ingress 控制器将在 Kubernetes 用户声明集群上的 Ingress 资源时触发创建 ALB 以及必要的 AWS 支持资源。Ingress 资源通过 ALB 将 HTTP[s] 流量路由至集群内的不同终端节点。AWS ALB Ingress 控制器支持任何 Kubernetes 集群,包括 Amazon Elastic Container Service for Kubernetes (EKS)。


术语


我们将使用下列首字母缩写词来详细介绍 Kubernetes Ingress 概念:


  • ALB:AWS Application Load Balancer

  • ENI:弹性网络接口

  • NodePort:用户为 NodePort 设置 type 字段时,Kubernetes 主服务器会从范围内分配一个静态端口,每个节点都将该端口作为进入您的服务的代理(每个节点的端口号均相同)。

  • Kubernetes Ingress 如何与 aws-alb-ingress-controller 配合使用

  • 下图详细描述了用户定义了 Ingress 资源时 aws-alb-ingress-controller 将会创建的 AWS 组件。Ingress 资源将进站流量从 ALB 路由到 Kubernetes 集群。


Kubernetes Ingress 如何与 aws-alb-ingress-controller 配合使用


下图详细描述了用户定义了 Ingress 资源时 aws-alb-ingress-controller 将会创建的 AWS 组件。Ingress 资源将进站流量从 ALB 路由到 Kubernetes 集群。



Ingress 的创建


依次执行上图中用蓝色圈数字表示的步骤:


1.控制器观察来自 API 服务器的进站事件。如果发现 Ingress 资源满足要求,则将开始创建 AWS 资源。


2.为 Ingress 资源创建 ALB。3.为 Ingress 资源中指定的每个后端创建目标组。


4.为 Ingress 资源注释中指定的每个端口创建侦听器。如果未指定端口,则将使用合理的默认值(80 或 443)。


5.为 Ingress 资源中指定的每个路径创建规则。这将确保指向特定路径的流量将被路由至所创建的正确目标组。


进站流量


AWS ALB Ingress 控制器支持两种流量模式:实例模式和 ip 模式。


用户可以通过在 Ingress 和 Service 定义中声明 alb.ingress.kubernetes.io/target-type 注释来指定流量模式。


  • 实例模式:Ingress 流量从 ALB 出发并到达为您的服务开放的 NodePort。然后将流量路由至集群内的容器 Pod。在此模式中,数据包始终会跳跃两次后才会到达目的地。

  • ip 模式:Ingress 流量从 ALB 出发,然后直接到达集群内的容器 Pod。如要使用此模式,Kubernetes 集群的联网插件(也就是 适用于 Kubernetes 的 AWS CNI 插件)必须将 ENI 上的第二个 IP 地址作为 Pod IP。在此模式中,数据包始终会跳跃一次就到达目的地。


使用 eksctl 部署 Amazon EKS


首先使用 eksctl cli 工具来部署 Amazon EKS 集群。


macOS 用户需要使用 Homebrew 来安装 eksctl:


brew install weaveworks/tap/eksctl


使用集群名称“attractive-gopher”创建 EKS 集群


eksctl create cluster --name=attractive-gopher


前往 VPC 控制台的“子网”部分。找到您的 EKS 集群的所有公有子网。


例如:


eksctl-attractive-gopher-cluster/SubnetPubliceksctl-attractive-gopher-cluster/SubnetPubliceksctl-attractive-gopher-cluster/SubnetPublic


根据此指南的定义在控制台中配置公有子网。(AWS 上的大多数 Kubernetes


分配已经为您完成了此步骤,例如 kops)


部署 AWS ALB Ingress 控制器


然后将 AWS ALB Ingress 控制器部署到 Kubernetes 集群中。


创建 IAM 策略以向 Ingress 控制器赋予正确的权限:


1.前往 IAM 控制台并选择 策略。


2.选择 创建策略 。


3.在 JSON 部分潜入模板 iam-policy.json 的内容。


4.查看策略 并另存为 “ingressController-iam-policy”


将 IAM 挂载到 EKS 工作线程节点:


1.返回 IAM 控制台。


2.选择角色 部分,然后搜索您的 EKS 工作线程节点的 NodeInstanceRole。例如:eksctl-attractive-gopher-NodeInstanceRole-xxxxxx


3.挂载策略“ingressController-iam-policy”。


部署 AWS ALB Ingress 控制器需要的 RBAC Roles 和 RoleBindings:


kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.0.0/docs/examples/rbac-role.yaml
复制代码


将 AWS ALB Ingress 控制器 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
复制代码


编辑 AWS ALB Ingress 控制器 YAML t 以包含 Kubernetes(或)Amazon EKS 集群的 clusterName。


将 –cluster-name 标记编辑为我们的 Kubernetes(或)Amazon EKS 集群的真实名称。


部署 AWS ALB Ingress 控制器 YAML:


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-]+)
复制代码


您应能看到如下输出:


-------------------------------------------------------------------------------AWS ALB Ingress controller  Release: v1.0.0  Build: git-6ee1276  Repository: https://github.com/kubernetes-sigs/aws-alb-ingress-controller-------------------------------------------------------------------------------
复制代码


部署示例应用程序


然后我们将实例 2048 游戏部署到 Kubernetes 集群并使用 Ingress 资源使其对流量开放:


部署 2048 游戏资源:


kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.0.0/docs/examples/2048/2048-namespace.yamlkubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.0.0/docs/examples/2048/2048-deployment.yamlkubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.0.0/docs/examples/2048/2048-service.yaml
复制代码


部署 2048 游戏的 Ingress 资源:


kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.0.0/docs/examples/2048/2048-ingress.yaml
复制代码


等待几秒后,验证 Ingress 资源已启用:


kubectl get ingress/2048-ingress -n 2048-game
复制代码


您应能看到如下输出:


NAME         HOSTS         ADDRESS         PORTS   AGE2048-ingress   *    DNS-Name-Of-Your-ALB    80     3m
复制代码


打开浏览器。复制并粘贴您的“DNS-Name-Of-Your-ALB”。这时您应该可以访问新部署的 2048 游戏 — 尽情玩吧!


欢迎参与


AWS ALB Ingress 控制器是 Kubernetes SIG(特殊兴趣组)AWS 的一个子项目。后者是由 Yang Yang (@M00nf1sh) 和 Kraig Amador (@bigkraig) 维护的一个全开源项目。Kubernetes SIG-AWS 的技术路线图目前由 3 位 SIG 主席主持:@d-nishi (Nishi Davidson)、@justinsb (Justin Santa Barbara) 和 @krisnova (Kris Nova)。


AWS ALB Ingress 控制器已经确定为 Kubernetes 1.13 的一个阿尔法版功能,将于 2018 年 12 月初发布。AWS 团队已经使用 Amazon EKS 对 Ingress 控制器进行了测试,它目前支持 Kubernetes 版本 1.10。


更多资源:


  • AWS ALB Ingress 控制器文档

  • aws-alb-ingress-controller Github 存储库

  • 为 aws-alb-ingress-controller 做贡献


作者介绍:


Yang Yang


Yang Yang


Yang 是 Amazon Web Services 的一名软件工程师。他是一名 Kubernetes 拥趸,已在 Amazon 作为全堆栈工程师工作了四年。


Kraig Amador


Kraig Amador


Kraig 是 Ticketmaster 的一名高级总监,他领导的团队率先推动 AWS 的采用和迁移。他也是最早在 AWS 上运行 Kubernetes 来处理企业工作负载的采用者之一,促进了 AWS ALB Ingress 控制器的发展。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/kubernetes-ingress-aws-alb-ingress-controller/


2019 年 10 月 16 日 11:17266
用户头像

发布了 1191 篇内容, 共 25.4 次阅读, 收获喜欢 15 次。

关注

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

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

Week02 作业

极客大学架构师训练营

week2作业

雪涛公子

Python中的下划线

shiziwen

Python

架构师训练营第二周感悟

路人

架构师训练营 - 学习总结 - 第二讲

吕浩

数据库大咖讲坛活动6月18日墨天轮平台线上举行,阿里腾讯达梦众多数据库大咖齐聚!

墨天轮

数据库 腾讯云 阿里云 数据库设计

第二周学习总结

CP

【架构训练营】第二期

云064

架构师训练营第 02 周——总结

李伟

极客大学架构师训练营

依赖倒置(DIP)

Lane

极客大学架构师训练营

因为知道了30+款在线工具,我的工作效率提升500%!

Hollis

架构师训练营第 0 期 - 第 2 周 - 学习总结

极客大学架构师训练营

第二周作业

晓雷

架构师训练营 - 第二周 - 命题作业

Anrika

架构师 极客大学架构师训练营

第二周作业

CP

第二周作业:设计原则

Larry

依赖倒置原则 & 类图优化

lei Shi

第二周总结

Young

第2周作业

sunpengjian

OOD四大原则

金桔🍊

架构师训练营——设计模式篇_作业

独孤魂

作业

架构师训练营 第二周 学习总结

极客

实现自己架构的主要手段

重新来过

依赖倒置原则

Young

不要再用面向对象语言编写面向过程的代码了

鸠摩智

不懂什么是锁?看看这篇你就明白了

cxuan

Java 并发

如何理解依赖倒置

丿淡忘

极客大学架构师训练营 依赖倒置原则

架构师训练营 - 第二周 - 学习总结

Anrika

架构师 极客大学架构师训练营

架构师系列之面向对象即设计原则

彭阿三

架构

最初的梦想

小天同学

写作 成长 梦想

接口隔离原则设计缓存Cache工具类

王鹏飞

Kubernetes Ingress 与 AWS ALB Ingress 控制器的配合使用-InfoQ