部署基于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: 80kubectl get service,找到EXTERNAL-IP列的域名,直接访问即可加载静态资源。 - Ingress:如果需要自定义域名、HTTPS等功能,需先部署AWS Load Balancer Controller,再编写Ingress配置关联Service,最后通过Route 53将自定义域名解析到Ingress生成的负载均衡器。
- LoadBalancer类型Service:快速获取公网访问域名,编写
6. 验证与优化
- 访问测试:用获取到的公网域名访问,确认静态文件能正常加载。
- 监控:开启CloudWatch监控集群和Pod的日志、资源使用情况,便于排查问题。
- 安全:给ECR仓库设置权限,仅允许EKS集群拉取镜像;配置安全组,仅开放80端口;使用IAM Roles for Service Accounts(IRSA)为Pod分配最小必要权限。
内容的提问来源于stack exchange,提问作者bhiku
相关产品推荐
相关产品推荐

