Skip to content

Commit cc63cdb

Browse files
committed
frr-k8s: use OperatorPKI for metrics TLS to fix bootstrap deadlock
The FRR DaemonSet requires a TLS secret for kube-rbac-proxy to start. Previously this used service-ca, but service-ca is not available during bootstrap (it depends on CNI being ready first), causing a deadlock. This commit adds a second OperatorPKI for metrics certificates, so both webhook and metrics use OperatorPKI with no service-ca dependency during bootstrap. Changes: - Add frr-k8s-metrics OperatorPKI to 003-pki.yaml - Update frr-k8s.yaml to use frr-k8s-metrics-cert secret - Remove service-ca annotation from monitor.yaml Service - Use insecureSkipVerify in ServiceMonitor (Prometheus doesn't have OperatorPKI CA in its trust bundle, but TLS encryption is still active) Signed-off-by: Riccardo Ravaioli <rravaiol@redhat.com>
1 parent eeb53e5 commit cc63cdb

File tree

4 files changed

+14
-8
lines changed

4 files changed

+14
-8
lines changed

bindata/network/frr-k8s/003-pki.yaml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Request that the cluster network operator PKI controller
2-
# creates certificates for the FRR-k8s webhook.
2+
# creates certificates for the FRR-k8s webhook and metrics.
33
# This avoids dependency on service-ca operator during bootstrap,
44
# which is critical because the webhook must be ready before OVN-Kubernetes
55
# starts when RouteAdvertisements are enabled.
@@ -15,3 +15,12 @@ metadata:
1515
spec:
1616
targetCert:
1717
commonName: frr-k8s-webhook-service.openshift-frr-k8s.svc
18+
---
19+
apiVersion: network.operator.openshift.io/v1
20+
kind: OperatorPKI
21+
metadata:
22+
name: frr-k8s-metrics
23+
namespace: openshift-frr-k8s
24+
spec:
25+
targetCert:
26+
commonName: frr-k8s-monitor-service.openshift-frr-k8s.svc

bindata/network/frr-k8s/frr-k8s.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ spec:
5151
emptyDir: {}
5252
- name: metrics-certs
5353
secret:
54-
secretName: frr-k8s-metrics-certs
54+
secretName: frr-k8s-metrics-cert
5555
initContainers:
5656
# Copies the initial config files with the right permissions to the shared volume.
5757
- name: cp-frr-files

bindata/network/frr-k8s/monitor.yaml

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ metadata:
88
name: frr-k8s-monitor-service
99
annotations:
1010
prometheus.io/scrape: "true"
11-
service.beta.openshift.io/serving-cert-secret-name: frr-k8s-metrics-certs
1211
spec:
1312
selector:
1413
app: frr-k8s
@@ -41,15 +40,13 @@ spec:
4140
port: metricshttps
4241
scheme: https
4342
tlsConfig:
44-
caFile: /etc/prometheus/configmaps/serving-certs-ca-bundle/service-ca.crt
45-
serverName: frr-k8s-monitor-service.openshift-frr-k8s.svc
43+
insecureSkipVerify: true
4644
- bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
4745
honorLabels: true
4846
port: frrmetricshttps
4947
scheme: https
5048
tlsConfig:
51-
caFile: /etc/prometheus/configmaps/serving-certs-ca-bundle/service-ca.crt
52-
serverName: frr-k8s-monitor-service.openshift-frr-k8s.svc
49+
insecureSkipVerify: true
5350
jobLabel: app
5451
namespaceSelector:
5552
matchNames:

pkg/network/render_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -638,7 +638,7 @@ func Test_renderAdditionalRoutingCapabilities(t *testing.T) {
638638
},
639639
},
640640
},
641-
want: 21, // 19 original + 1 OperatorPKI + 1 document separator
641+
want: 22, // 19 original + 2 OperatorPKI (webhook + metrics) + 1 document separator
642642
expectedErr: nil,
643643
},
644644
}

0 commit comments

Comments
 (0)