Kubernetes Ingress实现细粒度IP访问控制

目录
  • 业务场景

业务场景

有这么一个业务场景:业务平台还是通过Kubernetes进行编排对外提供服务。然后其后台管理部分,出于安全的考虑,只允许特定的IP才能访问。如何实现?

目前,我们的网络架构是 SLB + Nginx Ingress + Ingress + Service + Pod的模式。其中,SLB使用的是阿里云的负载均衡SaaS服务,使用的是7层负载,支持一个SLB实例+多个域名的转发模式,如下图所示。

阿里云SLB可以通过设定黑/白名单的方式进行访问控制,但是该访问控制会进行”一刀切“:所有通过该SLB提供服务的域名要么都可以访问,要么都不可以访问。如果domain1和domain2这俩域名可以开放访问,domain3限定某些特定IP才能访问,阿里云SLB的访问控制就无法满足我们的需求。

如果要实现这种业务场景,可以通过在Ingress里配置白名单来实现。

配置如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/server-snippet: |
      set_real_ip_from 100.64.0.0/10; # 100.64.0.0/10是阿里云负载均衡网段 https://help.aliyun.com/document_detail/54007.html
      set_real_ip_from 192.168.0.0/24;
      real_ip_header X-Forwarded-For;
      real_ip_recursive on;
    nginx.ingress.kubernetes.io/whitelist-source-range: {allow_access_ip1},{allow_access_ip2}
  name: {your_application-ingress}
  namespace: {your_ns}
spec:
  rules:
  - host: {your_host}
    http:
      paths:
      - backend:
          service:
            name: {your_application-service}
            port:
              number: 80
        path: /
        pathType: Prefix

说明:

  • nginx.ingress.kubernetes.io/server-snippet: 等同于在nginx的server配置块中添加自定义配置;
  • nginx.ingress.kubernetes.io/whitelist-source-range: 允许访问的客户端IP源,多个IP可用逗号隔开,支持CIDR格式,如:192.168.0.0/24, 172.31.0.1;
  • set_real_ip_from : 是指接受从哪个信任前代理处获得真实用户ip, 可以写多行,如100.64.0.0/10, 192.168.0.0/24
  • real_ip_header : 是指从接收到报文的哪个http首部去获取前代理传送的用户ip, 一般是从header的X-Forwarded-For字段获取IP(remote_addr只是代理上一层的地址,不一定是原始的用户ip)
  • real_ip_recursive :
    • 为on时 递归排除IP地址:对从real_ip_header里获得的IP串,从右往左, 依次过滤掉来自set_real_ip_from的IP,剩下的第一个就默认是用户的IP了。
    • 为off时,对从real_ip_header里获取的IP串,当最右边一个IP是信任的IP(即在set_real_ip_from里有设置),即认为其右边的第二个IP就是用户的真实IP。

举例, 假设:

  • real_ip_header里获得的IP串是1.1.1.1, 2.2.2.2, 192.168.0.100
  • set_real_ip_from = 192.168.0.0/24,2.2.2.2
  • real_ip_recursive = on时,用户IP=1.1.1.1
  • real_ip_recursive = off时,用户IP=2.2.2.2

通过以上设置,就可以在同一个SLB实例下,实现域名级别的访问控制,比较适合后台管理类网站部署的访问控制。

以上就是Kubernetes Ingress实现细粒度IP访问控制的详细内容,更多关于Kubernetes Ingress IP访问控制的资料请关注我们其它相关文章!

(0)

