文档首页/ 云监控服务 CES/ 用户指南/ 接入中心/ 接入Prometheus/Grafana/ 通过OIDC认证模式安装配置CES Exporter
更新时间:2026-02-09 GMT+08:00
分享

通过OIDC认证模式安装配置CES Exporter

在使用华为云CCE容器承载cloudeye-exporter能力的过程中,用户在调用云服务API接口时,通常需要预先配置固定的AK/SK(访问密钥和安全密钥)。然而,这种做法无法满足用户对于更高安全性的需求,尤其是在需要频繁更换密钥或在多用户环境中管理密钥时。为了解决这一问题,用户希望采用更安全的认证方式,即通过SDK OIDC(OpenID Connect)方式自动获取临时AK/SK/Security Token,从而实现免AK/SK的访问。如何在不影响现有业务的前提下,实现这一安全访问方式的转换,成为当前亟待解决的问题。为此,华为云提供了一种新的认证鉴权方式,用户只需在启动cloudeye-exporter时指定-auth_mode参数为oidc,并配置相应的OIDC相关参数,即可实现安全、便捷的API接口调用。

约束与限制

  • CES Exporter导出指标时,需调用云服务接口查询资源,当前部分云服务不支持OIDC认证模式,这部分云服务可使用AK/SK认证模式对接。表1列出当前未支持oidc认证模式的云服务及相关维度。

    云监控服务最大支持4个层级维度,维度编号从0开始,编号3为最深层级。例如监控指标中的维度信息为“gaussdb_mysql_instance_id,gaussdb_mysql_node_id”时,表示对应的监控指标的维度存在层级关系,且“gaussdb_mysql_instance_id”为0层,“gaussdb_mysql_node_id”为1层。

    表1 不支持OIDC认证模式的云服务

    云服务

    命名空间

    维度

    维度描述

    GeminiDB(兼容DynamoDB接口)

    SYS.NoSQL

    ddb_table_id

    GeminiDB Serverless表ID

    湖仓构建

    SYS.LakeFormation

    instance_id

    LakeFormation实例ID

    云连接

    SYS.CC

    cloud_connect_id,bwp_id,region_bandwidth_id

    云连接ID,带宽包ID,域间带宽ID

    弹性文件服务

    SYS.SFS

    share_id

    容量型SFS ID

    bucket_name

    通用文件系统ID

    云数据库TaurusDB

    SYS.GAUSSDB

    gaussdb_mysql_instance_id,gaussdb_mysql_node_id

    TaurusDB实例ID,TaurusDB节点ID

    gaussdb_mysql_ha_id,gaussdb_mysql_ha_node_id

    TaurusDB经典架构实例ID,TaurusDB经典架构节点ID

  • CES Exporter目前仅支持安装在Linux x86架构的操作系统中,主机规格选择“4vCPUs | 8GiB”或更高配置
  • OIDC认证模式仅适用于基于CCE集群部署Exporter的场景。
  • 当您部署CES Exporter服务器为ECS,并且ECS的区域与指标实例数据来源服务所在区域不同时,必须绑定EIP,才能访问数据。绑定EIP的操作方法,请参见为资源绑定EIP
  • CES Exporter支持的拓展标签信息请参阅支持的拓展标签说明

前提条件

操作流程

获取CCE集群的签名密钥并创建ServiceAccount

  1. 登录CCE节点,登录方式请参阅登录节点
  2. 使用kubectl连接集群,具体操作请参阅通过kubectl连接集群
  3. 执行以下命令,获取公钥。
    kubectl get --raw /openid/v1/jwks
    返回的结果即集群的公钥,回显结果示例如下:
    # kubectl get --raw /openid/v1/jwks
    {"keys":[{"use":"sig","kty":"RSA","kid":"*****","alg":"RS256","n":"*****","e":"AQAB"}]}
  4. 执行以下命令,创建ServiceAccount。
    kubectl  create sa oidc-token

    oidc-token是ServiceAccount的名称,在IAM配置身份提供商创建并运行有OIDC能力的cloudeye-exporter工作负载时均会用到。

