本文永久链接: https://www.xtplayer.cn/prometheus/customize-the-prometheus-access-url/

通过 NodePort

将以下 yaml 导入集群,会创建一个 NodePort 类型的 svc。通过节点 ip + NodePort 端口即可获取 Prometheus 的原始监控数据。

apiVersion: v1
kind: Service
metadata:
name: prometheus-nodeport
namespace: cattle-monitoring-system
spec:
externalTrafficPolicy: Cluster
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- name: p9090
port: 9090
protocol: TCP
targetPort: 8081
selector:
app.kubernetes.io/name: prometheus
operator.prometheus.io/name: rancher-monitoring-prometheus
sessionAffinity: None
type: NodePort

通过 ingress

  1. 通过命令创建 tls 证书密文
    kubectl -n cattle-monitoring-system create secret generic prometheus-tls-ingress
    –from-file=tls.crt=xxx.crt
    –from-file=tls.key=xxxx.key
    或者在 rancher ui ,切换到 存储|密文,手动创建证书密文。

  2. 将以下 yaml 导入集群创建 ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: prometheus-ingress
namespace: cattle-monitoring-system
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: 'true'
# 限制请求体大小(Prometheus 查询通常不需要太大)
nginx.ingress.kubernetes.io/proxy-body-size: "10m"
# 代理缓冲区限制(防止大数据响应耗尽内存)
nginx.ingress.kubernetes.io/proxy-buffer-size: "8k"
nginx.ingress.kubernetes.io/proxy-buffers-number: "4"
# 连接和读取超时(长时间查询会超时)
nginx.ingress.kubernetes.io/proxy-read-timeout: "60"
nginx.ingress.kubernetes.io/proxy-connect-timeout: "30"
# 限制速率(保护 Prometheus 不被过度查询)
nginx.ingress.kubernetes.io/limit-rps: "10"
# 限制同时连接数
nginx.ingress.kubernetes.io/limit-connections: "20"
# 启用响应缓存(可选,减少重复查询)
nginx.ingress.kubernetes.io/proxy-buffering: "on"
spec:
rules:
- host: prometheus.xx.org.cn
http:
paths:
- backend:
service:
name: rancher-monitoring-prometheus
port:
number: 9090
path: /
pathType: Prefix
tls:
- hosts:
- prometheus.xxx.org.cn
secretName: prometheus-tls-ingress

注意:rules 中的 host 需要与 tls 中的 hosts 保持一致。

请求示例

start=$(date -d '5 minutes ago' +%s)
end=$(date +%s)

curl "https://prometheus.xx.org.cn/api/v1/query_range?query=container_cpu_usage_seconds_total&start=$start&end=$end&step=15s"