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。
更多資源: