AWS EKS 集成Load Balancer Controller 对外暴露互联网可访问API [AWS 中国宁夏区]

本文主要介绍AWS EKSAWS Elastic Load Balancing的集成;我们可以通过AWS ELB将运行在EKS中的服务暴露出去,供互联网访问。

AWS ELB提供的负载均衡,高可用,按流量自动弹性和自带的安全性服务(比如基础版的AWS Shield)给为我们的网络服务提供了高质量的保证。虽然我们也可以直接让K8S Service服务直接以public ip的方式来对外服务,但是一般技术和成本等综合来考虑不如AWS ELB。

如下图,AWS ELB充当运行在AWS上的动态API服务的总入口,LB可以将流量分布到后面的多种计算平台,并在多个AWS可用区和计算节点间分配网络流量以提高应用程序可扩展性和可靠性。

安装AWS Load Balancer Controller add-on

我们可以参考Installing the AWS Load Balancer Controller add-onaws-load-balancer-controller

创建AWSLoadBalancerControllerIAMPolicy

下载iam_policy.json

bash 复制代码
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.14.0/docs/install/iam_policy_cn.json

用下载好的iam_policy.json创建policy

bash 复制代码
aws iam create-policy \
    --policy-name AWSLoadBalancerControllerIAMPolicy \
    --policy-document file://iam_policy_cn.json

截图如下

创建ServiceAccount

为ELB创建service account,其中你需要将eks-cluster-nameaws account替换为你自己实际的值。

bash 复制代码
  eksctl create iamserviceaccount \
  --cluster=eks-cluster-name \
  --namespace=kube-system \
  --name=aws-load-balancer-controller \
  --role-name AmazonEKSLoadBalancerControllerRole \
  --attach-policy-arn=arn:aws-cn:iam::aws-account:policy/AWSLoadBalancerControllerIAMPolicy \
  --approve

截图如下

安装cert-manager

我们需要安装cert-manager以便将证书配置注入Webhook,最简单的方式就是在AWS EKS插件商店中国进行可视化安装。

截图如下

如果你喜欢命令行操作也可以执行

bash 复制代码
kubectl apply \
    --validate=false \
    -f https://github.com/jetstack/cert-manager/releases/download/v1.13.5/cert-manager.yaml

下载AWS Load Balancer Controller的

bash 复制代码
https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.13.3/v2_13_3_full.yaml

这里推荐使用helm进行安装,其中集群名称换为自己实际的集群名称

bash 复制代码
helm repo add eks https://aws.github.io/eks-charts
helm repo update eks
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
  -n kube-system \
  --set clusterName=my-cluster \
  --set serviceAccount.create=false \
  --set serviceAccount.name=aws-load-balancer-controller 

安装后我们可以进行检查,出现aws-load-balancer-controller 2/2字样就证明安装成功了

bash 复制代码
kubectl get deployment -n kube-system aws-load-balancer-controller

截图如下

功能测试

我们可以按照自己的需求使用AWS ALBAWS NLB。ALB和NLB都隶属于AWS ELB,区别在ALB专注于L7,NLB专注于L4;ALB是我们使用HTTP协议时首选,NLB是我们使用自定义协议、MQTT等非HTTP协议的首选,NLB可以同时满足L4/L7的负载需求但是ALB只能用于L7。

我们可以参考Application load balancing on Amazon EKSNetwork load balancing on Amazon EKS来进行功能测试

比如按照Application load balancing on Amazon EKS,我最终得到了一个2048页游。

关于AWS EKS和AWS ELB的集成的一些建议

我们可以在kubernetes-sigs AWS Load Balancer Controller查看EKS+LB相关的yaml详细设置。

一般我们在写好LB相关的yaml后,应用yaml会自动创建一个LB,这在大多数全新上线的部署场景是非常方便的;但是如果我们已经有了一个LB用于普通的EC2应用或者EKS已经给我创建了一个LB,我们现在想复用现有的LB,那么我们可以考虑TargetGroupBinding,它的原理是我们只需要提前设置好TargetGroup和LB的关系,然后我们只需要在yaml中将自己的服务和TargetGroup绑定即可。

docs.amazonaws.cn/eks/latest/...

docs.amazonaws.cn/eks/latest/...

github.com/kubernetes-...

相关推荐
那我掉的头发算什么6 小时前
【Mybatis】Mybatis-plus使用介绍
服务器·数据库·后端·spring·mybatis
会算数的⑨6 小时前
Kafka知识点问题驱动式的回顾与复习——(一)
分布式·后端·中间件·kafka
Hx_Ma166 小时前
SSM搭建(三)Spring整合SpringMVC框架
java·后端·spring
William_cl6 小时前
ASP.NET路由长度约束精讲:[HttpGet (“{name:minlength (3)}“)] 字符长度限制吃透,附避坑指南 + 实战代码
后端·asp.net
我命由我123456 小时前
Java 泛型 - Java 泛型通配符(上界通配符、下界通配符、无界通配符、PECS 原则)
java·开发语言·后端·java-ee·intellij-idea·idea·intellij idea
szhf786 小时前
SpringBoot Test详解
spring boot·后端·log4j
无尽的沉默6 小时前
SpringBoot整合Redis
spring boot·redis·后端
摸鱼的春哥6 小时前
春哥的Agent通关秘籍07:5分钟实现文件归类助手【实战】
前端·javascript·后端
Victor3566 小时前
MongoDB(2)MongoDB与传统关系型数据库的主要区别是什么?
后端