使用ACKTerway和CiliumHubble实现网络可观测性

在ACKTerway集群中部署CiliumHubble可以将容器网络流量、网络策略进行可视化展示,从而实现网络架构、业务拓扑关系的可观测性。本文介绍如何使用CiliumHubble查看容器网络中网络流量的来源、目的地等数据,实现网络可观测性。

前提条件

创建Kubernetes托管版集群

说明

Cilium Hubble当前仅支持基于IPvlan的Terway ENI多IP网络模式。因此创建集群时必须设置网络插件TerwayTerway模式IPvlan,不然无法使用Cilium Hubble。

步骤一:设置Terway的配置文件eni-config

控制台方式

  1. 登录容器服务管理控制台

  2. 在控制台左侧导航栏,单击集群

  3. 集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情

  4. 编辑Terway的配置文件eni-config。

    1. 在集群管理页左侧导航栏,选择配置管理 > 配置项

    2. 配置项页面顶部设置命名空间为kube-system,单击eni-config操作列下的YAML编辑

    3. 查看YAML面板找到10-terway.conf,在10-terway.conf下添加以下参数,然后单击确定

      "cilium_enable_hubble":"true",
      "cilium_hubble_listen_address":":4244",
      "cilium_hubble_metrics_server":":9091",
      "cilium_hubble_metrics":"drop,tcp,flow,port-distribution,icmp",

      参数

      描述

      备注

      eniip_virtual_type

      是否开启IPvlan模式。

      如果配置文件中此项不存在或不为IPVLAN,则您的集群不支持Cilium Hubble。

      cilium_enable_hubble

      启用Hubble网络流量分析。

      本文设置为"true"

      cilium_hubble_listen_address

      Hubble网络流量信息暴露地址。

      本文设置为":4244"

      cilium_hubble_metrics_server

      Hubble Metrics暴露的地址。

      本文设置为":9091"

      cilium_hubble_metrics

      Hubble需要采集的Metrics,以半角逗号(,)分割。

      目前不支持DNS、HTTP这类L7的能力。Hubble支持采集的Metrics全量列表为"drop,tcp,flow,port-distribution,icmp"

      说明

      如果您启用Metrics数量比较多,则会对Hubble性能产生一定影响。

  5. 重启Terway容器组,使其配置文件生效。

    1. 在集群管理页左侧导航栏,选择工作负载 > 容器组

    2. 容器组页面顶部设置命名空间为kube-system,在搜索框中搜索terway-eniip,单击terway-eniip-xxx操作列下的更多 > 删除

    3. 在弹出的对话框中单击确定

      容器组页面terway-eniip-xxx状态列显示Running,说明重启容器组成功。

    4. 重复执行以上步骤,删除所有Terway容器组。

kubectl方式

  1. 编辑Terway的配置文件eni-config。

    1. 执行以下命令,编辑Terway的配置文件。

      kubectl -n kube-system edit configmap eni-config
    2. 将以下内容复制到Terway的配置文件中,在10-terway.conf下添加以下参数,然后保存并退出。

      "cilium_enable_hubble":"true",
      "cilium_hubble_listen_address":":4244",
      "cilium_hubble_metrics_server":":9091",
      "cilium_hubble_metrics":"drop,tcp,flow,port-distribution,icmp",

      参数

      描述

      备注

      eniip_virtual_type

      是否开启IPVLAN模式。

      如果配置文件中此项不存在或不为IPVLAN,则您的集群不支持Cilium Hubble。

      cilium_enable_hubble

      启用Hubble网络流量分析。

      本文设置为"true"

      cilium_hubble_listen_address

      Hubble网络流量信息暴露地址。

      本文设置为":4244"

      cilium_hubble_metrics_server

      Hubble Metrics暴露的地址。

      本文设置为":9091"

      cilium_hubble_metrics

      Hubble需要采集的Metrics,以半角逗号(,)分割。

      目前不支持DNS、HTTP这类L7的能力。Hubble支持采集的Metrics全量列表为"drop,tcp,flow,port-distribution,icmp"

      说明

      如果您启用Metrics数量比较多,则会对Hubble性能产生一定影响。

  2. 重启Terway容器组,使其配置文件生效。

    kubectl rollout restart daemonset -n kube-system terway-eniip

步骤二:安装Cilium Hubble

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择应用 > Helm

  3. Helm页面,单击创建。参考如下信息完成基础信息配置。

    参数

    示例值

    应用名

    ack-terway-hubble

    命名空间

    kube-system

    来源

    默认为应用市场

    Chart

    • 应用场景:选择全部

    • 支持架构:选择amd64

    • 搜索框:搜索ack-terway-hubble

    选中ack-terway-hubble,单击下一步

  4. 参数配置页面,选择Chart版本然后在参数区域的ingress参数下设置hosts,用于后续访问Hubble UI的界面,其他参数请根据实际情况设置。然后单击确定

    说明

    以下参数均需要在ingress参数下配置。

    参数

    描述

    enabled

    是否开启Hubble-UI的Ingress访问。

    annotations

    自定义Ingress Annotations。

    path

    自定义Ingress根路径。

    hosts

    自定义Ingress Hosts。

    tls

    自定义Ingress TLS配置。

步骤三:使用Cilium Hubble

如果您在Cilium Hubble中配置了Ingress域名hosts,您可以通过该域名的80端口访问Hubble UI的界面。访问该域名,您可以在界面上看到以下信息:

说明

如果您使用了非权威解析的域名,例如ingress.local,您需要执行kubectl -n kube-system get svc nginx-ingress-lb命令,查看Hubble UI的IP地址,然后在本地hosts进行绑定,将ingress.local指向Ingress Hubble UI的IP地址。

  • 在页面上半部分,您可以查看容器集群中各个命名空间中容器组与服务互访的拓扑结构。

  • 在页面下半部分,您可以查看当前容器网络中网络流量的来源、目的地、端口信息以及转发状态。

  • 如果您设置了网络策略,您可以查看哪些流量被网络策略丢弃。

可观测

Cilium Hubble可以通过kube-system命名空间下hubble-metrics服务暴露一系列网络流量的指标,具体暴露的指标由eni-config中 cilium_hubble_metrics字段进行控制。您可以使用Prometheus和阿里云Prometheus采集Metrics数据。具体操作,请参见开源Prometheus监控阿里云Prometheus监控

说明

更多Cilium Hubble暴露的指标,请参见hubble-exported-metrics

指标大类

指标名

指标字段

说明

drop

hubble_drop_total

reason,protocol

丢弃报文

tcp

hubble_tcp_flags_total

flag,family

TCP标记

flow

hubble_flows_processed_total

type,subtype,verdict

网络流

port-distribution

hubble_port_distribution_total

protocol,port

目的端口报文分布

icmp

hubble_icmp_total

family,type

ICMP报文