• 记录一次很乱的k8s环境下新增白名单功能的辛酸


    1.背景 

      之前记录过k8s中ingress以及nginx获取客户端真实IP的文章,我司这个项目架构和这个环境一样,因为遗留问题,导致这个架构比较乱,为了更清晰的记录,还是画个图吧。

      可以看到以上配置跳来跳去,这也是历史遗留原因,首先比如www.baidu.com/lizexiong/test到达lb,lb根据判断后把请求转给ingress,ingress根据lizexiong/test,然后反向定量用户输入的,最后转给pod nginx,转了2次。

      为什么要先强调一下拓扑。是因为突然间多了一个需求。环境原因,部分url不能提前公开对外,但是我司这部分业务需要在线上环境测试然后对外。但是如果发布肯定就对外了,所以这里想到了白名单或者安全组或者防火墙。只开放予许访问的IP。所以有了以下思路。

    1.LB不能做安全组,因为安全组上面有很多项目,会受到影响,除非用7层防火墙有可能,但是要钱,此方案pass。

    2.Ingress上设置,百度看了一下设置方式,怕会影响所有项目,偷懒,不想准备测试环境,pass了

    3.Pod的nginx上设置allow ip,此方案可行,最后引出一个超级麻烦的事情。(见下节)

    4.使用小域名(在正式域名外设置一个其他专门测试的域名),但是被运营否认了。

     

    2.遇到问题

      那就选方案3吧,看着最简单,还不影响,还不需要准备环境,于是就在location里配置了allow 1.1.1.1,予许我司IP访问,自己简单测试了2次,以为解决了。

      结果测试人员去测试的时候说,一会正常,一会403,结果自己去看,果然如此。  

      查看了ingress日志,是正常的。也获取到了客户端的真实IP,怎么会不对呢。

      于是查看pod nginx的日志,结果发现,访问的时候有k8s node主机的IP。

        只要日志出现k8s node主机ip的时候,访问就403,因为这个IP我没有加入到allow白名单里面。

        后面排查了很久,新建了一个集群,所有环境相同(这里说的是配置,版本,容器),但是新建的这套集群却一点没问题。

        后面仔细检查版本,配置一些内容,最后突然想到,唯一不同的就是出问题的集群有三个node节点,没有出问题的只有一个k8snode节点。

     

    3.问题原因

      最后仔细想想,仔细看看之前配置,到ingress之后,ingress还会做一次跳转,会剥离lizexiong/test的url,到pod nginx上只剩下 /了,如果ingress和pod nginx不在同一台node上,跳转的时候出去请求的IP那不就是k8s nodeIP吗?找到原因。

      后面就准备设置亲和性和pod local模式。

      但是又要各种测试,不是要了老命嘛,而且,每次取消白名单对外的时候都会很麻烦。

     

    4.问题解决

    所以使用方案2,ingress上配置,20分钟解决。差点吐了,还是不能太偷懒。

    作者:小家电维修

    相见有时,后会无期。

  • 相关阅读:
    .NET探索模型路由约定实现伪静态
    .NET中使用DebuggerDisplay轻松定制调试
    .NET探索平台条件编译
    Spring Boot+Logback输出日志到指定路径
    SAPD:FSAF升级版,合理的损失值加权以及金字塔特征选择 | ECCV 2020
    FSAF:嵌入anchor-free分支来指导acnhor-based算法训练 | CVPR2019
    RepPointsV2:更多的监督任务,更强的性能 | NIPS 2020
    RepPoints:微软巧用变形卷积生成点集进行目标检测,创意满满 | ICCV 2019
    CornerNet-Lite:CornerNet粗暴优化,加速6倍还提点了 | BMVC 2020
    SaccadeNet:使用角点特征进行two-stage预测框精调 | CVPR 2020
  • 原文地址:https://www.cnblogs.com/lizexiong/p/15547150.html
Copyright © 2020-2023  润新知