春衣少年当酒歌,起舞四顾以笑和。这篇文章主要讲述AWS eks绑定alb 使用aws-load-balancer-controller(Ingress Controller)提供服务相关的知识,希望能为你提供帮助。
作者:SRE运维博客最近在AWS 平台创建了EKS 用于测试环境项目,EKS 创建完以后我打算使用 Ingress 控制器 来暴露服务,ingress 前在添加一个ALB 负载均衡器,这样就可以实现完全的高可用了。但是在创建好 ingress 却发现无法调通服务,查看 aws 官方文档 Amazon EKS 上的应用程序负载均衡 发现需要使用 aws-load-balancer-controller.本文档的目标:
博客地址:https://www.cnsre.cn/
文章地址:https://www.cnsre.cn/posts/211217431135/
相关话题:https://www.cnsre.cn/tags/aws/
- 创建 EKS ALB 所需要的角色。
- 创建 EKSaws-load-balancer-controller
- 创建 EKS pod 服务
- 使用 ALB 将 pod 服务暴露出去
AWS Load Balancer Controller 是帮助管理 Kubernetes 集群的弹性负载均衡器的控制器。
- 它通过供应应用程序负载均衡器来满足 Kubernetes Ingress 资源。
- 它通过提供 网络负载均衡器来满足 Kubernetes Service 资源。
【AWS eks绑定alb 使用aws-load-balancer-controller(Ingress Controller)提供服务】
?1]:控制器[监视?来自 API 服务器的?入口事件?。当它找到满足其要求的入口资源时,它开始创建 AWS 资源。?2]:在 AWS 中为新的入口资源创建了一个 [ALB? (ELBv2)。此 ALB 可以面向 Internet 或内部。您还可以使用注释指定它在其中创建的子网。?3]:在 AWS 中为入口资源中描述的每个独特的 Kubernetes 服务创建[目标组?。?4]:为入口资源注释中详述的每个端口创建[侦听器?。如果未指定端口,则使用合理的默认值 (?
80
?或?443
?)。证书也可以通过注释附加。?5]:为入口资源中指定的每个路径创建[规则?。这可确保将特定路径的流量路由到正确的 Kubernetes 服务。
安装前的准备- EKS 已经创建完毕
- 准备 两个 Public 子网
- 能够创建 IAM 策略 的账户
创建策略
? 打开 ?IAM_Policy.json? 复制内容粘贴到 ?json
? 下一步:标签
?AWSLoadBalancerControllerIAMPolicy
? 你也可以自定义名称。然后创建策略。
"Version": "2012-10-17",
"Statement": [
"Effect": "Allow",
"Action": [
"iam:CreateServiceLinkedRole",
"ec2:DescribeAccountAttributes",
"ec2:DescribeAddresses",
"ec2:DescribeAvailabilityZones",
"ec2:DescribeInternetGateways",
"ec2:DescribeVpcs",
"ec2:DescribeSubnets",
"ec2:DescribeSecurityGroups",
"ec2:DescribeInstances",
"ec2:DescribeNetworkInterfaces",
"ec2:DescribeTags",
"ec2:GetCoipPoolUsage",
"ec2:DescribeCoipPools",
"elasticloadbalancing:DescribeLoadBalancers",
"elasticloadbalancing:DescribeLoadBalancerAttributes",
"elasticloadbalancing:DescribeListeners",
"elasticloadbalancing:DescribeListenerCertificates",
"elasticloadbalancing:DescribeSSLPolicies",
"elasticloadbalancing:DescribeRules",
"elasticloadbalancing:DescribeTargetGroups",
"elasticloadbalancing:DescribeTargetGroupAttributes",
"elasticloadbalancing:DescribeTargetHealth",
"elasticloadbalancing:DescribeTags"
],
"Resource": "*"
,
"Effect": "Allow",
"Action": [
"cognito-idp:DescribeUserPoolClient",
"acm:ListCertificates",
"acm:DescribeCertificate",
"iam:ListServerCertificates",
"iam:GetServerCertificate",
"waf-regional:GetWebACL",
"waf-regional:GetWebACLForResource",
"waf-regional:AssociateWebACL",
"waf-regional:DisassociateWebACL",
"wafv2:GetWebACL",
"wafv2:GetWebACLForResource",
"wafv2:AssociateWebACL",
"wafv2:DisassociateWebACL",
"shield:GetSubscriptionState",
"shield:DescribeProtection",
"shield:CreateProtection",
"shield:DeleteProtection"
],
"Resource": "*"
,
"Effect": "Allow",
"Action": [
"ec2:AuthorizeSecurityGroupIngress",
"ec2:RevokeSecurityGroupIngress"
],
"Resource": "*"
,
"Effect": "Allow",
"Action": [
"ec2:CreateSecurityGroup"
],
"Resource": "*"
,
"Effect": "Allow",
"Action": [
"ec2:CreateTags"
],
"Resource": "arn:aws-cn:ec2:*:*:security-group/*",
"Condition":
"StringEquals":
"ec2:CreateAction": "CreateSecurityGroup"
,
"Null":
"aws:RequestTag/elbv2.k8s.aws/cluster": "false"
,
"Effect": "Allow",
"Action": [
"ec2:CreateTags",
"ec2:DeleteTags"
],
"Resource": "arn:aws-cn:ec2:*:*:security-group/*",
"Condition":
"Null":
"aws:RequestTag/elbv2.k8s.aws/cluster": "true",
"aws:ResourceTag/elbv2.k8s.aws/cluster": "false"
,
"Effect": "Allow",
"Action": [
"ec2:AuthorizeSecurityGroupIngress",
"ec2:RevokeSecurityGroupIngress",
"ec2:DeleteSecurityGroup"
],
"Resource": "*",
"Condition":
"Null":
"aws:ResourceTag/elbv2.k8s.aws/cluster": "false"
,
"Effect": "Allow",
"Action": [
"elasticloadbalancing:CreateLoadBalancer",
"elasticloadbalancing:CreateTargetGroup"
],
"Resource": "*",
"Condition":
"Null":
"aws:RequestTag/elbv2.k8s.aws/cluster": "false"
,
"Effect": "Allow",
"Action": [
"elasticloadbalancing:CreateListener",
"elasticloadbalancing:DeleteListener",
"elasticloadbalancing:CreateRule",
"elasticloadbalancing:DeleteRule"
],
"Resource": "*"
,
"Effect": "Allow",
"Action": [
"elasticloadbalancing:AddTags",
"elasticloadbalancing:RemoveTags"
],
"Resource": [
"arn:aws-cn:elasticloadbalancing:*:*:targetgroup/*/*",
"arn:aws-cn:elasticloadbalancing:*:*:loadbalancer/net/*/*",
"arn:aws-cn:elasticloadbalancing:*:*:loadbalancer/app/*/*"
],
"Condition":
"Null":
"aws:RequestTag/elbv2.k8s.aws/cluster": "true",
"aws:ResourceTag/elbv2.k8s.aws/cluster": "false"
,
"Effect": "Allow",
"Action": [
"elasticloadbalancing:AddTags",
"elasticloadbalancing:RemoveTags"
],
"Resource": [
"arn:aws-cn:elasticloadbalancing:*:*:listener/net/*/*/*",
"arn:aws-cn:elasticloadbalancing:*:*:listener/app/*/*/*",
"arn:aws-cn:elasticloadbalancing:*:*:listener-rule/net/*/*/*",
"arn:aws-cn:elasticloadbalancing:*:*:listener-rule/app/*/*/*"
]
,
"Effect": "Allow",
"Action": [
"elasticloadbalancing:ModifyLoadBalancerAttributes",
"elasticloadbalancing:SetIpAddressType",
"elasticloadbalancing:SetSecurityGroups",
"elasticloadbalancing:SetSubnets",
"elasticloadbalancing:DeleteLoadBalancer",
"elasticloadbalancing:ModifyTargetGroup",
"elasticloadbalancing:ModifyTargetGroupAttributes",
"elasticloadbalancing:DeleteTargetGroup"
],
"Resource": "*",
"Condition":
"Null":
"aws:ResourceTag/elbv2.k8s.aws/cluster": "false"
,
"Effect": "Allow",
"Action": [
"elasticloadbalancing:RegisterTargets",
"elasticloadbalancing:DeregisterTargets"
],
"Resource": "arn:aws-cn:elasticloadbalancing:*:*:targetgroup/*/*"
,
"Effect": "Allow",
"Action": [
"elasticloadbalancing:SetWebAcl",
"elasticloadbalancing:ModifyListener",
"elasticloadbalancing:AddListenerCertificates",
"elasticloadbalancing:RemoveListenerCertificates",
"elasticloadbalancing:ModifyRule"
],
"Resource": "*"
]
赋予 EKS node 权限在 ?角色? 中搜索?
nodegrou-NodeInstanceRole
? 找到你对应的 EKS 集群 如下图kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.5.3/cert-manager.yaml
部署 YAML
下载负载平衡器控制器的规范。
wget https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.3.1/v2_3_1_full.yaml
编辑保存的 yaml 文件,转到部署规范,并将控制器 --cluster-name arg 值设置为您的 EKS 集群名称
apiVersion: apps/v1
kind: Deployment
. . .
name: aws-load-balancer-controller
namespace: kube-system
spec:
. . .
template:
spec:
containers:
- args:
- --cluster-name=< INSERT_CLUSTER_NAME>
如果您为服务账户使用 IAM 角色,我们建议您从 yaml 规范中删除 ServiceAccount。如果您从 yaml 规范中删除安装部分,这将保留 eksctl 创建的 iamserviceaccount。
apiVersion: v1
kind: ServiceAccount
应用 yaml 文件
kubectl apply -f v2_3_1_full.yaml
部署示例应用程序将游戏 ?2048? 部署为示例应用程序,以确认作为入口对象的结果,Amazon负载均衡器控制器是否会创建 Amazon ALB。
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.2.0/docs/examples/2048/2048_full.yaml
几分钟后,验证是否已使用以下命令创建入口资源。
kubectl get ingress/ingress-2048 -n game-2048
输出:
NAMECLASSHOSTSADDRESSPORTSAGE
ingress-2048< none> *k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.cn-north-1.elb.amazonaws.com.cn803h42m
kubectl logs -n kube-systemdeployment.apps/aws-load-balancer-controller
打开浏览器并从上一命令输出导航到 ?
ADDRESS
? URL 以查看示例应用程序。如果您没有看到任何内容,请等待几分钟,并刷新您的浏览器。作者:SRE运维博客?
博客地址:https://www.cnsre.cn/
文章地址:https://www.cnsre.cn/posts/211217431135/
相关话题:https://www.cnsre.cn/tags/aws/
推荐阅读
- #星光计划2.0#HarmonyOS分布式应用农业大棚数据监测解读
- #yyds干货盘点# JavaScript之手撕callapply
- 小程序下一破局点(钉钉小程序卡片,应用与平台的深度集成)
- Wo??rdpress如果当前用户是
- WordPress(我在本地主机上自定义了一个模板,但是我想购买相同的高级模板)
- WordPress(如何在定制程序中使用活动回调)
- WordPress-如何为自定义生成的内容调用默认页面模板()
- WordPress(如何在小部件中插入主题变量())
- WordPress如何在模板中包括自定义帖子类型的内容()