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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:18:03