在IAM配置身份提供商

  1. 登录IAM控制台
  2. 在左侧导航栏选择“身份提供商”,进入“身份提供商”页面。
  3. 单击右上角“创建身份提供商”。
  4. 在“创建身份提供商”页面,输入名称并根据界面提示配置参数。
    图1 创建身份提供商
    • 协议:OpenID Connect
    • 类型:虚拟用户SSO
    • 状态:启用
  5. 单击“确定”,完成创建身份提供商。
  6. 在“创建身份提供商”页面,单击新建的身份提供商所在行“操作”列的“修改”。
  7. 在“修改身份提供商”页面,修改“访问方式”为“编程访问”。
  8. 根据以下参数说明,配置“配置信息”。
    • 访问方式:编程访问
    • 身份提供商URL
      1. 登录CCE控制台
      2. 单击集群名称,进入集群详情页面。
      3. 在“概览”页面下的“连接信息”区域,查看集群是否开启“OpenID Connect 提供商”功能。
        • 是,请参考操作步骤8.d-8.f
        • 否,请使用集群默认的身份提供商:“https://kubernetes.default.svc.cluster.local”
      4. 单击集群详情页面左侧“配置中心”。
      5. 单击“Kubernetes原生配置”页签。
      6. 在“Kubernetes原生配置”页面中,“服务账户令牌发行者 (service-account-issuer)”的值即为身份提供商的URL。
    • 客户端ID:自定义一个ID,对应创建并运行有OIDC能力的cloudeye-exporter工作负载exporter-deploy.yaml配置文件中的audience。
    • 签名公钥:CCE集群的签名公钥,请参考3中的返回结果填写。
  9. 在“身份转换规则”区域,单击“创建规则”,创建身份转换规则。
  10. 在“创建规则”弹窗中,输入用户名,并配置规则参数,规则参数说明请参阅配置身份转换规则
    身份映射规则作用是将工作负载的ServiceAccount和IAM用户做映射。为保证身份提供商ID访问云服务时,具有admin用户组的权限,需要将步骤4中在集群default命名空间下创建的名为oidc-token的ServiceAccount,映射到admin用户组,请按照如下模板设置身份转换规则的生效条件,如图2所示。
    图2 创建规则
    • 用户组:admin
    • 属性:sub
    • 条件:any_one_of
    • :system:serviceaccount:default:oidc-token
      值的规则如下,其中,Namespace为创建的 ServiceAccount 所在集群命名空间,ServiceAccountName:ServiceAccount名称
      system:serviceaccount:{Namespace}:{ServiceAccountName}
  11. 在“创建规则”弹窗中,单击“确定”。
  12. 在“修改身份提供商”页面,单击“确定”,完成身份提供商配置。

    单击身份提供商所在行“操作”列的“查看”,身份提供商详细信息已更新成功。

构建cloudeye-exporter镜像

  1. 登录安装了docker的操作系统,进入cloudeye-exporter开源项目,下载最新软件包。
  2. 解压安装包至镜像构建的路径下。
    参考命令:
    mkdir cloudeye-exporter
    cd cloudeye-exporter
    wget https://github.com/huaweicloud/cloudeye-exporter/releases/download/${version}/cloudeye-exporter-${version}.tar.gz
    tar -xzvf cloudeye-exporter-${version}.tar.gz
  3. 执行以下命令,创建docker构建文件Dockerfile
    vi Dockerfile
    以下为Dockerfile的构建内容示例。
    FROM alpine:latest
    RUN mkdir -p /exporter
    COPY cloudeye-exporter /exporter/
    COPY endpoints.yml /exporter/
    COPY clouds.yml /exporter/
    COPY i18n.json /exporter/
    COPY metric.yml /exporter/
    COPY unit_standard_transform.json /exporter/
    COPY logs.yml /exporter/
    WORKDIR /exporter
    RUN chmod +x ./cloudeye-exporter
    CMD ["/exporter/cloudeye-exporter"]
  4. 创建成功后,目录结构如下所示。
    .
    |-- Dockerfile
    |-- cloudeye-exporter
    |-- clouds.yml
    |-- endpoints.yml
    |-- i18n.json
    |-- logs.yml
    |-- metric.yml
    |-- unit_standard_transform.json
  5. 执行构建命令,生成镜像。
    docker build -t cloudeye-exporter:v1.0 .

