通过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支持的拓展标签信息请参阅支持的拓展标签说明。
前提条件
- 请确保有一台具备docker能力的操作系统,用于构建cloudeye-exporter镜像。
- 请确保华为云账号具有导出监控数据依赖的权限,具体权限请参阅CES Exporter导出监控数据依赖的接口及授权项。
操作流程

获取CCE集群的签名密钥并创建ServiceAccount
- 登录CCE节点,登录方式请参阅登录节点。
- 使用kubectl连接集群,具体操作请参阅通过kubectl连接集群。
- 执行以下命令,获取公钥。
kubectl get --raw /openid/v1/jwks
返回的结果即集群的公钥,回显结果示例如下:# kubectl get --raw /openid/v1/jwks {"keys":[{"use":"sig","kty":"RSA","kid":"*****","alg":"RS256","n":"*****","e":"AQAB"}]} - 执行以下命令,创建ServiceAccount。
kubectl create sa oidc-token
在IAM配置身份提供商
- 登录IAM控制台。
- 在左侧导航栏选择“身份提供商”,进入“身份提供商”页面。
- 单击右上角“创建身份提供商”。
- 在“创建身份提供商”页面,输入名称并根据界面提示配置参数。
图1 创建身份提供商
- 协议:OpenID Connect
- 类型:虚拟用户SSO
- 状态:启用
- 单击“确定”,完成创建身份提供商。
- 在“创建身份提供商”页面,单击新建的身份提供商所在行“操作”列的“修改”。
- 在“修改身份提供商”页面,修改“访问方式”为“编程访问”。
- 根据以下参数说明,配置“配置信息”。
- 访问方式:编程访问
- 身份提供商URL:
- 客户端ID:自定义一个ID,对应创建并运行有OIDC能力的cloudeye-exporter工作负载中exporter-deploy.yaml配置文件中的audience。
- 签名公钥:CCE集群的签名公钥,请参考3中的返回结果填写。
- 在“身份转换规则”区域,单击“创建规则”,创建身份转换规则。
- 在“创建规则”弹窗中,输入用户名,并配置规则参数,规则参数说明请参阅配置身份转换规则。
身份映射规则作用是将工作负载的ServiceAccount和IAM用户做映射。为保证身份提供商ID访问云服务时,具有admin用户组的权限,需要将步骤4中在集群default命名空间下创建的名为oidc-token的ServiceAccount,映射到admin用户组,请按照如下模板设置身份转换规则的生效条件,如图2所示。
- 用户组:admin
- 属性:sub
- 条件:any_one_of
- 值:system:serviceaccount:default:oidc-token
值的规则如下,其中,Namespace为创建的 ServiceAccount 所在集群命名空间,ServiceAccountName:ServiceAccount名称
system:serviceaccount:{Namespace}:{ServiceAccountName}
- 在“创建规则”弹窗中,单击“确定”。
- 在“修改身份提供商”页面,单击“确定”,完成身份提供商配置。
构建cloudeye-exporter镜像
- 登录安装了docker的操作系统,进入cloudeye-exporter开源项目,下载最新软件包。
- 解压安装包至镜像构建的路径下。
- 执行以下命令,创建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"]
- 创建成功后,目录结构如下所示。
. |-- Dockerfile |-- cloudeye-exporter |-- clouds.yml |-- endpoints.yml |-- i18n.json |-- logs.yml |-- metric.yml |-- unit_standard_transform.json
- 执行构建命令,生成镜像。
docker build -t cloudeye-exporter:v1.0 .
上传cloudeye-exporter镜像至华为云SWR服务
在启动cloudeye-exporter前,需要将cloudeye-exporter镜像上传至华为云SWR服务。
若您的CCE节点本身具备docker能力,可以直接在CCE节点上构建本地镜像即可,不需要生成离线包。若您的CCE节点不具备docker能力,则需要生成离线镜像包,并上传到SWR服务。
docker version
- 若命令返回结果为docker版本号,则说明当前CCE节点具备docker能力,操作步骤请参见在CCE节点构建本地镜像。
- 若命令执行失败,则说明当前CCE节点不具备docker能力,操作步骤请参见上传cloudeye-exporter离线镜像至华为云SWR服务。
目前,cloudeye-exporter本地镜像的tag不符合上传命令模板要求,如所示。因此,需要确定组织名称、镜像名称和版本名称后,为镜像打tag。
- 登录SWR控制台。
- 在“组织管理”页面,获取需要上传镜像的组织名称。
图3 组织管理
- 登录CCE节点,执行以下命令,设置tag。
- 在SWR控制台左侧导航栏中选择“我的镜像”。
- 在“我的镜像”页面,单击右上角“客户端上传”。
- 在“客户端上传”弹窗中,单击“生成上传指令”,弹出“上传指令”弹窗。
- 在“通用型上传指令”页签下,复制生成的上传指令。
图4 通用型上传指令
- 登录CCE节点,执行步骤7获取的上传指令,将镜像推送至SWR自有镜像仓库。
ctr image push --user cn-north-4@XXXXX:xxxxxxxxxxxxxxxxx swr.cn-north-4.myhuaweicloud.com/{组织名称}/{镜像名称}:{版本名称}
推送完成后,在“我的镜像 > 自有镜像”列表下显示该镜像。图5 我的镜像
创建并运行有OIDC能力的cloudeye-exporter工作负载
- 登录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: "" - 执行以下命令,导入主配置文件clouds.yml为ConfigMap。
kubectl create configmap exporter-config --from-file=/exporter/clouds.yml
- 导入完成后可以在集群中查看配置项数据,如图6所示。
- 执行以下命令,创建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 - 使用如下命令,将上述配置实例化为工作负载容器。
kubectl apply -f exporter-deploy.yaml
- 查看实例化结果。
- 查看是否可以正常查询监控数据。
- 登录CCE节点。
- 执行以下命令,查询监控数据,如果能够正常查询出监控数据,表示Exporter配置成功。
curl http://{容器实例IP}:8087/metrics?services=SYS.ECS图8 查询监控数据


