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

Kubernetes中如何阻止通过服务器IP直接访问LoadBalancer类型Nginx服务?

阻止Kubernetes中Nginx服务通过裸IP访问的原生方法

以下是几种Kubernetes原生的实现方案,可实现仅允许指定域名访问、阻止裸IP直连的需求:

方法1:使用Ingress资源(推荐)

Ingress是Kubernetes原生的HTTP路由管理资源,通过配置主机规则,可限定仅匹配指定域名的请求被转发到后端Nginx服务,直接访问负载均衡公网IP的请求会被Ingress Controller拒绝(通常返回404或403)。

示例Ingress配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-domain-ingress
  annotations:
    # 若使用nginx-ingress控制器,添加此注解确保非匹配请求被拒绝
    nginx.ingress.kubernetes.io/default-backend: default-http-backend
spec:
  rules:
  - host: your-domain.com  # 替换为你的实际域名
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-service  # 替换为你的Nginx服务名称
            port:
              number: 80

部署后,只有携带Host: your-domain.com请求头的流量才会被转发到Nginx服务,直接访问公网IP的请求会被返回默认错误响应。

方法2:修改Nginx Pod内部配置

从应用层入手,直接在Nginx配置中指定允许访问的域名,同时设置默认虚拟主机返回拒绝响应,阻断裸IP访问。

  1. 创建包含自定义配置的ConfigMap:
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-custom-config
data:
  nginx.conf: |
    events {}
    http {
      # 仅允许指定域名的虚拟主机
      server {
        listen 80;
        server_name your-domain.com;

        # 业务相关配置
        location / {
          root /usr/share/nginx/html;
          index index.html;
        }
      }

      # 默认服务器,处理裸IP或其他域名的请求
      server {
        listen 80 default_server;
        return 403;  # 返回禁止访问,也可替换为404或自定义页面
      }
    }
  1. 修改Nginx Deployment,将ConfigMap挂载到Pod的配置目录:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
        volumeMounts:
        - name: nginx-config
          mountPath: /etc/nginx/nginx.conf
          subPath: nginx.conf
      volumes:
      - name: nginx-config
        configMap:
          name: nginx-custom-config

配置生效后,Nginx会直接拒绝所有不匹配指定域名的请求,包括通过裸IP发起的访问。

方法3:利用Service外部流量策略(辅助方案)

若你的LoadBalancer服务仅需对接Ingress流量,可将Nginx Service的externalTrafficPolicy设置为Local,确保仅Ingress Controller所在节点能访问Nginx Pod。这种方式通常作为前两种方案的辅助手段使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:50:41