相关推荐

  • 一文详解kubernetes 中资源分配的那些事

    目录 概要 一个nginx的配置 我们进入nginx容器所在目录看下 cpu.shares cpu.cpu.cfs_period_us.cpu.cfs_quota_us 资源使用率数据来源 下kubelet相关配置:** 概要 在k8s中,kube-scheduler是Kubernetes中的调度器,用于将Pod调度到可用的节点上.在调度过程中,kube-scheduler需要了解节点和Pod的资源需求和可用性情况,其中CPU和内存是最常见的资源需求.那么这些资源的使用率是怎么来的呢?当Pod调

  • 详解Kubernetes 中容器跨主机网络

    目录 前言 什么是 Flannel Flannel 的后端实现有哪些 UDP VXLAN Host-gw 基于 Flannel UDP 模式的实现跨主通信 UDP 模式案例实现 基于 Flannel VXLAN 模式的跨主通信 VXLAN 模式案例实现 总结 前言 在云原生领域,Kubernetes 已经成为了最主流的容器管理工具.Kubernetes 支持将容器部署到多个节点(即主机)上,因此必须解决容器间跨主机通信的问题. 本文将详细介绍 Kubernetes 中容器跨主机网络的实现原理和方

  • 路由器访问控制列表详解

    网络安全保障的第一道关卡 对于许多网管员来说,配置路由器的访问控制列表是一件经常性的工作,可以说,路由器的访问控制列表是网络安全保障的第一道关卡.访问列表提供了一种机制,它可以控制和过滤通过路由器的不同接口去往不同方向的信息流.这种机制允许用户使用访问表来管理信息流,以制定公司内部网络的相关策略.这些策略可以描述安全功能,并且反映流量的优先级别.例如,某个组织可能希望允许或拒绝Internet对内部Web服务器的访问,或者允许内部局域网上一个或多个工作站能够将数据流发到广域网上.这些情形,以及其

  • 访问控制列表概述

    访问控制列表从概念上来讲并不复杂,复杂的是对它的配置和使用,许多初学者往往在使用访问控制列表时出现错误. 下面是对几种访问控制列表的简要总结. ●标准IP访问控制列表 一个标准IP访问控制列表匹配IP包中的源地址或源地址中的一部分,可对匹配的包采取拒绝或允许两个操作.编号范围是从1到99的访问控制列表是标准IP访问控制列表. ●扩展I P访问控制列表 扩展IP访问控制列表比标准IP访问控制列表具有更多的匹配项,包括协议类型.源地址.目的地址.源端口.目的端口.建立连接的和IP优先级等.编号范围是

  • Kubernetes(K8S)容器集群管理环境完整部署详细教程-中篇

    本文系列: Kubernetes(K8S)容器集群管理环境完整部署详细教程-上篇 Kubernetes(K8S)容器集群管理环境完整部署详细教程-中篇 Kubernetes(K8S)容器集群管理环境完整部署详细教程-下篇 接着Kubernetes(K8S)容器集群管理环境完整部署详细教程-上篇继续往下部署: 八.部署master节点 master节点的kube-apiserver.kube-scheduler 和 kube-controller-manager 均以多实例模式运行:kube-sc

  • 基于Docker+K8S+GitLab/SVN+Jenkins+Harbor搭建持续集成交付环境的详细教程

    环境搭建概述 亲爱的家人们可以到链接:http://xiazai.jb51.net/202105/yuanma/javayaml_jb51.rar  下载所需要的yaml文件. 1.K8S是什么? K8S全称是Kubernetes,是一个全新的基于容器技术的分布式架构领先方案,基于容器技术,目的是实现资源管理的自动化,以及跨多个数据中心的资源利用率的最大化. 如果我们的系统设计遵循了kubernetes的设计思想,那么传统系统架构中那些和业务没有多大关系的底层代码或功能模块,都可以使用K8S来管

  • 详解Nginx服务器中的nginx.conf配置文件

    Nginx 配置文件主要分成四部分:main(全局设置).http(HTTP 的通用设置).server(虚拟主机设置).location(匹配 URL 路径).还有一些其他的配置段,如 event,upstream 等. 通用设置     user nginx     指定运行 nginx workre 进程的用户和组 worker_rlimit_nofile #     指定所有 worker 进程能够打开的最大文件数     worker_cpu_affinity     设置 worke

  • 使用PHP如何实现高效安全的ftp服务器(一)

    FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务. FTP是File Transfer Protocol(文件传输协议).顾名思义,就是专门用来传输文件的协议.简单地说,支持FTP协议的服务器就是FTP服务器. 摘要: 本文主要阐述使用PHP的swoole扩展实现ftp服务器,同时扩展ftp服务器个性化功能和安全性.真正实现一个自己完全掌控的ftp服务器,可以个性化定制的ftp服务器. 正文: FTP

  • Nginx服务器搭建和基本配置详解

    Nginx(engine X) 是一个高性能的 HTTP 服务器和反向代理服务器,这款软件开发的目的是为了解决 C10k 问题. Nginx 的架构利用了许多现代操作系统的特性,以实现一个高性能的 HTTP 服务器.例如在 Linux 系统上,Nginx 使用了 epoll,sendfile,File AIO,DIRECTIO 等机制,使得 Nginx 不仅性能高效,而且资源占用率非常低,官方宣称 nginx 维持 10000 个非活动的 HTTP keep-alive 连接仅需要 2.5M 内

  • 关于IP-MAC地址绑定的交换机设置

    1.方案1--基于端口的MAC地址绑定 思科2950交换机为例,登录进入交换机,输入管理口令进入配置模式,敲入命令: Switch#config terminal #进入配置模式 Switch(config)# Interface fastethernet 0/1 #进入具体端口配置模式 Switch(config-if)#Switchport port-secruity #配置端口安全模式 Switch(config-if )switchport port-security mac-addre

  • 浅谈MySQL大表优化方案

    背景 阿里云RDS FOR MySQL(MySQL5.7版本)数据库业务表每月新增数据量超过千万,随着数据量持续增加,我们业务出现大表慢查询,在业务高峰期主业务表的慢查询需要几十秒严重影响业务 方案概述 一.数据库设计及索引优化 MySQL数据库本身高度灵活,造成性能不足,严重依赖开发人员的表设计能力以及索引优化能力,在这里给几点优化建议 时间类型转化为时间戳格式,用int类型储存,建索引增加查询效率 建议字段定义not null,null值很难查询优化且占用额外的索引空间 使用TINYINT类

  • AOP Redis自定义注解实现细粒度接口IP访问限制

    目录 系列说明 实现步骤 一.引入依赖 二.写注解 三.写逻辑(注解环绕) 1. 添加注解 2. 注入 RedisTemplate 3. 定义方法 4. 实现方法 5. 开启spring自动装配 四.测试 总结 系列说明 GitHub地址:github.com/stick-i/scb… 目前项目还有很大改进和完善的空间,欢迎各位有意愿的同学参与项目贡献(尤其前端),一起学习一起进步. 项目的技术栈主要是: 后端 Java + SpringBoot + SpringCloud + Nacos +

随机推荐