美文网首页
Kubernetes Ingress NGINX Control

Kubernetes Ingress NGINX Control

作者: 陈光辉_akr8s | 来源:发表于2023-10-31 21:13 被阅读0次

    摘要:

    Ingress NGINX Controller是一个Kubernetes上的Ingress控制器,它可以将外部流量路由到K8s集群内的服务。主要提供7层路由能力,是目前K8sHTTP/HTTPS服务的主流暴露方式。当Ingress NGINX Controller处理访问请求时,会将相关信息记录在日志中,例如请求的URL、状态码等。有了这些数据信息,对业务系统的流量分析,包括问题定位都有极大的帮助。

    image.png

    接下来我们将介绍如何收集Ingress NGINX Controller的日志,并将日志存储在Elasticsearch中,然后使用Grafana进行展示可视化展示及分析。如各服务的PVUV、访问最多的IP地址、最常请求的资源、历史趋势等。

    日志收集

    我们集群的管理日志使用filebeat收集,只需要简单配置就能收集到Ingress NGINX Controller的日志,并且filebeat有专门的模块解析Ingress NGINX Controller日志的字段,都不需要自己写gork解析日志字段。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      namespace: kube-logging
      name: filebeat-config
      labels:
        app: filebeat
    data:
      filebeat.yml: |-
        filebeat.config:
          inputs:
            # Mounted `filebeat-inputs` configmap:
            path: ${path.config}/inputs.d/*.yml
            # Reload inputs configs as they change:
            reload.enabled: true
            reload.period: 10s
          modules:
            path: ${path.config}/modules.d/*.yml
            # Reload module configs as they change:
            reload.enabled: false 
            xpack.monitoring.enabled: true
     
        # 使用filebeat autodiscover收集ingress nginx controller的日志
        filebeat.autodiscover:
          providers:
            - type: kubernetes
              templates:
                - condition:
                    equals:
                      kubernetes.namespace: "ingress-nginx"
                  config:
                    - module: nginx
                      ingress_controller:
                        enabled: true
                        input:
                          type: container
                          paths:
                            - /var/log/containers/*-${data.kubernetes.container.id}.log
                          ignore_older: 48h
                          fields_under_root: true
                          fields:
                            servicetype: "k8s_ingress_log"
    

    收集到日志后配置outputElasticsearch

        output.elasticsearch:
          hosts: ["elasticsearch:9200"]
          indices:
            - index: "k8s-ingress-log-%{+yyyy.MM.dd}"
              when.contains:
                servicetype: "k8s_ingress_log"
    

    Ingress NGINX Controller 日志分析

    image-20231101192902396.png

    日志入库后就可以检索了。

    这些访问日志通常包含URL、源IPUserAgent、状态码、入/出流量、响应时间等,数据量大、信息价值也比较高。从这些信息中,我们能够分析出非常多的信息:

    • 服务访问的PVUV
    • 访问的客户端IP信息
    • 访问的错误比例
    • 后端服务的响应延迟
    • 不同URL访问分布
    • 恶意攻击分析

    当然还可以进行服务来源的地域分析,但我们的服务访问基本都发生在内网之间,所以就不做这部分的信息分析了。

    有了这些信息,就可以很轻松应对业务同事的各种数据统计已经问题定位的需求了。比如面前我们有位业务系统小姐姐同事找我要访问响应状态码,统计接口的调用量,查看请求的转发等等。

    Ingress 可视化

    我们根据收集到的日志数据,定制了几个可视化看板:总体概览、TOPPV & UV、趋势展示、报表分析。所有可视化看板均可通过单一服务过滤,亦可根据业务系统实际场景进行定制化调整。

    总体概览

    总体概览看板主要展示当前集群的整体状态,主要包括以下几类信息:

    • 整体状态,包括:PVUV、处理时间、平均响应时间等
    image-20231101202921347.png

    TOP

    TOP则可统计展示源IPUserAgentURL等比较多的信息。

    image-20231101203719194.png

    趋势展示

    趋势展示可以分析请求数、状态码等信息的时间趋势。

    image-20231101204536577.png

    报表分析

    最后可以根据各种需求场景,做一些统计报表。

    image-20231101205019226.png image-20231101205126377.png

    相关文章

      网友评论

          本文标题:Kubernetes Ingress NGINX Control

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