Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
如何在 Amazon EKS 集群上为 Fargate 设置 AWS 负载均衡器控制器并部署 2048 游戏?
我想在 Amazon Elastic Kubernetes Service(Amazon EKS)集群上为 AWS Fargate 设置 AWS 负载均衡器控制器。然后,我想部署 2048 游戏。
简短描述
您可以在无任何应用程序负载均衡器(ALB)入口控制器的情况下设置 AWS 负载均衡器控制器。
在新的 Fargate 集群上设置 AWS 负载均衡器控制器之前,请完成以下操作:
- 卸载适用于 Kubernetes 的 AWS ALB 入口控制器。AWS 负载均衡器控制器会取代 AWS ALB 入口控制器的功能。
- 使用 eksctl 版本 0.109.0 或更高版本。有关更多信息,请参阅 eksctl 网站上的安装。
- 在工作站上安装 Helm。
- 将代码片段中的占位符值替换为自己的值。
解决方法
创建 Amazon EKS 集群、服务账户策略和基于角色的访问控制(RBAC)策略
要创建集群和策略,请执行以下操作:
-
要使用 eksctl 创建 Amazon EKS 集群,请运行以下命令:
eksctl create cluster --name YOUR_CLUSTER_NAME --version 1.28 --fargate
注意:您无需为仅使用 Fargate 容器组(--fargate)的集群创建 Fargate 容器组(pod)执行角色。
-
运行以下命令,允许集群使用服务账户的 AWS Identity and Access Management(AWS IAM):
eksctl utils associate-iam-oidc-provider --cluster YOUR_CLUSTER_NAME --approve
**注意:**FargateExecutionRole 是 kubelet 和 kube-proxy 用来运行 Fargate 容器组(pod)的角色。但它不是 Fargate 容器组(即 aws-load-balancer-controller)使用的角色。对于 Fargate 容器组,您必须使用服务账户的 IAM 角色。有关详细信息,请参阅服务账户的 IAM 角色。
-
要下载允许 AWS 负载均衡器控制器代表您调用 AWS API 的 IAM 策略,请运行以下命令:
curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.6.1/docs/install/iam_policy.json
-
使用您下载的策略创建 IAM 策略。请使用以下命令:
aws iam create-policy \ --policy-name AWSLoadBalancerControllerIAMPolicy \ --policy-document file://iam_policy.json
-
要在 kube-system 命名空间中为 AWS 负载均衡器控制器创建名为 aws-load-balancer-controller 的服务账户,请使用以下命令:
eksctl create iamserviceaccount \ --cluster=YOUR_CLUSTER_NAME \ --namespace=kube-system \ --name=aws-load-balancer-controller \ --attach-policy-arn=arn:aws:iam::<AWS_ACCOUNT_ID>:policy/AWSLoadBalancerControllerIAMPolicy \ --override-existing-serviceaccounts \ --approve
-
要验证新服务角色是否已创建,请运行以下任一命令:
eksctl get iamserviceaccount --cluster YOUR_CLUSTER_NAME --name aws-load-balancer-controller --namespace kube-system
-或-
kubectl get serviceaccount aws-load-balancer-controller --namespace kube-system
使用 Helm 安装 AWS 负载均衡器控制器
要安装 AWS 负载均衡器控制器,请执行以下操作:
-
要将 Amazon EKS 图表添加到 Helm,请运行以下命令:
helm repo add eks https://aws.github.io/eks-charts
-
更新 repo 以提取最新的图表:
helm repo update eks
-
运行以下命令来安装 Helm 图表。注意: 将 clusterName、region 和 vpcId 替换为您的值:
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \ --set clusterName=YOUR_CLUSTER_NAME \ --set serviceAccount.create=false \ --set region=YOUR_REGION_CODE \ --set vpcId=<VPC_ID> \ --set serviceAccount.name=aws-load-balancer-controller \ -n kube-system
-
验证控制器是否成功安装:
$ kubectl get deployment -n kube-system aws-load-balancer-controller
输出示例:
NAME READY UP-TO-DATE AVAILABLE AGE aws-load-balancer-controller 2/2 2 2 84s
测试 AWS 负载均衡器控制器
使用 AWS 负载均衡器控制器创建入口的应用程序负载均衡器或网络负载均衡器。您可以使用其中一种来创建 k8s 服务。要使用应用程序负载均衡器入口部署名为 2048 的示例应用程序,请执行以下操作:
-
要创建游戏部署所需的 Fargate 配置文件,请使用以下命令:
eksctl create fargateprofile --cluster your-cluster --region your-region-code --name your-alb-sample-app --namespace game-2048
-
要部署示例游戏并验证 AWS 负载均衡器控制器是否已创建 ALB 入口资源,请运行以下命令:
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.6.1/docs/examples/2048/2048_full.yaml
-
几分钟后,运行以下命令,验证入口资源是否已创建:
kubectl get ingress/ingress-2048 -n game-2048
您会收到以下输出:
NAME CLASS HOSTS ADDRESS. PORTS AGE ingress-2048 <none> * k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.us-
**注意:**如果几分钟之后入口还未创建,请运行以下命令,查看 AWS 负载均衡器控制器日志:
kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller
日志可能包含错误消息,有助于诊断部署问题。
-
要查看示例应用程序,请打开浏览器。然后,从前面的命令输出中导航到地址 URL。
**注意:**如果未看到示例应用程序,请等待几分钟,然后刷新浏览器。
部署示例应用程序
要使用网络负载均衡器 IP 地址模式服务部署示例应用程序,请执行以下操作:
-
要创建 Fargate 配置文件,请运行以下命令:
eksctl create fargateprofile --cluster your-cluster --region your-region-code --name your-alb-sample-app --namespace game-2048
-
要获取 2048 游戏的部署清单,请运行以下命令:
curl -o 2048-game.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.6.1/docs/examples/2048/2048_full.yaml
-
在步骤 2 的清单中,删除此 Ingress 部分:
apiVersion: networking.k8s.io/v1kind: Ingress metadata: namespace: game-2048 name: ingress-2048 annotations: alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/target-type: ip spec:ingressClassName: alb rules: - http: paths: - path: / pathType: Prefix backend: service: name: service-2048 port: number: 80
-
修改 Service 对象:
apiVersion: v1 kind: Service metadata: namespace: game-2048 name: service-2048 annotations: service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "ip" service.beta.kubernetes.io/aws-load-balancer-type: external service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing spec: ports: - port: 80 targetPort: 80 protocol: TCP type: LoadBalancer selector: app.kubernetes.io/name: app-2048
-
要创建服务和部署清单,请运行以下命令:
kubectl apply -f 2048-game.yaml
-
要检查服务创建情况和网络负载均衡器的 DNS 名称,请运行以下命令:
kubectl get svc -n game-2048
您会收到以下输出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service-2048 LoadBalancer 10.100.114.197 k8s-game2048-service2-xxxxxxxxxx-yyyyyyyyyy.us-east-2.elb.amazonaws.com 80:30159/TCP 23m
-
等待几分钟,直到负载均衡器处于活动状态。然后,检查是否可以进行部署。在 Web 浏览器中打开 EXTERNAL-IP 部分中引用的 NLB 的完全限定域名(FQDN)。
排查 AWS 负载均衡器控制器存在的问题
如果在设置控制器时遇到问题,请运行以下命令:
$ kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller $ kubectl get endpoints -n game-2048 $ kubectl get ingress/ingress-2048 -n game-2048
日志命令的输出会返回错误消息(如包含标签或子网)。这些错误消息有助于排查 Kubernetes GitHub 网站上列出的常见错误。get endpoints 命令会显示支持的部署容器组是否已正确注册。get ingress 命令会显示是否部署了入口资源。有关详细信息,请参阅 Kubernetes 网站上的 AWS 负载均衡器控制器。
相关内容
- AWS 官方已更新 4 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前