Files
Homelabv4/infrastructure/prometheus/manifests/talos-metrics-proxy.yaml
T
2026-03-09 20:21:35 -05:00

233 lines
5.9 KiB
YAML

# Talos Metrics Proxy
# Workaround for HTTP 415 errors when scraping Talos apid metrics
# This deploys an nginx proxy that strips problematic HTTP headers
apiVersion: v1
kind: ConfigMap
metadata:
name: talos-metrics-proxy-config
namespace: kube-system
data:
nginx.conf: |
pid /tmp/nginx.pid;
events {
worker_connections 1024;
}
http {
proxy_temp_path /tmp/proxy_temp;
client_body_temp_path /tmp/client_temp;
fastcgi_temp_path /tmp/fastcgi_temp;
uwsgi_temp_path /tmp/uwsgi_temp;
scgi_temp_path /tmp/scgi_temp;
# Upstream Talos nodes
upstream talos01 {
server 172.28.101.21:50000;
}
upstream talos02 {
server 172.28.101.22:50000;
}
upstream talos03 {
server 172.28.101.23:50000;
}
upstream talos04 {
server 172.28.101.24:50000;
}
# Proxy for talos01
server {
listen 9100;
server_name talos01-metrics;
location /metrics {
proxy_pass https://talos01/metrics;
proxy_ssl_certificate /certs/client.crt;
proxy_ssl_certificate_key /certs/client.key;
proxy_ssl_trusted_certificate /certs/ca.crt;
proxy_ssl_verify on;
proxy_http_version 1.1;
proxy_set_header Accept "text/plain;version=0.0.4";
proxy_set_header Connection "";
}
}
# Proxy for talos02
server {
listen 9101;
server_name talos02-metrics;
location /metrics {
proxy_pass https://talos02/metrics;
proxy_ssl_certificate /certs/client.crt;
proxy_ssl_certificate_key /certs/client.key;
proxy_ssl_trusted_certificate /certs/ca.crt;
proxy_ssl_verify on;
proxy_http_version 1.1;
proxy_set_header Accept "text/plain;version=0.0.4";
proxy_set_header Connection "";
}
}
# Proxy for talos03
server {
listen 9102;
server_name talos03-metrics;
location /metrics {
proxy_pass https://talos03/metrics;
proxy_ssl_certificate /certs/client.crt;
proxy_ssl_certificate_key /certs/client.key;
proxy_ssl_trusted_certificate /certs/ca.crt;
proxy_ssl_verify on;
proxy_http_version 1.1;
proxy_set_header Accept "text/plain;version=0.0.4";
proxy_set_header Connection "";
}
}
# Proxy for talos04
server {
listen 9103;
server_name talos04-metrics;
location /metrics {
proxy_pass https://talos04/metrics;
proxy_ssl_certificate /certs/client.crt;
proxy_ssl_certificate_key /certs/client.key;
proxy_ssl_trusted_certificate /certs/ca.crt;
proxy_ssl_verify on;
proxy_http_version 1.1;
proxy_set_header Accept "text/plain;version=0.0.4";
proxy_set_header Connection "";
}
}
}
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: talos-metrics-proxy
namespace: kube-system
labels:
app: talos-metrics-proxy
spec:
replicas: 1
selector:
matchLabels:
app: talos-metrics-proxy
template:
metadata:
labels:
app: talos-metrics-proxy
spec:
automountServiceAccountToken: false
containers:
- name: nginx
image: nginx:1.27-alpine
securityContext:
runAsUser: 10101
runAsGroup: 10101
runAsNonRoot: true
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop:
- ALL
seccompProfile:
type: RuntimeDefault
ports:
- containerPort: 9100
name: talos01
- containerPort: 9101
name: talos02
- containerPort: 9102
name: talos03
- containerPort: 9103
name: talos04
volumeMounts:
- name: nginx-config
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf
- name: talos-certs
mountPath: /certs
readOnly: true
- name: tmp
mountPath: /tmp
- name: cache
mountPath: /var/cache/nginx
resources:
requests:
memory: "64Mi"
cpu: "10m"
limits:
memory: "128Mi"
volumes:
- name: nginx-config
configMap:
name: talos-metrics-proxy-config
- name: talos-certs
secret:
secretName: talos-client-cert
- name: tmp
emptyDir: {}
- name: cache
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: talos-metrics-proxy
namespace: kube-system
labels:
app: talos-metrics-proxy
spec:
type: ClusterIP
ports:
- port: 9100
targetPort: 9100
protocol: TCP
name: talos01
- port: 9101
targetPort: 9101
protocol: TCP
name: talos02
- port: 9102
targetPort: 9102
protocol: TCP
name: talos03
- port: 9103
targetPort: 9103
protocol: TCP
name: talos04
selector:
app: talos-metrics-proxy
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: talos-metrics
namespace: kube-system
labels:
app: talos-metrics-proxy
spec:
endpoints:
- port: talos01
path: /metrics
interval: 30s
- port: talos02
path: /metrics
interval: 30s
- port: talos03
path: /metrics
interval: 30s
- port: talos04
path: /metrics
interval: 30s
selector:
matchLabels:
app: talos-metrics-proxy
namespaceSelector:
matchNames:
- kube-system