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的allow和deny指令

  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)

相关推荐
March.s8 小时前
Kubernetes 全景导览:从部署演进到云原生底座
云原生·kubernetes·dubbo
熊出没10 小时前
云原生架构落地实践:Kubernetes 生产级配置与 Service Mesh 流量治理
云原生·架构·kubernetes·istio
东风微鸣15 小时前
K8s 最佳实践已更新:请使用 Node Swap!
kubernetes
励志师code17 小时前
Kubernetes 集群节点生命周期管理实战:从扩容、调度管控到证书续期
运维·docker·容器·kubernetes·gpu算力·kubelet
闲云自留地18 小时前
Kubernetes 安装保姆级:关 swap、装 containerd、init 集群、calico 一篇通
容器·贪心算法·kubernetes
easy_coder20 小时前
Kubernetes 三大探针:Startup、Liveness 与 Readiness
云原生·容器·kubernetes
暖核21 小时前
kubeadm 搭建 K8s v1.30 集群:从系统模板到 Calico 网络全流程
网络·容器·kubernetes
KIDULT°1 天前
Kubeadm 部署 Kubernetes v1.30.2 实战:Ubuntu24.04 三节点集群 + 排坑记录
ubuntu·云原生·容器·kubernetes·k8s
abcefg_h1 天前
多卡多机训练任务调度系统:从梯度平均到拓扑感知调度
kubernetes·大模型·分布式训练·nccl·gpu调度
szuaudi1 天前
K8s 节点假死故障排查过程复盘
网络·容器·kubernetes