AWS Load Balancer Controller 企业入口
验证:未记录
- 适用版本
- 未记录
- 验证范围
- 尚未登记验证记录。
本文缩写(英文全称与中文含义)
| 缩写 | 英文全称/名称 | 中文含义 |
|---|---|---|
| ACM | AWS Certificate Manager | AWS 证书管理服务 |
| ALB | Application Load Balancer | 应用负载均衡器 |
| API | Application Programming Interface | 应用程序编程接口 |
| AWS | Amazon Web Services | 亚马逊云服务 |
| AZ | Availability Zone | 可用区 |
| CIDR | Classless Inter-Domain Routing | 无类别域间路由,用于表示网段 |
| CRD | Custom Resource Definition | Kubernetes 自定义资源定义 |
| DNS | Domain Name System | 域名系统 |
| EKS | Elastic Kubernetes Service | AWS 托管 Kubernetes 服务 |
| IAM | Identity and Access Management | 身份与访问管理 |
| IMDS | Instance Metadata Service | 实例元数据服务 |
| IP | Internet Protocol | 网际协议;IP 地址是网络寻址标识 |
| IRSA | IAM Roles for Service Accounts | 通过 Kubernetes 服务账号关联 AWS IAM 角色 |
| LB | Load Balancer | 负载均衡器 |
| PDB | Pod Disruption Budget | Pod 中断预算,约束自愿驱逐 |
| VPC | Virtual Private Cloud | 虚拟私有云网络 |
| VPN | Virtual Private Network | 虚拟专用网络 |
| WAF | Web Application Firewall | Web 应用防火墙 |
场景:EKS 的订单 API 使用 ALB + ACM,控制器创建/协调云 LB;这里的 ALB Ingress 与已退休的社区 ingress-nginx 是不同实现。前置:基线、IRSA、跨 AZ 子网、ACM 证书、预生产域名。EKS Auto Mode 使用其托管机制,不能按本例重复接管同一资源。
IAM 与安装#
锁定 controller release 与 Chart,下载相同 release 的官方 IAM policy,收窄允许的资源/tag 条件后通过身份篇创建角色;不要从 main 拉策略配旧镜像。
export LBC_RELEASE='vREPLACE_CONTROLLER_VERSION'
curl -fsSL "https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/$LBC_RELEASE/docs/install/iam_policy.json" -o permissions.json
helm repo add eks https://aws.github.io/eks-charts
helm repo update
helm search repo eks/aws-load-balancer-controller --versions
export LBC_CHART_VERSION='REPLACE_CHART_VERSION'
helm show chart eks/aws-load-balancer-controller --version "$LBC_CHART_VERSION"保存 lbc-values.yaml,避免依赖 IMDS 自动猜区域/VPC:
clusterName: REPLACE_CLUSTER
region: REPLACE_REGION
vpcId: vpc-REPLACE_VPC
replicaCount: 2
serviceAccount:
create: true
name: aws-load-balancer-controller
annotations:
eks.amazonaws.com/role-arn: REPLACE_LBC_ROLE_ARNhelm upgrade --install aws-load-balancer-controller eks/aws-load-balancer-controller -n kube-system --version "$LBC_CHART_VERSION" -f lbc-values.yaml --wait --timeout 10m
kubectl -n kube-system rollout status deployment/aws-load-balancer-controller增加跨节点放置/资源/PDB;检查 API Server 到 webhook、节点/Pod 到 AWS API 的连通。升级时 CRD 不一定随 Helm upgrade 更新,按 release 指南独立处理。AWS 安装说明
Hands-on:内网 ALB 到真实 API#
保存 orders-alb.yaml,替换子网/证书;基线 Service 是 ClusterIP,使用 IP targets。客户端需从 VPC/企业 VPN 访问内网 ALB。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: orders
namespace: orders
annotations:
alb.ingress.kubernetes.io/scheme: internal
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/subnets: subnet-REPLACE_A,subnet-REPLACE_B
alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]'
alb.ingress.kubernetes.io/certificate-arn: REPLACE_ACM_CERTIFICATE_ARN
alb.ingress.kubernetes.io/healthcheck-path: /readyz
alb.ingress.kubernetes.io/success-codes: "200"
alb.ingress.kubernetes.io/target-group-attributes: deregistration_delay.timeout_seconds=30
spec:
ingressClassName: alb
rules:
- host: orders.internal.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service: {name: orders-api, port: {number: 80}}确认 alb IngressClass 存在;明确设置企业允许的 inbound CIDR/安全组,避免默认内网可达范围过宽。要做公网入口时单独审核 WAF、限流、鉴权、日志和安全组,不直接改 scheme。
kubectl apply -f orders-alb.yaml
kubectl -n orders describe ingress orders
kubectl -n orders get targetgroupbindings查 AWS TargetGroup 每个 Pod target 健康,再配置私有 DNS,验证证书和真实业务。用 pod readiness gate 时先按官方要求标记 namespace、确保目标资源存在,再重建业务 Pod;不能给已创建 Pod 期待自动补注入。注解与流量行为
验收与恢复#
持续请求中滚动发布/排空一台节点,记录 ALB 5xx、target response time、连接排空及业务成功率;应用退出宽限应覆盖 deregistration 和在途请求。演练 readiness 失败只摘除相应 target,其他副本继续接流。
IngressGroup 可以合并 LB,但同组租户可能影响路由优先级,跨不信任团队不共享 group。故障恢复旧 Service/Ingress 路由并观察 target;删除 Ingress 可能删除 LB,不能当普通配置回滚。卸载控制器前处理 finalizer 和云资源,防止遗留收费 LB 或无法删除的资源。