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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 07:55:21