云原生监控数据查询地址如何暴露出公网
prometheus现在是主流的监控k8s方案,各大云厂商也都有托管的k8s服务,为了更好的对托管k8s集群监控,也推出了托管的prometheus监控服务,腾讯云上就推出了腾讯云云原生监控服务(Tencent Prometheus Service,TPS)下面简称TPS,TPS
可以一键部署prometheus到后端弹性集群上,然后你可以关联监控你的tke集群来进行监控。
腾讯云的TPS服务后端用的是thanos架构,为了能更加方便查询监控指标,提供了thanos query前端页面地址用来查询监控数据,但是这个地址只提供了内网访问的,很多时候,我们在pc端是无法直接访问vpc的内网地址的,这样查询数据就非常不方便,下面我们来说说如何暴露下TPS的数据查询地址到公网。
其实方案很简单,就是在和TPS同vpc下的tke集群中部署一个nginx反向代理出现就行,然后为nginx配置一个nodeport或者公网的clb类型的service即可,具体配置步骤如下。
1. 查询云原生监控实例数据查询地址
云原生监控的数据查询地址,可以在实例的基本信息页面查询,Prometheus数据查询地址就是thanos query的地址
2. 创建nginx转发配置文件
创建一个configmap配置default.conf文件用来转发TPS的thanos query查询地址,注意proxy_pass后面填写自己实际的内网查询地址,下一步挂载这个configmap到pod里面即可
apiVersion: v1
data:
default.conf: |-
server {
listen 80;
listen [::]:80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://10.0.0.234:9090/;
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 1000m;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
kind: ConfigMap
metadata:
name: nginx-cm
namespace: monitor
3. 创建nginx的workload
创建一个nginx的工作负载,然后将上一步的配置挂载到容器的default.conf文件。
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
k8s-app: tps-thanos-nginx
qcloud-app: tps-thanos-nginx
name: tps-thanos-nginx
namespace: monitor
spec:
replicas: 1
selector:
matchLabels:
k8s-app: tps-thanos-nginx
qcloud-app: tps-thanos-nginx
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
labels:
k8s-app: tps-thanos-nginx
qcloud-app: tps-thanos-nginx
spec:
containers:
- image: nginx
imagePullPolicy: Always
name: tps-thanos-nginx
resources:
limits:
cpu: 500m
memory: 1Gi
requests:
cpu: 250m
memory: 256Mi
securityContext:
privileged: false
volumeMounts:
- mountPath: /etc/nginx/conf.d/default.conf
name: vol
subPath: default.conf
dnsPolicy: ClusterFirst
imagePullSecrets:
- name: qcloudregistrykey
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- configMap:
defaultMode: 420
name: nginx-cm
name: vol
4. 生成service绑定workload
创建servic绑定后端的workload,如果不想花钱买公网的clb,可以用nodeport类型的svc,通过节点公网ip和nodeport访问。
apiVersion: v1
kind: Service
metadata:
name: tps-thanos-nginx
namespace: monitor
spec:
externalTrafficPolicy: Cluster
ports:
- name: 80-80-tcp
nodePort: 31642
port: 80
protocol: TCP
targetPort: 80
selector:
k8s-app: tps-thanos-nginx
qcloud-app: tps-thanos-nginx
sessionAffinity: None
type: LoadBalancer
5. ingress暴露域名提供访问
如果集群部署了nginx-ingress,也可以用nginx-ingress来暴露一个域名来访问,当然也可以用tke提供的负载均衡类型ingress暴露域名提供访问。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: ingress
name: tps-thanos-ingress
namespace: monitor
spec:
rules:
- host: tps-thanos.tke.niewx.cn
http:
paths:
- backend:
serviceName: tps-thanos-nginx
servicePort: 80
path: /
6. 公网访问查询地址
浏览器输入公网clb的vip访问TPS的prometheus数据查询地址
浏览器输入节点公网ip和nodeport访问TPS的prometheus数据查询地址
浏览器域名访问TPS的prometheus数据查询地址
后面我们就可以在浏览器通过ui页面来查询prometheus的监控数据了。