k8s场景测试之ingresss中geoip的使用

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Geo是geographic的缩写,意思是地理的,GeoIP即为IP地理位置数据库,可以根据IP获得地理位置信息。GeoLite2是GeoIP2的免费版本,与GeoIP2数据库相比准确性较差。 GeoIP库可以根据IP地址(支持IPv4 和 IPv6), 定位该IP所在的 洲、经纬度、国家、省市、ASN 等信息。

Geo基础概念:

Geo是geographic的缩写,意思是地理的,GeoIP即为IP地理位置数据库,可以根据IP获得地理位置信息。GeoLite2是GeoIP2的免费版本,与GeoIP2数据库相比准确性较差。  GeoIP库可以根据IP地址(支持IPv4 和 IPv6), 定位该IP所在的 洲、经纬度、国家、省市、ASN 等信息。


背景信息:      

    某地图用户由于某些原因,需要在ACK上使用geoip2来限制国家级别的ip访问限制,如只允许中国访问,ingress 已经默认集成了geoip,但是geoip已经很久不维护了,信息不准确,而使用高防 waf等访问又会产生比较高的费用,因此促使了本篇文档的产生1,下载geoip2的库文件https://github.com/P3TERX/GeoLite.mmdb2,开启geoip2,需要在configmap里面设置

image.png


踩坑1:

这里走文件的方式去使用新的数据库,生产环境走volume去挂载,注意了,需要三个文件 如ASN,city,country都放进去


踩坑2:

注意缩进,yaml的缩进差一个括号都不行

 use-geoip2: "true"
 http-snippet:
     geoip2 /etc/nginx/geoip/GeoLite2-Country.mmdb {
        $geoip2_data_country_iso_code country iso_code;
     }
     map $geoip2_data_country_iso_code $is_ch_country {
       default no;
       CN yes;  
     }
     use-geoip2: "true"
 http-snippet:
     geoip2 /etc/nginx/geoip/GeoLite2-Country.mmdb {
        $geoip2_data_country_iso_code country iso_code;
     }
     map $geoip2_data_country_iso_code $is_ch_country {
       default no; 默认所有国家都不允许访问
       CN yes;  中国打开,即只有中国的ip能访问
     } 


3,设置ingress的geoip设置

# cat geoip.yaml 
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/server-snippet: |
      if ($is_ch_country = no) {
         return 403; 如果不是中国的ip,返回403
      }
  name: my-geo
  namespace: default
spec:
  rules:
    - host: mygeo.cf406d8459c2c4f63855b2165c77601cb.cn-beijing.alicontainer.com
      http:
        paths:
          - backend:
              serviceName: my-geo
              servicePort: 80
            path: /
            pathType: ImplementationSpecific

4,设置完成后,ingress controller pod内的配置变化

module的加载

image.png

http段的geoip库加载

image.png

server段的判断条件

image.png5,海内外访问测试:

国内:

image.png


国外:

return 444的时候,nginx识别不了,就给reset了,但是改成403就可以返回403了

image.png

image.png


image.png


关闭geo判断,试试海外是否ok了

image.png
可以访问了

image.png

PS:
必须是4层的lb +local模式的流量策略才能获取真实ip,这个geoip依赖的是建联ip


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
2月前
|
存储 Kubernetes 持续交付
介绍一下Kubernetes的应用场景
【10月更文挑战第18天】介绍一下Kubernetes的应用场景。
204 3
|
1月前
|
JavaScript 安全 编译器
TypeScript 与 Jest 测试框架的结合使用,从 TypeScript 的测试需求出发,介绍了 Jest 的特点及其与 TypeScript 结合的优势,详细讲解了基本测试步骤、常见测试场景及异步操作测试方法
本文深入探讨了 TypeScript 与 Jest 测试框架的结合使用,从 TypeScript 的测试需求出发,介绍了 Jest 的特点及其与 TypeScript 结合的优势,详细讲解了基本测试步骤、常见测试场景及异步操作测试方法,并通过实际案例展示了其在项目中的应用效果,旨在提升代码质量和开发效率。
43 6
|
1月前
|
网络协议 关系型数据库 应用服务中间件
【项目场景】请求数据时测试环境比生产环境多花了1秒是怎么回事?
这是一位粉丝(谢同学)给V哥的留言,描述了他在优化系统查询时遇到的问题:测试环境优化达标,但生产环境响应时间多出1秒。通过抓包分析,发现MySQL请求和响应之间存在500毫秒的延迟,怀疑是网络传输开销。V哥给出了以下优化建议:
|
3月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
57 2
|
3月前
|
JavaScript 前端开发 数据库
数据库测试场景实践总结
本文介绍了数据库超时和应用锁表SSDB测试场景的验证方法,通过锁定数据表模拟写入失败情况,并利用SSDB进行重试。测试需开发人员配合验证功能。同时,提供了SSDB服务器登录、查询队列数量及重启服务等常用命令。适用于验证和解决数据库写入问题。
42 7
|
3月前
|
Kubernetes Linux API
CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇
该博客文章详细介绍了在CentOS 7.6操作系统上使用kubeadm工具部署kubernetes 1.17.2版本的测试集群的过程,包括主机环境准备、安装Docker、配置kubelet、初始化集群、添加节点、部署网络插件以及配置k8s node节点管理api server服务器。
161 0
CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇
|
4月前
|
存储 Kubernetes API
在K8S中,etcd 适应的场景?
在K8S中,etcd 适应的场景?
|
4月前
|
运维 Kubernetes 大数据
Kubernetes 的架构问题之在Serverless Container场景下尚不支持资源超售如何解决
Kubernetes 的架构问题之在Serverless Container场景下尚不支持资源超售如何解决
68 0
|
4月前
|
存储 缓存 Kubernetes
在K8S中,有状态服务与无状态服务都是怎么使用pv和pvc?(可以通过应用场景说明一下)
在K8S中,有状态服务与无状态服务都是怎么使用pv和pvc?(可以通过应用场景说明一下)
|
4月前
|
存储 Kubernetes 监控
在K8S中,K8S本身优势、适应场景及其特点有什么?
在K8S中,K8S本身优势、适应场景及其特点有什么?

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多