帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。
将示例负载均衡器工作负载部署到 EKS 自动模式
本指南将演示在 Amazon EKS 上部署 2048 游戏的容器化版本,包括负载均衡和互联网访问功能。
先决条件
-
一个 EKS 自动模式集群
-
配置好
kubectl
以与集群进行交互 -
用于创建 ALB 资源的适当 IAM 权限
第 1 步:创建命名空间
首先,为 2048 游戏应用程序创建一个专用的命名空间。
创建一个名为 01-namespace.yaml
的文件:
apiVersion: v1 kind: Namespace metadata: name: game-2048
应用命名空间配置:
kubectl apply -f 01-namespace.yaml
第 2 步:部署应用程序
该应用程序会运行 2048 游戏容器的多个副本。
创建一个名为 02-deployment.yaml
的文件:
apiVersion: apps/v1 kind: Deployment metadata: namespace: game-2048 name: deployment-2048 spec: selector: matchLabels: app.kubernetes.io/name: app-2048 replicas: 5 template: metadata: labels: app.kubernetes.io/name: app-2048 spec: containers: - image: public.ecr.aws/l6m2t8p7/docker-2048:latest imagePullPolicy: Always name: app-2048 ports: - containerPort: 80 resources: requests: cpu: "0.5"
注意
如果加载映像 public.ecr.aws/l6m2t8p7/docker-2048:latest
时收到错误消息,请确认节点 IAM 角色是否具有足够的权限从 ECR 提取映像。有关更多信息,请参阅 节点 IAM 角色。此外,示例中的 docker-2048
映像为 x86_64
映像,不会在其他架构上运行。
关键组件:
-
部署 5 个应用程序副本
-
使用一个公有 ECR 映像
-
每个容器组(pod)请求 0.5 个 CPU 核心
-
为 HTTP 流量公开端口 80
应用部署:
kubectl apply -f 02-deployment.yaml
第 3 步:创建服务
该服务将该部署向集群网络公开。
创建一个名为 03-service.yaml
的文件:
apiVersion: v1 kind: Service metadata: namespace: game-2048 name: service-2048 spec: ports: - port: 80 targetPort: 80 protocol: TCP type: NodePort selector: app.kubernetes.io/name: app-2048
关键组件:
-
创建一个节点端口服务
-
将端口 80 映射到容器的端口 80
-
使用标签选择器查找容器组
应用服务:
kubectl apply -f 03-service.yaml
第 4 步:配置负载均衡
您将设置一个 Ingress,以将该应用程序向互联网公开。
首先,创建 IngressClass
。创建一个名为 04-ingressclass.yaml
的文件:
apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: labels: app.kubernetes.io/name: LoadBalancerController name: alb spec: controller: eks.amazonaws.com/alb
注意
然后创建该 Ingress 资源。创建一个名为 05-ingress.yaml
的文件:
apiVersion: networking.k8s.io/v1 kind: 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
关键组件:
-
创建一个面向互联网的 ALB
-
使用适用于直接容器组路由的 IP 目标类型
-
将所有流量 (/) 路由到游戏服务
应用 Ingress 配置:
kubectl apply -f 04-ingressclass.yaml kubectl apply -f 05-ingress.yaml
第 5 步:验证部署
-
检查所有容器组是否都在运行:
kubectl get pods -n game-2048
-
确认服务是否已创建:
kubectl get svc -n game-2048
-
获取 ALB 端点:
kubectl get ingress -n game-2048
Ingress 输出中的 ADDRESS 字段将显示您的 ALB 端点。等待 2-3 分钟,让 ALB 完成预置并注册所有目标。
第 6 步:访问游戏
打开 Web 浏览器并浏览到之前步骤中的 ALB 端点 URL。您应该会看到 2048 游戏界面。
步骤 7:清除
移除本教程中创建的所有资源:
kubectl delete namespace game-2048
这将删除命名空间中的所有资源,包括部署、服务和 Ingress 资源。
幕后发生了什么
-
此部署创建了 5 个运行 2048 游戏的容器组
-
该服务为这些容器组提供稳定的网络访问
-
EKS 自动模式:
-
在 Amazon 中创建一个应用程序负载均衡器
-
为容器组配置目标组
-
设置路由规则以将流量定向到服务
-
故障排除
如果游戏无法加载:
-
确保所有容器组都在运行:
kubectl get pods -n game-2048
-
检查 Ingress 状态:
kubectl describe ingress -n game-2048
-
验证 ALB 运行状况检查:在 Amazon 控制台中检查目标组的运行状况