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

在Pod中部署Nginx放行Kubernetes集群服务(无需Ingress)

在Pod内部署Nginx实现集群服务白名单+反向代理的配置方案

我来给你拆解一下这个场景下Nginx的具体配置规则——既然没法用Ingress Controller,那Pod里的Nginx就得同时扛起流量拦截和反向代理的活儿。咱们一步步来:

核心前提先明确

首先,同Pod内的容器是共享网络命名空间的,所以Nginx反向代理到另一个容器直接用localhost:应用端口或者容器别名(如果给应用容器设了名称)就行,不用额外的网络配置。

而白名单的核心需求是优先放行全集群服务,再支持指定特定服务,这就需要结合Kubernetes集群的网络特性来配置规则。

具体Nginx允许规则配置

1. 优先放行全集群内所有服务

集群内的所有Pod和Service都属于固定的IP段(Pod CIDR和Service CIDR),我们可以直接允许这两个网段的所有流量,就能覆盖所有集群内的服务请求。

先获取你的集群IP段:

# 查看集群的Pod CIDR和Service CIDR
kubectl cluster-info dump | grep -E 'podCIDR|serviceClusterIPRange'

然后把这些IP段写到Nginx配置里,示例如下:

http {
    # 替换成你集群实际的Pod CIDR和Service CIDR
    set $cluster_pod_cidr "10.244.0.0/16";
    set $cluster_service_cidr "10.96.0.0/12";

    server {
        listen 80;
        server_name _;

        # 第一优先级:放行全集群内的所有Pod和Service流量
        allow $cluster_pod_cidr;
        allow $cluster_service_cidr;

        # 第二优先级:放行指定的特定服务(按需添加)
        allow 192.168.1.100; # 示例:特定服务的固定IP
        allow my-special-service.my-namespace.svc.cluster.local; # 示例:特定集群服务的完整DNS名

        # 拒绝所有不在白名单内的流量
        deny all;

        # 反向代理到同Pod内的应用容器
        location / {
            proxy_pass http://localhost:8080; # 替换成你的应用容器实际端口
            # 传递必要的请求头给后端应用
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

2. 可选:基于请求Host的白名单(针对特定域名访问)

如果你的服务是通过特定Host头来接收请求的,还可以额外配置基于Host的白名单规则,进一步精准管控:

server {
    listen 80;
    server_name allowed-app.example.com; # 只允许这个Host的请求

    # 同时结合集群IP段白名单
    allow $cluster_pod_cidr;
    allow $cluster_service_cidr;
    deny all;

    location / {
        proxy_pass http://localhost:8080;
        # 其他代理头配置...
    }
}

3. 关键注意事项

  • 规则顺序很重要:Nginx的allow规则是按从上到下的顺序匹配的,一定要把全集群的规则放在最前面,再放特定服务的规则,最后用deny all收尾。
  • 日志排查:建议加上日志配置,方便后续排查拦截情况:
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    
  • 资源配置:在Pod的资源清单里给Nginx容器分配足够的CPU和内存,避免成为流量瓶颈。
  • 端口匹配:确保proxy_pass里的端口和应用容器的暴露端口完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:18:23