AWS上两台VM实例如何通过Nginx Ingress实现负载均衡与路径路由
基于AWS + Nginx Ingress的需求实现方案
前置准备
- 两台运行业务的AWS VM实例,安全组已开放80端口给后续Ingress所属资源的网段
- 已完成注册的可用DNS域名
- 已在AWS证书管理器(ACM)中申请对应域名的SSL证书,状态为已签发
- 已开通AWS EKS托管Kubernetes集群(新手推荐直接使用EKS,无需自行维护K8s控制面),集群内已安装Nginx Ingress Controller,安装完成后会自动生成AWS公网负载均衡实例
核心实现步骤
步骤1:将VM接入K8s集群
由于业务VM不在K8s集群内部,需要先创建无选择器的Service,手动绑定VM的内网IP:
- 按需创建1~2个Service资源,不填写
selector字段 - 手动创建对应Endpoint资源,关联上述Service,地址填写两台VM的内网IP,端口填写VM上业务实际监听的HTTP端口
- 若需要
/service1、/service2都走两台VM的负载均衡池,创建1个Service绑定两台VM即可 - 若需要
/service1固定转发到VM1、/service2固定转发到VM2,分别创建两个Service绑定对应单台VM即可
- 若需要
步骤2:配置Ingress路由规则
Ingress配置需要同时满足三个核心要求:同一域名绑定、路径前缀路由、HTTPS协议卸载、基于负载的自动流量调度。
步骤3:配置DNS解析
将你的域名解析到Nginx Ingress Controller自动生成的AWS负载均衡公网地址上,使用AWS Route53服务可以直接配置别名解析绑定负载均衡ARN,稳定性更高。
步骤4:配置HTTPS证书
将ACM中已签发的证书关联到Ingress资源的tls字段,Nginx Ingress会自动完成HTTPS卸载,后端VM无需修改HTTP服务配置。
配置示例
1. 单Service绑定两台VM做负载均衡的配置
# 业务Service配置 apiVersion: v1 kind: Service metadata: name: app-service spec: ports: - protocol: TCP port: 80 targetPort: 80 # 替换为VM上业务实际监听的端口 --- # Endpoint配置,绑定两台VM的IP apiVersion: v1 kind: Endpoints metadata: name: app-service subsets: - addresses: - ip: 192.168.1.10 # 替换为第一台VM的内网IP - ip: 192.168.1.11 # 替换为第二台VM的内网IP ports: - port: 80 # 替换为VM上业务实际监听的端口
2. Ingress资源配置
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: app-ingress annotations: nginx.ingress.kubernetes.io/ssl-redirect: "true" # 自动将HTTP请求跳转至HTTPS nginx.ingress.kubernetes.io/rewrite-target: /$1 # 路径重写,将/service1/后的路径透传给后端业务 nginx.ingress.kubernetes.io/load-balance: "least_conn" # 最少连接负载均衡策略,自动将流量调度到负载更低的实例 spec: tls: - hosts: - your-domain.com # 替换为你自己的域名 secretName: aws-acm-cert # 替换为关联ACM证书的Secret名称 rules: - host: your-domain.com http: paths: - path: /service1/(.*) pathType: Prefix backend: service: name: app-service port: number: 80 - path: /service2/(.*) pathType: Prefix backend: service: name: app-service port: number: 80
验证步骤
- 所有配置编写完成后,执行
kubectl apply -f 配置文件名.yaml应用所有资源 - 等待DNS解析生效后,分别访问
https://你的域名/service1/、https://你的域名/service2/验证业务访问正常 - 手动对单台VM加压,验证流量会自动切换到负载更低的实例上
内容的提问来源于stack exchange,提问作者shivani yadav
相关产品推荐
相关产品推荐