上传cloudeye-exporter镜像至华为云SWR服务

在启动cloudeye-exporter前,需要将cloudeye-exporter镜像上传至华为云SWR服务。

若您的CCE节点本身具备docker能力,可以直接在CCE节点上构建本地镜像即可,不需要生成离线包。若您的CCE节点不具备docker能力,则需要生成离线镜像包,并上传到SWR服务。

您可以执行以下命令确认CCE节点是否具备docker能力:
docker version
若您的CCE节点本身具备docker能力,可以直接在CCE节点上构建本地镜像即可,不需要生成离线包。

目前,cloudeye-exporter本地镜像的tag不符合上传命令模板要求,如所示。因此,需要确定组织名称、镜像名称和版本名称后,为镜像打tag。

  1. 登录SWR控制台
  2. 在“组织管理”页面,获取需要上传镜像的组织名称。
    图3 组织管理
  3. 登录CCE节点,执行以下命令,设置tag。
    在本案例中,示例区域为华北-北京四,组织名称为cloud.test,镜像名称为cloudeye-exporter,镜像版本为v1.0
    ctr images tag docker.io/library/cloudeye-exporter:v1.0  swr.cn-north-4.myhuaweicloud.com/cloud.test/cloudeye-exporter:v1.0
  4. 在SWR控制台左侧导航栏中选择“我的镜像”。
  5. 在“我的镜像”页面,单击右上角“客户端上传”。
  6. 在“客户端上传”弹窗中,单击“生成上传指令”,弹出“上传指令”弹窗。
  7. 在“通用型上传指令”页签下,复制生成的上传指令。
    图4 通用型上传指令
  8. 登录CCE节点,执行步骤7获取的上传指令,将镜像推送至SWR自有镜像仓库。
    ctr image push --user cn-north-4@XXXXX:xxxxxxxxxxxxxxxxx swr.cn-north-4.myhuaweicloud.com/{组织名称}/{镜像名称}:{版本名称}
    推送完成后,在“我的镜像 > 自有镜像”列表下显示该镜像。
    图5 我的镜像

若您的CCE节点不具备docker能力,则需要生成离线镜像包,并上传到SWR服务。

  1. 登录安装了docker的操作系统,执行以下命令,生成docker镜像离线包。
    docker save -o cloudeye-exporter.tar cloudeye-exporter:v1.0
  2. 登录CCE节点,执行以下命令,将cloudeye-exporter.tar传送至CCE节点,并加载该离线包为CCE节点上的本地镜像。
    ctr images import cloudeye-exporter.tar

