在AWS EKS中创建带静态IP且支持HTTPS终止的内部负载均衡器的最佳方案
在AWS EKS中创建带静态IP和HTTPS终止的内部负载均衡器的最佳方法
核心思路是利用AWS Load Balancer Controller(替代传统kube-proxy LB方案),结合AWS内部弹性IP、ACM证书实现需求,以下是具体实操步骤:
1. 创建内部静态弹性IP
AWS内部LB需要绑定同VPC下的domain: vpc类型弹性IP(即内部私网静态IP),可通过CLI创建:
aws ec2 allocate-address --domain vpc
执行后记录返回的AllocationId和PublicIp(此处为内部私网IP)。
2. 部署AWS Load Balancer Controller
这是EKS管理AWS LB的官方推荐组件,若集群未部署,用Helm快速安装:
helm repo add eks https://aws.github.io/eks-charts helm repo update helm install aws-load-balancer-controller eks/aws-load-balancer-controller \ -n kube-system \ --set clusterName=your-eks-cluster-name \ --set serviceAccount.create=true \ --set serviceAccount.name=aws-load-balancer-controller
注意控制器版本需≥2.4.0,才能直接支持静态IP绑定。
3. 申请ACM SSL证书
用于HTTPS终止,必须是集群所在区域的区域证书(不能用全局证书),域名需匹配后续内部访问域名(如internal.your-domain.com)。可通过AWS控制台或CLI创建,推荐选DNS验证方式。创建后记录证书ARN。
4. 编写K8s Service和Ingress资源
第一步:创建ClusterIP Service
先将后端服务暴露为ClusterIP,供Ingress转发流量:
apiVersion: v1 kind: Service metadata: name: backend-service spec: type: ClusterIP selector: app: your-backend-app ports: - port: 80 targetPort: 8080 # 后端服务的实际监听端口
第二步:创建带静态IP和HTTPS终止的Ingress
通过注解指定内部LB、静态IP、SSL证书等核心配置:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: internal-alb-ingress annotations: # 声明为内部负载均衡器 alb.ingress.kubernetes.io/scheme: internal # 绑定提前创建的内部静态IP alb.ingress.kubernetes.io/load-balancer-ip: 10.0.0.100 # 绑定ACM证书ARN alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-east-1:123456789012:certificate/xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx # 配置监听端口,强制HTTP重定向到HTTPS alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]' alb.ingress.kubernetes.io/ssl-redirect: '443' # 指定目标类型为IP(适配多数场景) alb.ingress.kubernetes.io/target-type: ip # 可选:开启跨AZ负载均衡 alb.ingress.kubernetes.io/load-balancer-attributes: load_balancing.cross_zone.enabled=true spec: ingressClassName: alb # 指定使用AWS LB Controller的Ingress类 rules: - host: internal.your-domain.com http: paths: - path: / pathType: Prefix backend: service: name: backend-service port: number: 80
5. 验证部署
- 应用资源:
kubectl apply -f service.yaml -f ingress.yaml - 查看Ingress状态:
kubectl get ingress internal-alb-ingress,确认ADDRESS字段显示指定的静态IP - 测试访问:在内部网络环境中访问
https://internal.your-domain.com,验证证书有效性和服务响应
关键注意事项
- 静态弹性IP必须与LB处于同一个VPC的私有子网中
- ACM证书需与集群在同一个AWS区域,且域名需通过私有DNS(如Route53私有托管区)解析到静态IP
- 集群节点的IAM角色需具备管理LB、弹性IP、ACM证书的权限(建议附加
AmazonEKSWorkerNodePolicy或自定义精简策略)
内容的提问来源于stack exchange,提问作者mthokozisi nkosi
相关产品推荐
相关产品推荐

