美文网首页
ingress异常导致整体网络不可用

ingress异常导致整体网络不可用

作者: 洛子墟 | 来源:发表于2019-08-23 18:24 被阅读0次

    k8s中刷新nginx失败,导致整个网络不可用

    测试环境中所有新发布的应用全都不可用,瘫痪的1个小时左右.
    一路查下来发现问题是nginx刷新异常,记录一下.

    基础环境

    • Kubernetes 1.10

    现象

    新发布的应用无法访问,频繁出现504错误.

    • 查询后台日志
      发现后台大量的刷新Nginx配置失败问题.问题瞬间定位了.
    • upstream不存在
      删除了不存在的upstream后网络恢复正常

    问题描述

    k8s的集群中使用了Nginx作为反向代理.
    如果你发布一个新的应用,Ingress会根据规则动态的把配置文件写入到Nginxdefault.conf中,此时会校验upstream是否存在,如果不存在则会刷新失败.

    • Ingress有bug?
      这套流程正常的话,endpoint的访问都是由k8s控制的,原则上是不会有异常的,那么怎么出的问题?
    • A/B Testing惹的祸
      我们实现灰度发布的方案是依赖于在Nginx中实现Lua脚本,如下:
    location / {
        ....
        if ($http_foo = "bar") {  //完全匹配
        #if ($http_foo ~ "bar") {  //正则匹配
               proxy_pass http://default-new-nginx-80;
               break;
        }
        proxy_pass http://default-old-nginx-80;
        ....
    }
    

    问题来了,除了k8s的正常流程外,我们还会通过发布系统来控制应用的生命周期,相当于废除了k8s的控制.
    实现了此套方案后只要通过k8s系统直接删除pod或者扩容等操作都会造成异常.
    所以现在考虑更优解.

    相关文章

      网友评论

          本文标题:ingress异常导致整体网络不可用

          本文链接:https://www.haomeiwen.com/subject/dboshctx.html