托管 Prometheus 的工作区支持通过代理的方式实现公网访问。本文为您介绍如何在容器服务集群中创建代理,实现工作区的公网访问。
托管 Prometheus 工作区目前提供标准的内网 Remote Write 地址和 Query 地址。允许您采集公有云内网的产品指标和业务指标,并支持在容器服务 VKE 集群中部署 Grafana,实现指标大盘的创建和查看。详情请参见 在容器服务集群中部署 Grafana 并接入工作区。
在某些场景下,您可能需要通过公网访问托管 Prometheus 的工作区数据,例如:在多云场景下,需要将多个公有云中的数据汇总到一个 Grafana 上进行查看。这种情况下,您可以在容器服务 VKE 集群中配置代理,实现通过公网访问托管 Prometheus 工作区的目的。
为保证公网环境下的通信安全,Grafana 和托管 Prometheus 之间建议使用 HTTPS 协议通信。因此,需要使用保密字典配置 HTTPS 使用的 SSL 证书和密钥。
tls.key
和tls.crt
为例。kubernetes.io/tls
的保密字典。kubectl create secret tls grafana-key --key tls.key --cert tls.crt
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
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 解析关系。
说明
需要将工作区原始的 Query URL 地址进行如下修改:
https
协议。例如:本例中的 Query URL 地址修改为https://vmp-test.com/workspaces/1c3***
。
6. 在 Auth 配置项中,开启 Basic auth 选项,并在 Basic Auth Details 配置项中,配置工作区认证使用的用户名和密码。
注意
如果您的证书为自签发证书等不可信证书,还需要开启 Skip TLS Verify 选项。否则 Grafana 会报证书验证错误。
7. 单击页面底部的 Save & Test,系统显示 Successfully queried the Prometheus API,表示数据源配置成功,工作区已经正确接入 Grafana。
使用代理通过公网读取或写入托管 Prometheus 工作区数据,读取或写入性能与 VKE 集群中的 ingress 实例性能密切相关。建议您通过 VKE 集群的可观测性功能,对 ingress 实例进行监控和运维。可参考如下文档:
openssl genrsa -out tls.key 2048
预期结果如下:
Generating RSA private key, 2048 bit long modulus ........+++++ ...+++++ e is 65537 (0x10001)
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 # 密码,可以为空
openssl x509 -req -in tls.csr -out tls.crt -signkey tls.key -days 365