全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:使用ACKTerway和CiliumHubble实现网络可观测性

更新时间:Feb 23, 2024

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

前提条件

创建Kubernetes托管版集群

说明

Cilium Hubble当前仅支持基于IPvlan的Terway ENI多IP网络模式。因此创建集群时必须设置网络插件TerwayTerway模式IPvlan,不然无法使用Cilium 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,则您的集群不支持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容器组。

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

  1. 步骤二:选择集群凭证类型

  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,则您的集群不支持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性能产生一定影响。

  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容器组名称,重复执行上述步骤,逐个删除容器组。

步骤二:安装Cilium Hubble

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

  2. 在控制台左侧导航栏,选择市场 > 应用市场

  3. 应用目录页面搜索ack-terway-hubble,找到并单击ack-terway-hubble,然后在ack-terway-hubble页面的右上角,单击一键部署

  4. 创建页面,选择目标集群后单击下一步。在参数区域的ingress参数下设置hosts,用于后续访问Hubble UI的界面,其他参数请根据实际情况设置。

    说明

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

    参数

    描述

    enabled

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

    annotations

    自定义Ingress Annotations。

    path

    自定义Ingress根路径。

    hosts

    自定义Ingress Hosts。

    tls

    自定义Ingress TLS配置。

  5. 单击确定

步骤三:使用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报文