Kubernetes Ingress 是一种 API 对象,借助它能够管理对集群中运行的 Kubernetes 服务的外部(或)内部 HTTP[s] 访问。Amazon Elastic Load Balancing Application Load Balancer (ALB) 是一个很是受欢迎的 AWS 服务,它可在应用程序层(第 7 层)跨一个区域的多个目标(例如 Amazon EC2 实例)调整传入流量的负载平衡。ALB 支持多种功能,包括基于主机或路径的路由、TLS(传输层安全性)终止、WebSocket、HTTP/二、AWS WAF(Web 应用程序防火墙)集成、综合访问日志以及运行情况检查等。html
AWS ALB Ingress 控制器将在Kubernetes 用户声明集群上的 Ingress 资源时触发建立 ALB 以及必要的 AWS 支持资源。Ingress 资源经过 ALB 将 HTTP[s] 流量路由至集群内的不一样终端节点。AWS ALB Ingress 控制器支持任何 Kubernetes 集群,包括 Amazon Elastic Container Service for Kubernetes (EKS)。node
咱们将使用下列首字母缩写词来详细介绍 Kubernetes Ingress 概念:git
NodePort
设置 type
字段时,Kubernetes 主服务器会从范围内分配一个静态端口,每一个节点都将该端口做为进入您的服务
的代理(每一个节点的端口号均相同)。下图详细描述了用户定义了 Ingress 资源时 aws-alb-ingress-controller 将会建立的 AWS 组件。Ingress 资源将进站流量从 ALB 路由到 Kubernetes 集群。github
依次执行上图中用蓝色圈数字表示的步骤:json
80
或 443
)。AWS ALB Ingress 控制器支持两种流量模式:实例模式和 ip 模式。
用户能够经过在 Ingress 和 Service 定义中声明 alb.ingress.kubernetes.io/target-type 注释来指定流量模式。后端
首先使用 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/SubnetPublic<USWEST2a>
eksctl-attractive-gopher-cluster/SubnetPublic<USWEST2b>
eksctl-attractive-gopher-cluster/SubnetPublic<USWEST2c>
根据此指南的定义在控制台中配置公有子网。(AWS 上的大多数 Kubernetes
分配已经为您完成了此步骤,例如 kops)
而后将 AWS ALB Ingress 控制器部署到 Kubernetes 集群中。
建立 IAM 策略以向 Ingress 控制器赋予正确的权限:
将 IAM 挂载到 EKS 工做线程节点:
部署 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.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.0.0/docs/examples/2048/2048-deployment.yaml kubectl 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 AGE 2048-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。
更多资源: