You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署基于Apache的静态资源Docker容器到EKS的AWS服务架构咨询

高层指导:将Apache静态文件容器部署到EKS并对外暴露

以下是从0到1搭建的核心步骤,你可以按这个框架深入研究每个环节:

1. 先明确核心需要的AWS服务

  • IAM:必须创建具备对应权限的用户/角色,至少要能操作EKS集群、ECR镜像仓库、VPC资源,禁止使用root账号。
  • ECR:AWS私有镜像仓库,专门用来存储你打包好的Apache静态文件镜像,适配性比第三方仓库更好。
  • EKS:托管式Kubernetes集群,无需自行维护Master节点,专注容器部署即可。
  • VPC:EKS必须运行在VPC内,创建集群时会自动生成符合要求的VPC,也可复用现有VPC(需满足子网、安全组规则)。

2. 打包并推送Apache镜像到ECR

  • 本地编写Dockerfile:基于官方httpd镜像,将静态文件(html/js/css)复制到Apache默认目录,示例:
    FROM httpd:2.4
    COPY ./your-static-files/ /usr/local/apache2/htdocs/
    
  • 构建本地镜像:docker build -t apache-static .
  • 登录ECR仓库:通过AWS CLI生成登录凭证,执行命令:
    aws ecr get-login-password --region <你的AWS区域> | docker login --username AWS --password-stdin <你的ECR仓库URI>
    
  • 打标签并推送镜像:
    docker tag apache-static:latest <ECR仓库URI>:latest
    docker push <ECR仓库URI>:latest
    

3. 创建EKS集群

  • 推荐使用eksctl(AWS官方EKS命令行工具),操作比控制台更高效,命令示例:
    eksctl create cluster --name my-eks-cluster --region us-east-1 --nodegroup-name my-node-group --node-type t3.micro --nodes 2
    
  • 配置本地kubectl:集群创建完成后,执行命令让本地工具连接到EKS:
    aws eks update-kubeconfig --name my-eks-cluster --region us-east-1
    

4. 将镜像部署到EKS集群

  • 编写Kubernetes Deployment配置文件(比如deployment.yaml),指定ECR镜像地址、副本数和端口:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: apache-static-deploy
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: apache-static
      template:
        metadata:
          labels:
            app: apache-static
        spec:
          containers:
          - name: apache-static-container
            image: <你的ECR仓库URI>:latest
            ports:
            - containerPort: 80
    
  • 应用配置到集群:kubectl apply -f deployment.yaml,执行kubectl get pods可查看Pod是否正常启动。

5. 对外暴露服务供客户端访问

  • 两种常用暴露方式:
    • LoadBalancer类型Service:快速获取公网访问域名,编写service.yaml:
      apiVersion: v1
      kind: Service
      metadata:
        name: apache-static-service
      spec:
        type: LoadBalancer
        selector:
          app: apache-static
        ports:
        - protocol: TCP
          port: 80
          targetPort: 80
      
      应用配置后,执行kubectl get service,找到EXTERNAL-IP列的域名,直接访问即可加载静态资源。
    • Ingress:如果需要自定义域名、HTTPS等功能,需先部署AWS Load Balancer Controller,再编写Ingress配置关联Service,最后通过Route 53将自定义域名解析到Ingress生成的负载均衡器。

6. 验证与优化

  • 访问测试:用获取到的公网域名访问,确认静态文件能正常加载。
  • 监控:开启CloudWatch监控集群和Pod的日志、资源使用情况,便于排查问题。
  • 安全:给ECR仓库设置权限,仅允许EKS集群拉取镜像;配置安全组,仅开放80端口;使用IAM Roles for Service Accounts(IRSA)为Pod分配最小必要权限。

内容的提问来源于stack exchange,提问作者bhiku

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 05:53:27