创建并运行有OIDC能力的cloudeye-exporter工作负载

  1. 登录CCE节点,执行以下命令,创建主配置文件clouds.yml。
    cd /exporter
    vi clouds.yml
    clouds.yml的配置参数说明如所示。
    表2 global参数说明

    参数

    参数说明

    取值样例

    port

    监听端口,默认的监控端口为8087。

    8087

    prefix

    CES Exporter会自动将查询到的指标数据与配置的前缀进行拼接,默认前缀为huaweicloud,无需进行修改。

    huaweicloud

    scrape_batch_size

    查询CES指标数据时分页数,例如:300表示每页包含300条指标数据。保持默认即可。

    300

    resource_sync_interval_minutes

    资源信息更新频率,单位为分钟,默认180分钟更新一次。当参数值小于10分钟,资源信息更新频率为10分钟1次。

    180

    ignore_ssl_verify

    Exporter查询资源/指标时,是否校验ssl证书。可选配置,若用户因ssl证书校验导致功能异常,可将该配置项配置为true跳过ssl证书校验

    • true:查询资源或监控指标数据时,跳过ssl证书校验。如果由于ssl证书校验导致功能异常,例如查询监控数据失败,可将该配置项配置为true。
    • false:查询资源或监控指标数据时,需要进行ssl证书校验。

    false

    表3 auth参数说明

    参数

    参数说明

    取值样例

    auth_url

    IAM用户认证地址,格式为“https://iam.{region_id}.myhuaweicloud.com/v3”,region_id请参阅页面“区域”列。

    https://iam.cn-north-4.myhuaweicloud.com/v3

    project_name

    华为云项目名称。

    登录IAM控制台即可查看当前账号下的所有项目。

    cn-north-4

    region

    指标数据所属区域的区域ID,区域ID信息请参阅地区和终端节点

    cn-north-4

    oidc

    oidc认证参数。

    • id_token_file_path:存放id_token的文件路径,取值为:/var/run/secrets/tokens/oidc-token
    • idp_id:身份提供商ID,取值为在IAM配置身份提供商中的身份提供商名称。
    • domain_id:华为云用户ID,登录IAM控制台,单击用户名,在用户详情中即可查看用户ID。

    -

    示例如下

    global:
      port: ":8087"
      prefix: "huaweicloud"
      scrape_batch_size: 300
      resource_sync_interval_minutes: 180
      ignore_ssl_verify: false
    auth:
      auth_url: "https://iam.cn-north-4.myhuaweicloud.com/v3"
      project_name: "cn-north-4"
      region: "cn-north-4"
      oidc:
        id_token_file_path: "/var/run/secrets/tokens/oidc-token"
        idp_id: "CES-Exporter"
        domain_id: ""
  2. 执行以下命令,导入主配置文件clouds.yml为ConfigMap。
    kubectl create configmap exporter-config --from-file=/exporter/clouds.yml
  3. 导入完成后可以在集群中查看配置项数据,如图6所示。
    图6 查看配置项数据
  4. 执行以下命令,创建cloudeye-exporter工作负载。
    vi exporter-deploy.yaml
    需要挂载的工作负载exporter-deploy.yaml配置内容如下所示。
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: cloudeye-exporter
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: cloudeye-exporter
          version: v1.0
      template:
        metadata:
          labels:
            app: cloudeye-exporter
            version: v1.0
        spec:
          containers:
          - name: container-1
            image: swr.cn-north-4.myhuaweicloud.com/cloud-open/cloudeye-exporter:v1.0  # 镜像推送至SWR时使用的tag
            command:
              - /exporter/cloudeye-exporter  # 启动命令
            args:
              - '-auth_mode'  # 启动参数
              - oidc  # 以oidc认证方式启动
            volumeMounts:
            - mountPath: "/var/run/secrets/tokens"  # 将Kubernetes生成的serviceAccountToken挂载到/var/run/secrets/tokens/oidc-token文件内
              name: oidc-token
            - mountPath: /exporter/clouds.yml  # 定义clouds.yml挂载路径
              name: exporter-config-volume  # 引用挂载卷
              subPath: clouds.yml  # subPath声明,防止覆盖其他文件而导致其不可访问
          imagePullSecrets:
          - name: default-secret
          serviceAccountName: oidc-token  # “创建ServiceAccount”中创建的ServiceAccount名称
          volumes:
          - name: oidc-token
            projected:
              defaultMode: 420
              sources:
              - serviceAccountToken:
                  audience: ces-test   # 取值为“在IAM创建身份提供商”下的客户端ID
                  expirationSeconds: 7200       # OIDC Token 过期时间,单位为秒
                  path: oidc-token              # 路径名称,可自定义
          - name: exporter-config-volume # 获取clouds.yml主配置
            configMap:
              name: exporter-config
  5. 使用如下命令,将上述配置实例化为工作负载容器。
    kubectl  apply -f exporter-deploy.yaml
  6. 查看实例化结果。
    1. 登录CCE控制台
    2. 单击实例名称进入实例详情。
    3. 在左侧导航栏,单击“工作负载”。
    4. 在工作负责列表中,单击工作负载名称。
    5. 查看容器实例状态为“运行中”并获取实例IP,实例IP用于步骤7查询监控数据。
      图7 查看实例状态

      如果实例状态异常,请通过提交工单联系客服寻求技术支持,确认问题原因。

  7. 查看是否可以正常查询监控数据。
    1. 登录CCE节点。
    2. 执行以下命令,查询监控数据,如果能够正常查询出监控数据,表示Exporter配置成功。
      curl http://{容器实例IP}:8087/metrics?services=SYS.ECS
      图8 查询监控数据

相关文档