You need to enable JavaScript to run this app.
导航

使用代理实现工作区公网访问

最近更新时间2024.03.01 11:23:17

首次发布时间2023.10.26 10:12:50

托管 Prometheus 的工作区支持通过代理的方式实现公网访问。本文为您介绍如何在容器服务集群中创建代理,实现工作区的公网访问。

背景信息

托管 Prometheus 工作区目前提供标准的内网 Remote Write 地址和 Query 地址。允许您采集公有云内网的产品指标和业务指标,并支持在容器服务 VKE 集群中部署 Grafana,实现指标大盘的创建和查看。详情请参见 在容器服务集群中部署 Grafana 并接入工作区

在某些场景下,您可能需要通过公网访问托管 Prometheus 的工作区数据,例如:在多云场景下,需要将多个公有云中的数据汇总到一个 Grafana 上进行查看。这种情况下,您可以在容器服务 VKE 集群中配置代理,实现通过公网访问托管 Prometheus 工作区的目的。
alt

前提条件

  • 已创建托管 Prometheus 工作区,并开启 BasicAuth 认证,详情请参见 创建工作区
  • 已创建容器服务集群。详情请参考 创建集群
  • 已在集群中安装 ingress-nginx 组件或自建 Nginx Ingress,并完成负载均衡配置。
    • 如果您使用集群的 ingress-nginx 组件,在安装组件时,需要根据实际需求完成负载均衡的配置,比如:负载均衡类型 必须配置为 公网,计费方式需要根据实际需求选择 按带宽计费按实际流量计费 等。详情请参见 ingress-nginx 组件
    • 如果您在集群中自建 Nginx Ingress,配置方式请参见 部署多套 Nginx Ingress Controller
  • 已在火山引擎 SSL 证书服务 购买或使用 OpenSSL 创建 SSL 证书和密钥。

操作步骤

步骤一:配置保密字典

为保证公网环境下的通信安全,Grafana 和托管 Prometheus 之间建议使用 HTTPS 协议通信。因此,需要使用保密字典配置 HTTPS 使用的 SSL 证书和密钥。

  1. 已获取 SSL 证书和密钥,本文以tls.keytls.crt为例。
  2. 使用 kubectl 连接目标集群,使用以下命令,创建名称为 grafana-key,类型为kubernetes.io/tls的保密字典。
kubectl create secret tls grafana-key --key tls.key --cert tls.crt

步骤二:配置服务和路由规则

  1. 在左侧导航栏中,选择 服务与路由 > 服务。单击 使用 Yaml 创建,创建服务。通过ExternalName类型的服务访问托管 Prometheus 工作区。
apiVersion: v1
kind: Service
metadata:
  name: vmp-service
spec:
  externalName: query.prometheus-cn-beijing.ivolces.com # 托管 Prometheus 工作区地址中的域名,不同地域工作区的域名不同
  ports:
  - name: vmp
    port: 80
    protocol: TCP
    targetPort: 80
  sessionAffinity: None
  type: ExternalName
  1. 在左侧导航栏中,选择 工作负载 > 对象浏览器。 单击 使用 Yaml 创建,创建路由规则。指定外部域名和服务的映射关系。
    • 在 类型 下拉菜单中选择 自定义
    • 在 Yaml 配置框内输入 Yaml 配置。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: vmp-ingress
spec:
  ingressClassName: nginx # 集群中 Ingress Controller Class 名称,使用该配置来选择 ingress 实例
  rules:
  - host: vmp-test.com # 公网访问托管 Prometheus 工作区的自定义域名
    http:
      paths:
      - backend:
          service:
            name: vmp-service # 服务名称,需要与服务的配置相同
            port:
              number: 80
        path: /
        pathType: Prefix
  tls:
  - hosts:
    - vmp-test.com # 指定需要加密的域名
    secretName: grafana-key # 指定 ingress 使用的保密字典名称

说明

您需要自主保障在公网环境下,自定义域名和 ingress 均衡负载公网 IP 的 DNS 解析关系。

步骤三:接入工作区数据源

  1. 登录公网环境中的 Grafana。
  2. 在左侧导航栏中,选择 Connection > Data Sources
    alt
  3. 单击 Add data source,创建新的数据源。
    alt
  4. 在 Add data source 页面中,单击 Prometheus
    alt
  5. 在 HTTP 配置项中,Prometheus server URL 处,粘贴经过修改的工作区 Query URL 地址。

说明

需要将工作区原始的 Query URL 地址进行如下修改:

  1. 协议修改为https协议。
  2. 域名替换为路由规则中配置的公网域名。
  3. 其余字段不变。

例如:本例中的 Query URL 地址修改为https://vmp-test.com/workspaces/1c3***

alt
6. 在 Auth 配置项中,开启 Basic auth 选项,并在 Basic Auth Details 配置项中,配置工作区认证使用的用户名和密码。

注意

如果您的证书为自签发证书等不可信证书,还需要开启 Skip TLS Verify 选项。否则 Grafana 会报证书验证错误。

alt
7. 单击页面底部的 Save & Test,系统显示 Successfully queried the Prometheus API,表示数据源配置成功,工作区已经正确接入 Grafana。
alt

步骤四:创建并查看大盘

  1. 在左侧导航栏中,选择 Dashboards
    alt
  2. 单击 New,创建或导入观测大盘。
    alt
  3. 通过大盘可以查看到正确的监控信息。
    alt

监控和运维

使用代理通过公网读取或写入托管 Prometheus 工作区数据,读取或写入性能与 VKE 集群中的 ingress 实例性能密切相关。建议您通过 VKE 集群的可观测性功能,对 ingress 实例进行监控和运维。可参考如下文档:

参考信息

如何使用 OpenSSL 创建自签名证书

  1. 在本地环境中,访问 OpenSSL 官网,下载并安装 OpenSSL。
  2. 执行以下命令,生成 2048 位的 RSA 私钥。
openssl genrsa -out tls.key 2048

预期结果如下:

Generating RSA private key, 2048 bit long modulus
........+++++
...+++++
e is 65537 (0x10001)
  1. 执行以下命令,使用 RSA 私钥生成证书。
openssl req -new -key tls.key -out tls.csr

预期结果如下,需要填写证书的相关信息,包括:国家、地区、组织名称、域名、电子邮件地址等。

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) []:CN # 2 位国家代码,例如 CN
State or Province Name (full name) []:Shanghai # 地区名称,例如 Shanghai
Locality Name (eg, city) []:Shanghai # 城市名称,例如 Shanghai
Organization Name (eg, company) []:vke # 组织名称
Organizational Unit Name (eg, section) []:vke # 组织中的单位名称
Common Name (eg, fully qualified host name) []:vmp-test.com # 该证书对应的域名,本例中为 vmp-test.com
Email Address []:user@example.com # 电子邮件地址

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:mypassword # 密码,可以为空
  1. 执行以下命令,使用私钥对证书进行签名,有效期配置为 365 天。
openssl x509 -req -in tls.csr -out tls.crt -signkey tls.key -days 365
  1. 至此,完成创建 HTTPS 加密所需的私钥(tls.key)和证书(tls.crt)。