求生成EKS部署裸nginx容器所需Kubernetes清单的脚本
实现方案
核心思路
- 一共需要生成三类Kubernetes资源:承载裸Nginx容器的Deployment、端口映射为80的Service、绑定
example.nginx.com域名的Ingress规则 - EKS环境部署需要提前满足两个前置条件:集群已安装AWS Load Balancer Controller(EKS默认不会预装)、
example.nginx.com的DNS解析可配置指向Ingress对应的AWS ALB地址 - 脚本采用Shell实现,支持直接输出yaml清单到本地文件,也支持直接调用kubectl部署到集群
可直接使用的生成脚本
#!/bin/bash # 输出到本地文件执行:bash generate_nginx_eks.sh > nginx-eks-deploy.yaml # 直接部署到EKS集群执行:bash generate_nginx_eks.sh | kubectl apply -f - cat <<EOF # Nginx Deployment(裸容器无额外配置) apiVersion: apps/v1 kind: Deployment metadata: name: nginx-bare namespace: default labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:stable-alpine ports: - containerPort: 80 resources: requests: cpu: 100m memory: 128Mi limits: cpu: 200m memory: 256Mi --- # Nginx Service 端口配置为80 apiVersion: v1 kind: Service metadata: name: nginx-service namespace: default labels: app: nginx spec: type: ClusterIP ports: - port: 80 targetPort: 80 protocol: TCP selector: app: nginx --- # EKS环境专用Ingress规则 apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: nginx-ingress namespace: default annotations: # AWS Load Balancer Controller 专用注解,可按需调整 alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/target-type: ip alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]' # 如需强制HTTP跳HTTPS可开启下方注解 # alb.ingress.kubernetes.io/ssl-redirect: "443" spec: ingressClassName: alb # 需和集群内AWS Load Balancer Controller配置的ingress class名称一致 rules: - host: example.nginx.com http: paths: - path: / pathType: Prefix backend: service: name: nginx-service port: number: 80 EOF
EKS部署注意事项
- 部署前确认集群内的AWS Load Balancer Controller运行正常,Ingress配置的
ingressClassName和集群实际配置匹配 - 部署完成后等待AWS ALB资源创建完成,将
example.nginx.com的DNS记录解析到ALB的公网地址即可正常访问 - 如果需要配置HTTPS访问,可在Ingress的annotations中添加
alb.ingress.kubernetes.io/certificate-arn: <你的AWS ACM证书ARN>,证书需要和EKS集群属于同一AWS区域
内容的提问来源于stack exchange,提问作者Melissa Jenner
相关产品推荐
相关产品推荐

