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

如何通过Nginx Ingress Controller访问EKS Pod并实现两类请求路由规则

基于双层Nginx架构的Pod定向转发实现方案

前置架构说明

你当前的架构为「上层Nginx反向代理 -> 下层K8s集群Nginx Ingress Controller -> 业务Pod」,两种访问规则可通过分层配置实现,具体方案如下:


规则1:初始请求默认转发到对应Service

无特殊标识的普通请求走默认负载均衡逻辑,配置步骤如下:

  • 上层Nginx配置默认转发规则,将请求统一透传到下层Nginx Ingress Controller的对外暴露地址
  • Nginx Ingress Controller配置常规Ingress规则,匹配域名/路径后转发到业务对应的ClusterIP Service,由Service原生负载均衡策略分发到就绪的业务Pod

默认Ingress配置示例:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: business-default-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  ingressClassName: nginx
  rules:
  - host: your-business-domain.com
    http:
      paths:
      - path: /(.*)
        pathType: Prefix
        backend:
          service:
            name: business-service
            port:
              number: 80

规则2:携带Pod/实例标识的请求定向转发到指定Pod

针对路径带特定标识的请求,通过路径匹配+自定义请求头+Ingress规则扩展实现定向转发,步骤如下:

  • 先给业务Pod配置唯一标识标签,如需直接转发到Pod需保证Ingress Controller可直接访问Pod的集群内IP
  • 上层Nginx匹配带标识的请求路径,提取标识字段写入自定义请求头后透传到Ingress Controller
  • Ingress通过自定义注解配置转发逻辑,识别请求头中的标识后直接转发到对应Pod

上层Nginx配置示例:

server {
    listen 80;
    server_name your-business-domain.com;
    # 匹配格式为/instance/{pod标识}/xxx的路径
    location ~ ^/instance/([^/]+)/(.*)$ {
        # 提取标识写入自定义请求头
        proxy_set_header X-Target-Pod-Id $1;
        # 转发到下层Ingress Controller地址
        proxy_pass http://<Ingress对外服务IP>/$request_uri;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
    # 默认请求规则
    location / {
        proxy_pass http://<Ingress对外服务IP>;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

带定向转发逻辑的Ingress配置示例:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: business-sticky-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    # 按请求头中的标识做哈希绑定,确保同标识请求落到同一Pod
    nginx.ingress.kubernetes.io/upstream-hash-by: $http_x_target_pod_id
    # 也可通过自定义snippet实现精确IP转发
    nginx.ingress.kubernetes.io/configuration-snippet: |
      if ($http_x_target_pod_id != "") {
          # 如需按标识映射Pod IP,可在此处新增映射逻辑替换以下配置
          set $target_pod "http://$http_x_target_pod_id:80";
          proxy_pass $target_pod;
      }
spec:
  ingressClassName: nginx
  rules:
  - host: your-business-domain.com
    http:
      paths:
      - path: /instance/([^/]+)/(.*)
        pathType: Prefix
        backend:
          service:
            name: business-service
            port:
              number: 80

注意事项

  • 如果用自定义Pod标识而非Pod IP作为路径参数,需要提前维护标识到Pod IP的映射关系,可通过定时调用K8s API同步最新的Pod信息更新到Nginx配置
  • 如需无需路径带标识的会话绑定,可结合Cookie实现会话粘滞,替换路径传标识的逻辑
  • 要确保Pod的网络策略允许Ingress Controller直接访问Pod端口

内容的提问来源于stack exchange,提问作者visrey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:54:03