K8s 通过 Nginx Ingress 配置白名单IP访问限制

在Kubernetes集群中,为了增强服务的安全性,我们经常需要限制对特定服务的访问,只允许特定的IP地址或IP段进行访问。通过Ingress配置白名单IP访问是一种常见且有效的安全措施。本文将详细介绍如何在Kubernetes中通过 Nginx Ingress 实现IP白名单访问控制。

什么是Ingress

Ingress是Kubernetes中的一个API对象,用于管理外部访问集群内服务的路由规则,通常通过HTTP/HTTPS协议。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。

为什么需要IP白名单

配置IP白名单的主要目的是增强安全性:

  1. 限制对敏感服务的访问
  2. 防止未授权的访问和攻击
  3. 满足合规性要求
  4. 控制流量来源

Nginx Ingress Controller支持

IP白名单功能通过Nginx Ingress Controller实现,它是在Kubernetes环境中最常用和成熟的Ingress Controller之一。Nginx Ingress Controller通过在Ingress资源上添加annotations来配置IP白名单功能。

通过Nginx Ingress配置IP白名单

Nginx Ingress Controller通过在Ingress资源上添加annotations来配置IP白名单。核心注解是nginx.ingress.kubernetes.io/whitelist-source-range,它实际上会将配置转换并注入到底层的Nginx配置中。

注解工作原理

nginx.ingress.kubernetes.io/whitelist-source-range注解的底屧行为:

  1. 转换为Nginx指令 :Ingress Controller会将此注解转换为Nginx的allowdeny指令

  2. 配置位置 :这些指令会被插入到Nginx配置文件的location块中

  3. 生成配置示例

    nginx 复制代码
    # 注解配置:whitelist-source-range: "192.168.10.100,192.168.1.0/24,10.0.0.0/8"
    
    # 生成的Nginx配置:
    allow 192.168.10.100;
    allow 192.168.1.0/24;
    allow 10.0.0.0/8;
    deny all;
  4. 处理流程

    • Ingress Controller监听Ingress资源的变化
    • 解析注解中的IP白名单配置
    • 生成对应的Nginx配置并更新配置文件
    • 重新加载Nginx使配置生效
  5. 生效范围:每个Ingress的注解只影响该Ingress资源中定义的所有路径和规则

基本配置示例

yaml 复制代码
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    # 配置允许访问的IP白名单(包含网段和固定IP)
    nginx.ingress.kubernetes.io/whitelist-source-range: "192.168.10.100,192.168.1.0/24,10.0.0.0/8"
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-service
            port:
              number: 80

注意事项

  1. Nginx Ingress Controller版本 :确保使用的Nginx Ingress Controller版本支持whitelist-source-range注解
  2. 网络架构:考虑服务是否通过负载均衡器或代理,确保获取到正确的客户端IP
  3. 测试验证:配置后务必测试白名单是否生效
  4. 日志监控:监控被拒绝的访问请求,确保配置正确且不影响正常用户
  5. 注解语法:确保IP地址格式正确(CIDR表示法),多个IP用逗号分隔

如何自定义获取真实IP地址的Header

当客户端请求经过代理或负载均衡器时,需要配置自定义Header来获取真实客户端IP。

配置示例

yaml 复制代码
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: custom-header-whitelist
  annotations:
    # 白名单配置
    nginx.ingress.kubernetes.io/whitelist-source-range: "192.168.1.0/24,10.0.0.0/8"
    # 自定义真实IP Header配置
    nginx.ingress.kubernetes.io/configuration-snippet: |
      set_real_ip_from 10.0.0.0/8;
      set_real_ip_from 172.16.0.0/12;
      set_real_ip_from 192.168.0.0/16;
      real_ip_header X-Forwarded-For;
      real_ip_recursive on;
spec:
  rules:
  - host: secure.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: secure-service
            port:
              number: 80

说明:

  • set_real_ip_from:设置信任的代理IP段
  • real_ip_header:指定从哪个Header获取真实IP
  • real_ip_recursive on:从右向左解析,找到第一个不在信任列表中的IP作为真实IP

测试白名单配置

配置完成后,可以通过以下方式进行测试:

  1. 从允许的IP地址访问服务,确认可以正常访问
  2. 从未允许的IP地址访问服务,确认返回403 Forbidden
  3. 检查Ingress Controller的日志,确认拒绝记录

故障排除

如果白名单配置不生效,可以检查:

  1. Ingress Controller是否正确部署并运行
  2. annotations语法是否正确
  3. IP地址格式是否正确(CIDR表示法)
  4. 网络策略是否与Ingress配置冲突
  5. 客户端真实IP是否被正确传递

总结

通过Nginx Ingress Controller配置IP白名单是在Kubernetes中实现访问控制的有效方法。使用nginx.ingress.kubernetes.io/whitelist-source-range注解可以灵活地控制访问权限,该注解会转换为底层的Nginx allow/deny指令来实现访问控制。

正确配置IP白名单可以显著提高服务的安全性,但在实施时需要注意网络架构和Nginx Ingress Controller的版本兼容性问题。在实际应用中,建议结合其他安全措施,如身份认证、授权控制等,构建多层次的安全防护体系。


(END)

相关推荐
农民工老王6 小时前
K8s 1.31 私有化部署实战:从 Calico 崩溃到 NFS 挂载失败的排坑全记录
云原生·kubernetes
广州中轴线6 小时前
OpenStack on Kubernetes 生产部署实战(十四)
kubernetes·智能路由器·openstack
人间打气筒(Ada)1 天前
k8s:CNI网络插件flannel与calico
linux·云原生·容器·kubernetes·云计算·k8s
江畔何人初1 天前
pod的内部结构
linux·运维·云原生·容器·kubernetes
苦逼IT运维1 天前
从 0 到 1 理解 Kubernetes:一次“破坏式”学习实践(一)
linux·学习·docker·容器·kubernetes
腾讯云开发者1 天前
言出法随 -- Chaterm如何通过ASR精准操作K8S
云原生·容器·kubernetes
伟大的大威1 天前
NVIDIA DGX Spark (ARM64/Blackwell) Kubernetes 集群 + GPU Operator 完整部署指南
大数据·spark·kubernetes
only_Klein1 天前
kubernetes Pod 通信过程演示
网络·kubernetes·tcpdump
为什么不问问神奇的海螺呢丶1 天前
n9e categraf k8s监控配置 -cadvisor
云原生·容器·kubernetes
炸裂狸花猫1 天前
开源域名代理与流量限制方案 - Cloudflare + Ingress + 自签名证书
运维·云原生·容器·kubernetes·cloudflare·waf·免费域名证书