Skip to content

Commit 2d08f3b

Browse files
committed
- Fix default metric listener address from 127.0.0.1 to 0.0.0.0.
- Make metrics listener address and port configurable. - Add support for NetworkPolicy (opt-in)
1 parent 9453ea6 commit 2d08f3b

File tree

6 files changed

+84
-6
lines changed

6 files changed

+84
-6
lines changed

charts/k8s-object-syncer/README.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@
4040
| `podMonitor.enabled` | Whether to create a `PodMonitor` or not. | `false` | no |
4141
| `podMonitor.interval` | `PodMonitor` scrape interval | `60s` | no |
4242
| `podMonitor.scrapeTimeout` | `PodMonitor` scrape timeout | `10s` | no |
43+
| `metrics.address` | IPv4 or IPv6 address to listen for metrics request | `0.0.0.0` (listen on all network interfaces) | no |
44+
| `metrics.port` | TCP port to listen for metrics requests | `9000` | no |
45+
| `networkPolicy` | NetworkPolicy content (`ingress`, `egress` and `policyTypes`) | `null` | no |
4346

4447

4548
## Installation
@@ -115,4 +118,31 @@ targetNamespaces: ["*"]
115118
allowedResources:
116119
- apiGroups: ["*"]
117120
resources: ["*"]
121+
```
122+
123+
---
124+
125+
Set NetworkPolicy.
126+
127+
```yaml
128+
networkPolicy:
129+
ingress:
130+
# Allow all ingress to metrics port
131+
- from:
132+
- namespaceSelector: {}
133+
podSelector: {}
134+
ports:
135+
- protocol: TCP
136+
port: 9000
137+
egress:
138+
- ports: # Kubernetes API
139+
- protocol: TCP
140+
port: 443
141+
- port: 53 # DNS
142+
protocol: UDP
143+
- port: 53
144+
protocol: TCP
145+
policyTypes:
146+
- Ingress
147+
- Egress
118148
```

charts/k8s-object-syncer/templates/deployment.yaml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ spec:
2020
metadata:
2121
annotations:
2222
prometheus.io/scrape: 'true'
23-
prometheus.io/port: '9000'
23+
prometheus.io/port: "{{ .Values.metrics.port | default 9000 }}"
2424
{{- with .Values.podAnnotations }}
2525
{{- toYaml . | nindent 8 }}
2626
{{- end }}
@@ -57,13 +57,21 @@ spec:
5757
- name: TARGET_NAMESPACES
5858
value: "{{ .Values.targetNamespaces | join "," }}"
5959
{{- end }}
60+
{{- if .Values.metrics.address }}
61+
- name: METRICS_LISTEN_ADDR
62+
value: "{{ .Values.metrics.address }}"
63+
{{- end }}
64+
{{- if .Values.metrics.port }}
65+
- name: METRICS_LISTEN_PORT
66+
value: "{{ .Values.metrics.port }}"
67+
{{- end }}
6068
{{- with .Values.extraEnv }}
6169
{{- toYaml . | nindent 12 }}
6270
{{- end }}
6371
imagePullPolicy: {{ .Values.image.pullPolicy }}
6472
ports:
6573
- name: metrics
66-
containerPort: 9000
74+
containerPort: {{ .Values.metrics.port | default 9000 }}
6775
protocol: TCP
6876
resources:
6977
{{- toYaml .Values.resources | nindent 12 }}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{{- if .Values.networkPolicy }}
2+
apiVersion: networking.k8s.io/v1
3+
kind: NetworkPolicy
4+
metadata:
5+
name: {{ include "k8s-object-syncer.fullname" . }}
6+
spec:
7+
podSelector:
8+
matchLabels:
9+
{{- include "k8s-object-syncer.selectorLabels" . | nindent 6 }}
10+
{{- toYaml .Values.networkPolicy | nindent 2 }}
11+
{{- end }}

charts/k8s-object-syncer/values.yaml

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,32 @@ allowedResources:
8888

8989
extraEnv: []
9090

91+
metrics:
92+
port: 9000
93+
address: "0.0.0.0"
94+
9195
podMonitor:
9296
enabled: false
9397
interval: 60s
94-
scrapeTimeout: 10s
98+
scrapeTimeout: 10s
99+
100+
networkPolicy:
101+
# ingress:
102+
# # Allow all ingress to metrics port
103+
# - from:
104+
# - namespaceSelector: {}
105+
# podSelector: {}
106+
# ports:
107+
# - protocol: TCP
108+
# port: 9000
109+
# egress:
110+
# - ports: # Kubernetes API
111+
# - protocol: TCP
112+
# port: 443
113+
# - port: 53 # DNS
114+
# protocol: UDP
115+
# - port: 53
116+
# protocol: TCP
117+
# policyTypes:
118+
# - Ingress
119+
# - Egress

rustrial-k8s-object-syncer/src/main.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,12 @@ async fn ok<T, E>(_: T) -> Result<(), E> {
9191
#[tokio::main]
9292
async fn main() -> anyhow::Result<()> {
9393
env_logger::init();
94+
let metrics_addr = env_var("METRICS_LISTEN_ADDR").unwrap_or_else(|| "0.0.0.0".to_string());
95+
let metrics_port = env_var("METRICS_LISTEN_PORT").unwrap_or_else(|| "9000".to_string());
96+
let metrics_addr = format!("{}:{}", metrics_addr, metrics_port).parse()?;
9497
let prometheus_metrics_exporter = opentelemetry_prometheus::exporter().init();
95-
let prometheus_metrics_exporter = start_prometheus_metrics_server(prometheus_metrics_exporter);
98+
let prometheus_metrics_exporter =
99+
start_prometheus_metrics_server(metrics_addr, prometheus_metrics_exporter);
96100
let client = Client::try_default().await?;
97101
let namespace_watcher = watcher(Api::<Namespace>::all(client.clone()), ListParams::default());
98102
let writer: Writer<Namespace> = Default::default();

rustrial-k8s-object-syncer/src/prometheus_exporter.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::sync::Arc;
1+
use std::{net::SocketAddr, sync::Arc};
22

33
use hyper::{
44
header::CONTENT_TYPE,
@@ -29,9 +29,9 @@ async fn serve_req(
2929
}
3030

3131
pub(crate) async fn start_prometheus_metrics_server(
32+
addr: SocketAddr,
3233
prometheus_metrics_exporter: PrometheusExporter,
3334
) {
34-
let addr = ([127, 0, 0, 1], 9000).into();
3535
debug!("Listening on http://{}", addr);
3636
let exporter = Arc::new(prometheus_metrics_exporter);
3737
let handler = make_service_fn(move |_| {

0 commit comments

Comments
 (0)