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


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
4月前
|
前端开发 测试技术
可访问性测试清单/测试用例/场景
可访问性测试清单/测试用例/场景
可访问性测试清单/测试用例/场景
|
4月前
|
域名解析 JSON 测试技术
常见移动端APP测试场景
常见移动端APP测试场景
|
5月前
|
Kubernetes Cloud Native 网络安全
云原生|kubernetes|CKA模拟测试-2022(1---10题)(一)
云原生|kubernetes|CKA模拟测试-2022(1---10题)(一)
115 0
|
2月前
|
存储 测试技术 C++
P2P网络下分布式文件共享场景的测试
P2P网络下分布式文件共享场景的测试
35 6
|
2月前
|
弹性计算 运维 Kubernetes
云原生K8S场景自动化响应ECS系统事件
客户云原生K8S场景下,通过社区开源NPD+Draino+Autoscaler零开发,对接响应ECS主动运维事件,通过自动响应事件减少非预期宕机。
|
3月前
|
Web App开发 传感器 Android开发
APP兼容性测试都需要考虑哪些场景?
APP兼容性测试都需要考虑哪些场景?
|
3月前
|
测试技术
面试题8: 如何确定测试需求的关键场景和细节?
面试题8: 如何确定测试需求的关键场景和细节?
|
4月前
|
存储 监控 安全
自动化测试适用场景
自动化测试适用场景
|
4月前
|
NoSQL 测试技术 应用服务中间件
考试查分场景重保背后,我们如何进行可用性测试
考试查分场景重保背后,我们如何进行可用性测试
|
5月前
|
Kubernetes Go API

相关产品

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

    更多