Skip to content

Commit 91f8cda

Browse files
authored
metrics-server: use SecureServing option (#3837)
As part of an effort to standardize metric exposure across KubeVirt components on port 8443, we are transitioning to HTTPS with TLS encryption for the metrics-server. To facilitate this, we leverage the controller-runtime's SecureServing option, which creates a self-signed certificate and configures it as the server certificate for the metrics endpoint when no external certificate is provided[1]. Subsequent PRs will replace this self-signed certificate with a CDI generated one to enable a fully trusted and secure connection between the Prometheus instance and the target metrics endpoints as specified by the CDI ServiceMonitor. Until that integration is complete, the ServiceMonitor will be configured with insecureSkipVerify to allow scraping despite the untrusted certificate. [1] kubernetes-sigs/controller-runtime#2407 Signed-off-by: Adi Aloni <[email protected]>
1 parent 8c03050 commit 91f8cda

File tree

7 files changed

+28
-4
lines changed

7 files changed

+28
-4
lines changed

cmd/cdi-controller/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ go_library(
4444
"//vendor/sigs.k8s.io/controller-runtime/pkg/log/zap:go_default_library",
4545
"//vendor/sigs.k8s.io/controller-runtime/pkg/manager:go_default_library",
4646
"//vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals:go_default_library",
47+
"//vendor/sigs.k8s.io/controller-runtime/pkg/metrics/server:go_default_library",
4748
],
4849
)
4950

cmd/cdi-controller/controller.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package main
33
import (
44
"context"
55
"crypto/rsa"
6+
"crypto/tls"
67
"flag"
78
"fmt"
89
"os"
@@ -36,6 +37,7 @@ import (
3637
"sigs.k8s.io/controller-runtime/pkg/log/zap"
3738
"sigs.k8s.io/controller-runtime/pkg/manager"
3839
"sigs.k8s.io/controller-runtime/pkg/manager/signals"
40+
"sigs.k8s.io/controller-runtime/pkg/metrics/server"
3941

4042
cdiv1 "kubevirt.io/containerized-data-importer-api/pkg/apis/core/v1beta1"
4143
forklift "kubevirt.io/containerized-data-importer-api/pkg/apis/forklift/v1beta1"
@@ -198,6 +200,15 @@ func start() {
198200
LeaderElectionResourceLock: "leases",
199201
Cache: getCacheOptions(apiClient, namespace),
200202
Scheme: scheme,
203+
Metrics: server.Options{
204+
BindAddress: ":8443",
205+
SecureServing: true,
206+
// Disable HTTP/2 to prevent rapid reset vulnerability
207+
// See CVE-2023-44487, CVE-2023-39325
208+
TLSOpts: []func(*tls.Config){func(c *tls.Config) {
209+
c.NextProtos = []string{"http/1.1"}
210+
}},
211+
},
201212
}
202213

203214
mgr, err := manager.New(config.GetConfigOrDie(), opts)

cmd/cdi-operator/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ go_library(
2222
"//vendor/sigs.k8s.io/controller-runtime/pkg/log/zap:go_default_library",
2323
"//vendor/sigs.k8s.io/controller-runtime/pkg/manager:go_default_library",
2424
"//vendor/sigs.k8s.io/controller-runtime/pkg/manager/signals:go_default_library",
25+
"//vendor/sigs.k8s.io/controller-runtime/pkg/metrics/server:go_default_library",
2526
],
2627
)
2728

cmd/cdi-operator/operator.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package main
1818

1919
import (
20+
"crypto/tls"
2021
"flag"
2122
"fmt"
2223
"os"
@@ -38,6 +39,7 @@ import (
3839
"sigs.k8s.io/controller-runtime/pkg/log/zap"
3940
"sigs.k8s.io/controller-runtime/pkg/manager"
4041
"sigs.k8s.io/controller-runtime/pkg/manager/signals"
42+
"sigs.k8s.io/controller-runtime/pkg/metrics/server"
4143

4244
cdiv1 "kubevirt.io/containerized-data-importer-api/pkg/apis/core/v1beta1"
4345
"kubevirt.io/containerized-data-importer/pkg/operator/controller"
@@ -96,6 +98,15 @@ func main() {
9698
LeaderElectionNamespace: namespace,
9799
LeaderElectionID: "cdi-operator-leader-election-helper",
98100
LeaderElectionResourceLock: "leases",
101+
Metrics: server.Options{
102+
BindAddress: ":8443",
103+
SecureServing: true,
104+
// Disable HTTP/2 to prevent rapid reset vulnerability
105+
// See CVE-2023-44487, CVE-2023-39325
106+
TLSOpts: []func(*tls.Config){func(c *tls.Config) {
107+
c.NextProtos = []string{"http/1.1"}
108+
}},
109+
},
99110
}
100111

101112
// Create a new Manager to provide shared dependencies and start components

pkg/operator/controller/prometheus.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ func newPrometheusServiceMonitor(namespace string) *promv1.ServiceMonitor {
211211
Endpoints: []promv1.Endpoint{
212212
{
213213
Port: "metrics",
214-
Scheme: "http",
214+
Scheme: "https",
215215
TLSConfig: &promv1.TLSConfig{
216216
SafeTLSConfig: promv1.SafeTLSConfig{
217217
InsecureSkipVerify: ptr.To(true),

pkg/operator/resources/namespaced/controller.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ func createControllerDeployment(controllerImage, importerImage, clonerImage, ovi
187187
container.Ports = []corev1.ContainerPort{
188188
{
189189
Name: "metrics",
190-
ContainerPort: 8080,
190+
ContainerPort: 8443,
191191
Protocol: "TCP",
192192
},
193193
}
@@ -386,7 +386,7 @@ func createPrometheusService() *corev1.Service {
386386
service.Spec.Ports = []corev1.ServicePort{
387387
{
388388
Name: "metrics",
389-
Port: 8080,
389+
Port: 8443,
390390
TargetPort: intstr.IntOrString{
391391
Type: intstr.String,
392392
StrVal: "metrics",

pkg/operator/resources/operator/operator.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@ func createPrometheusPorts() []corev1.ContainerPort {
442442
return []corev1.ContainerPort{
443443
{
444444
Name: "metrics",
445-
ContainerPort: 8080,
445+
ContainerPort: 8443,
446446
Protocol: "TCP",
447447
},
448448
}

0 commit comments

Comments
 (0)