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

前提条件

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

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

通过控制台设置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,则您的集群不支持ACK Terway 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容器组。

通过命令行设置Terway的配置文件eni-config

  1. 通过kubectl连接Kubernetes集群
  2. 编辑Terway的配置文件eni-config。
    1. 执行以下命令,编辑Terway的配置文件。
      kubectl -n kube-system edit configmap eni-config
    2. 将以下内容复制到Terway的配置文件,然后保存。
      "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,则您的集群不支持ACK Terway 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性能产生一定影响。
  3. 重启Terway容器组,使其配置文件生效。
    1. 执行以下命令,查看Terway容器组。
      kubectl -n kube-system get pod | grep terway-eniip
    2. 执行以下命令,删除Terway容器组。
       kubectl -n kube-system delete pod terway-eniip-xxx

      其中terway-eniip-xxx需替换为Terway容器组名称,重复执行上述步骤,逐个删除容器组。

步骤二:安装ACK Terway Hubble

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,选择市场 > 应用目录
  3. 应用目录页面搜索ack-terway-hubble,找到并单击ack-terway-hubble。
  4. 在右侧创建面板中,选择目标集群。
  5. 应用目录-ack-terway-hubble页面单击参数页签,在ingress参数下设置hosts,用于后续访问Hubble UI的界面,其他参数请根据实际情况设置。
    说明 以下参数均需要在ingress参数下配置。
    参数 描述
    enabled 是否开启Hubble-UI的Ingress访问。
    annotations 自定义Ingress Annotations。
    path 自定义Ingress根路径。
    hosts 自定义Ingress Hosts。
    tls 自定义Ingress TLS配置。
  6. 在右侧创建面板中单击创建

步骤三:使用ACK Terway Hubble

如果您在ACK Terway 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地址。
  • 在页面上半部分,您可以查看容器集群中各个命名空间中容器组与服务互访的拓扑结构。
  • 在页面下半部分,您可以查看当前容器网络中网络流量的来源、目的地、端口信息以及转发状态。
  • 如果您设置了网络策略,您可以查看哪些流量是被网络策略丢弃的。
可观测
ACK Terway Hubble可以通过kube-system命名空间下hubble-metrics服务暴露一系列网络流量的指标,具体暴露的指标由eni-config中 cilium_hubble_metrics字段进行控制。您可以使用Prometheus和ARMS Prometheus采集Metrics数据。具体操作,请参见开源Prometheus监控阿里云Prometheus监控
说明 更多ACK Terway 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报文