AWS EKS中配置Ingress、ClusterIP及启用TLS的技术问询
AWS EKS配置ALB Ingress及Let's Encrypt TLS指南(新手向)
先修正你当前清单中的错误
- Service配置里的
type: LoadBalancer.多了个英文句点,若改用ClusterIP需修正为type: ClusterIP - Ingress的健康检查路径
/usermgmt/health-status不符合nginx默认配置,会导致健康检查失败,需改为/
问题1:如何自动配置七层应用负载均衡(ALB)而非经典负载均衡
要创建七层ALB,核心是通过ALB Ingress Controller实现,而非依赖LoadBalancer类型的Service:
- 先确认EKS集群已部署ALB Ingress Controller(这是关键前提,没有它Ingress的ALB注解不会生效)
- 在Ingress资源中保留
kubernetes.io/ingress.class: "alb"注解,该注解会触发ALB Ingress Controller创建七层ALB,而非经典LB - 你的Ingress已配置
alb.ingress.kubernetes.io/scheme: internet-facing,这会生成面向公网的ALB,天然支持七层HTTP/HTTPS转发规则
问题2:能否改用ClusterIP服务,通过Ingress自动创建负载均衡
完全可以,这还是EKS中暴露服务的最佳实践:
- LoadBalancer类型的Service会创建四层经典LB,功能单一;而ClusterIP服务仅在集群内部暴露,配合Ingress由ALB Ingress Controller创建七层ALB,支持路径转发、TLS加密、规则匹配等更灵活的能力
修正后的完整清单示例
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: nginx-service-clusterip spec: type: ClusterIP selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: nginx-ingress annotations: kubernetes.io/ingress.class: "alb" alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/healthcheck-path: / alb.ingress.kubernetes.io/healthcheck-protocol: HTTP alb.ingress.kubernetes.io/healthcheck-port: traffic-port spec: rules: - http: paths: - path: /* pathType: Prefix backend: service: name: nginx-service-clusterip port: number: 80
额外:通过Let's Encrypt启用TLS加密
- 在AWS Certificate Manager(ACM)中申请免费的Let's Encrypt证书(需验证域名所有权,建议用Route53自动验证)
- 在Ingress中添加以下注解,绑定ACM证书并强制HTTPS访问:
alb.ingress.kubernetes.io/certificate-arn: "你的ACM证书ARN" alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]' alb.ingress.kubernetes.io/ssl-redirect: "443" - 将你的域名解析到ALB的DNS名称(Ingress创建后,可通过
kubectl get ingress查看ADDRESS字段获取)
注意:ALB Ingress Controller需要绑定具备创建ALB、操作ACM等权限的IAM角色,且ACM证书需与ALB在同一AWS区域
内容的提问来源于stack exchange,提问作者Jananath Banuka
相关产品推荐
相关产品推荐

