Skip to content

Commit 2f20716

Browse files
shahvrushali22illumevijayant7
committed
backend: Add optional TLS termination support
Add optional backend TLS termination by introducing tls-cert-path and tls-key-path configuration fields (flags, config, HeadlampCFG). When both paths are provided the server will call http.ListenAndServeTLS, otherwise it falls back to plain HTTP. Log the configured TLS certificate and key paths at startup. Also: - Update Helm chart to allow passing tls cert/key as args and add chart test case + expected template to mount TLS secret. - Add documentation describing in-cluster TLS/backend termination and usage. - Add a unit test TestStartHeadlampServerTLS and accompanying test cert/key fixtures. No breaking changes; behavior is opt-in when TLS paths are set. Co-authored-by: René Dudfield <renedudfield@microsoft.com> Co-authored-by: vijayant7 <vijayantprakash@gmail.com>
1 parent 4e99e75 commit 2f20716

File tree

15 files changed

+407
-4
lines changed

15 files changed

+407
-4
lines changed

backend/cmd/headlamp.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,8 @@ func createHeadlampHandler(config *HeadlampConfig) http.Handler {
377377
logger.Log(logger.LevelInfo, nil, nil, "Dynamic clusters support: "+fmt.Sprint(config.EnableDynamicClusters))
378378
logger.Log(logger.LevelInfo, nil, nil, "Helm support: "+fmt.Sprint(config.EnableHelm))
379379
logger.Log(logger.LevelInfo, nil, nil, "Proxy URLs: "+fmt.Sprint(config.ProxyURLs))
380+
logger.Log(logger.LevelInfo, nil, nil, "TLS certificate path: "+config.TLSCertPath)
381+
logger.Log(logger.LevelInfo, nil, nil, "TLS key path: "+config.TLSKeyPath)
380382

381383
plugins.PopulatePluginsCache(config.StaticPluginDir, config.PluginDir, config.cache)
382384

@@ -1095,15 +1097,18 @@ func StartHeadlampServer(config *HeadlampConfig) {
10951097
}
10961098

10971099
handler := createHeadlampHandler(config)
1098-
10991100
handler = config.OIDCTokenRefreshMiddleware(handler)
11001101

11011102
addr := fmt.Sprintf("%s:%d", config.ListenAddr, config.Port)
11021103

1103-
// Start server
1104-
if err := http.ListenAndServe(addr, handler); err != nil { //nolint:gosec
1105-
logger.Log(logger.LevelError, nil, err, "Failed to start server")
1104+
if config.TLSCertPath != "" && config.TLSKeyPath != "" {
1105+
err = http.ListenAndServeTLS(addr, config.TLSCertPath, config.TLSKeyPath, handler) //nolint:gosec
1106+
} else {
1107+
err = http.ListenAndServe(addr, handler) //nolint:gosec
1108+
}
11061109

1110+
if err != nil {
1111+
logger.Log(logger.LevelError, nil, err, "Failed to start server")
11071112
HandleServerStartError(&err)
11081113
}
11091114
}

backend/cmd/headlamp_test.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1018,6 +1018,51 @@ func TestStartHeadlampServer(t *testing.T) {
10181018
}
10191019
}
10201020

1021+
func TestStartHeadlampServerTLS(t *testing.T) {
1022+
tempDir, err := os.MkdirTemp("", "headlamp-test")
1023+
require.NoError(t, err)
1024+
defer os.RemoveAll(tempDir)
1025+
1026+
cfg := &HeadlampConfig{
1027+
HeadlampCFG: &headlampconfig.HeadlampCFG{
1028+
Port: 8185,
1029+
PluginDir: tempDir,
1030+
KubeConfigStore: kubeconfig.NewContextStore(),
1031+
TLSCertPath: "headlamp_testdata/headlamp.crt",
1032+
TLSKeyPath: "headlamp_testdata/headlamp.key",
1033+
},
1034+
cache: cache.New[interface{}](),
1035+
telemetryConfig: GetDefaultTestTelemetryConfig(),
1036+
}
1037+
1038+
go StartHeadlampServer(cfg)
1039+
time.Sleep(200 * time.Millisecond)
1040+
1041+
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
1042+
defer cancel()
1043+
1044+
pool, err := x509.SystemCertPool()
1045+
if pool == nil {
1046+
pool = x509.NewCertPool()
1047+
}
1048+
1049+
require.NoError(t, err)
1050+
crt, err := os.ReadFile("headlamp_testdata/headlamp.crt")
1051+
require.NoError(t, err)
1052+
pool.AppendCertsFromPEM(crt)
1053+
1054+
req, err := http.NewRequestWithContext(ctx, "GET", "https://localhost:8185/config", nil)
1055+
require.NoError(t, err)
1056+
1057+
resp, err := (&http.Client{
1058+
Transport: &http.Transport{TLSClientConfig: &tls.Config{MinVersion: tls.VersionTLS12, RootCAs: pool}},
1059+
}).Do(req)
1060+
require.NoError(t, err)
1061+
defer resp.Body.Close()
1062+
1063+
assert.Equal(t, http.StatusOK, resp.StatusCode)
1064+
}
1065+
10211066
//nolint:funlen
10221067
func TestHandleClusterHelm(t *testing.T) {
10231068
// Set up test environment
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIFIzCCAwugAwIBAgIUR/w8+wnm5l79eym3uorgYBd75K0wDQYJKoZIhvcNAQEL
3+
BQAwEzERMA8GA1UEAwwIaGVhZGxhbXAwHhcNMjUwMzI2MDkzMzMyWhcNMzUwMzI0
4+
MDkzMzMyWjATMREwDwYDVQQDDAhoZWFkbGFtcDCCAiIwDQYJKoZIhvcNAQEBBQAD
5+
ggIPADCCAgoCggIBAMgmg41Bh/3uBBNuIiJH9A3aGV4/BcNFdzTH+LBQh0XV06kv
6+
3lfazvIfcayHhRxzIKiakf/8pCgp4vexK7QNzE+x4C1P2CoD8Bnn3pH6NP6ruQ9i
7+
ygFtZT4npcf2JRjZGGIXMnZQdrxckW77iWIquYaK604YLjTv4mylIXOLz/CqA675
8+
fJZb+NR0IhtPzMxKq2g+PryvFrZowwqsu+takyhRsOuPjsS3Netdcsz4/MnjQAxc
9+
hHnSc9hHJ2UWKbH/akx4+MIgzDWFuC+HVXPjPZfP0GwEJ6DKcmLEA06v/sWizs/E
10+
G43aHOLsz1oxn8qs7bdfIQGvO+zhQlZFO+k01q4VBzisk1P6LMvdmag7OkR+FjxE
11+
J3LpWn0un/iQ07fF/mU7ne9s7KSdBHm8i9ZjmQvmyg9Z/T5wZdmMFDJ7zOc4U7dv
12+
sSeQKapo7dbiUogXf9y99jJDtKjV2mrQ0k3o9zzH0LUztmf6GDHWb0r8HDcverOE
13+
wjl80zsh58IDR60ij7q1Ri1NVx27lbUkN/6uLO6K/D7weMwLHtWRebCB175Fghzd
14+
YHU5G4VolfvjhHcC815Ta1qToxjtSZ7gox0FO8Pk0zfyhanXn2yQqsf7vEbpE/OH
15+
XQGBbKxMgnCUrWrHxsNqggB2SbVdX4K9/tvU3DEf4M3npApNMbVVhZgT1BMTAgMB
16+
AAGjbzBtMB0GA1UdDgQWBBSjm04cqdUTx9EQ7NMA32j5lEVn9zAfBgNVHSMEGDAW
17+
gBSjm04cqdUTx9EQ7NMA32j5lEVn9zAPBgNVHRMBAf8EBTADAQH/MBoGA1UdEQQT
18+
MBGCCWxvY2FsaG9zdIcEfwAAATANBgkqhkiG9w0BAQsFAAOCAgEAkhSkyfvD2jnf
19+
L7eFARu9u2T1eWNBOsX1fLfaKp69EnDNxrH3hDl07aHlN2pSgiKa5BH6Qjs0oRO2
20+
e/w4Pr+DqwF6MoypLu1QmKz3FD9qezD9F6i5glFAex+pI+3jYHLyaGV+JjbxDl7D
21+
Ou8qcUlIApe5RekTZqXbGWzrMvl3Ty3rK2pFIScg+CstibErLPT+cnBLlO7K+8YX
22+
1PeqHB0d7luQlIpSWH+hY6/Qv3hzjewU0Rb5wmEwlg98QnaiegXSirNIdGeRvVvI
23+
wDqeU1WDaVuCtY71MQreF9x+xi8ly+04EKxVSPRUFfph38CUrxgSWk6o80PCXIjV
24+
T7EkNHI47kbagiIYsTS6PhWMPvhEA+JLCU784zRKtWIWX5dTn5/nuFnoCotAh2nf
25+
XkDGAQT8Pi8EGsEX8rCP1L0quPSDoyZcC3VlH8C3Q2f3AnL988q/s+gimAntk6oY
26+
qXvfR7TwX12PYBeLj8+u6I9HvU5TA261BCycwGOoDgl8Bg25S3U2x6hSQwy88PFR
27+
co//bJl17Z8P1uLOyO6oLqqtPU1qpjfUQUqGI3ULvkGFVINNLRHCSCI3SKV+pZ/5
28+
Si8RolSDHuURXDzEf3V4J7mAwtcz7bAxLzJitq4Y+n1YMQB756iXQlFO1R/rLube
29+
AQ5EE7bu3GMww0Tm1HFOxvESIzCFkJo=
30+
-----END CERTIFICATE-----
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
-----BEGIN PRIVATE KEY-----
2+
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
51+
XgrdPr+sPnhXC+ydU3uPmvJS4irwFg==
52+
-----END PRIVATE KEY-----

backend/cmd/server.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ func createHeadlampConfig(conf *config.Config) *HeadlampConfig {
7777
KubeConfigStore: kubeConfigStore,
7878
BaseURL: conf.BaseURL,
7979
ProxyURLs: strings.Split(conf.ProxyURLs, ","),
80+
TLSCertPath: conf.TLSCertPath,
81+
TLSKeyPath: conf.TLSKeyPath,
8082
},
8183
oidcClientID: conf.OidcClientID,
8284
oidcValidatorClientID: conf.OidcValidatorClientID,

backend/pkg/config/config.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ type Config struct {
5656
UseOTLPHTTP *bool `koanf:"use-otlp-http"`
5757
StdoutTraceEnabled *bool `koanf:"stdout-trace-enabled"`
5858
SamplingRate *float64 `koanf:"sampling-rate"`
59+
// TLS config
60+
TLSCertPath string `koanf:"tls-cert-path"`
61+
TLSKeyPath string `koanf:"tls-key-path"`
5962
}
6063

6164
func (c *Config) Validate() error {
@@ -353,6 +356,9 @@ func flagset() *flag.FlagSet {
353356
f.Bool("use-otlp-http", false, "Use HTTP instead of gRPC for OTLP export")
354357
f.Bool("stdout-trace-enabled", false, "Enable tracing output to stdout")
355358
f.Float64("sampling-rate", 1.0, "Sampling rate for traces")
359+
// TLS flags
360+
f.String("tls-cert-path", "", "Certificate for serving TLS")
361+
f.String("tls-key-path", "", "Key for serving TLS")
356362

357363
return f
358364
}

backend/pkg/headlampconfig/headlampConfig.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,6 @@ type HeadlampCFG struct {
2525
Metrics *telemetry.Metrics
2626
BaseURL string
2727
ProxyURLs []string
28+
TLSCertPath string
29+
TLSKeyPath string
2830
}

charts/headlamp/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ $ helm install my-headlamp headlamp/headlamp \
7373
| config.baseURL | string | `""` | Base URL path for Headlamp UI |
7474
| config.pluginsDir | string | `"/headlamp/plugins"` | Directory to load Headlamp plugins from |
7575
| config.extraArgs | array | `[]` | Additional arguments for Headlamp server |
76+
| config.tlsCertPath | string | `""` | Certificate for serving TLS |
77+
| config.tlsKeyPath | string | `""` | Key for serving TLS |
7678

7779
### OIDC Configuration
7880

charts/headlamp/templates/deployment.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,12 @@ spec:
263263
{{- with .Values.config.baseURL }}
264264
- "-base-url={{ . }}"
265265
{{- end }}
266+
{{- with .Values.config.tlsCertPath }}
267+
- "-tls-cert-path={{ . }}"
268+
{{- end }}
269+
{{- with .Values.config.tlsKeyPath }}
270+
- "-tls-key-path={{ . }}"
271+
{{- end }}
266272
{{- with .Values.config.extraArgs }}
267273
{{- toYaml . | nindent 12 }}
268274
{{- end }}
Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
---
2+
# Source: headlamp/templates/serviceaccount.yaml
3+
apiVersion: v1
4+
kind: ServiceAccount
5+
metadata:
6+
name: headlamp
7+
namespace: default
8+
labels:
9+
helm.sh/chart: headlamp-0.35.0
10+
app.kubernetes.io/name: headlamp
11+
app.kubernetes.io/instance: headlamp
12+
app.kubernetes.io/version: "0.35.0"
13+
app.kubernetes.io/managed-by: Helm
14+
---
15+
# Source: headlamp/templates/secret.yaml
16+
apiVersion: v1
17+
kind: Secret
18+
metadata:
19+
name: oidc
20+
namespace: default
21+
type: Opaque
22+
data:
23+
---
24+
# Source: headlamp/templates/clusterrolebinding.yaml
25+
apiVersion: rbac.authorization.k8s.io/v1
26+
kind: ClusterRoleBinding
27+
metadata:
28+
name: headlamp-admin
29+
labels:
30+
helm.sh/chart: headlamp-0.35.0
31+
app.kubernetes.io/name: headlamp
32+
app.kubernetes.io/instance: headlamp
33+
app.kubernetes.io/version: "0.35.0"
34+
app.kubernetes.io/managed-by: Helm
35+
roleRef:
36+
apiGroup: rbac.authorization.k8s.io
37+
kind: ClusterRole
38+
name: cluster-admin
39+
subjects:
40+
- kind: ServiceAccount
41+
name: headlamp
42+
namespace: default
43+
---
44+
# Source: headlamp/templates/service.yaml
45+
apiVersion: v1
46+
kind: Service
47+
metadata:
48+
name: headlamp
49+
namespace: default
50+
labels:
51+
helm.sh/chart: headlamp-0.35.0
52+
app.kubernetes.io/name: headlamp
53+
app.kubernetes.io/instance: headlamp
54+
app.kubernetes.io/version: "0.35.0"
55+
app.kubernetes.io/managed-by: Helm
56+
spec:
57+
type: ClusterIP
58+
59+
ports:
60+
- port: 80
61+
targetPort: http
62+
protocol: TCP
63+
name: http
64+
selector:
65+
app.kubernetes.io/name: headlamp
66+
app.kubernetes.io/instance: headlamp
67+
---
68+
# Source: headlamp/templates/deployment.yaml
69+
# This block of code is used to extract the values from the env.
70+
# This is done to check if the values are non-empty and if they are, they are used in the deployment.yaml.
71+
72+
apiVersion: apps/v1
73+
kind: Deployment
74+
metadata:
75+
name: headlamp
76+
namespace: default
77+
labels:
78+
helm.sh/chart: headlamp-0.35.0
79+
app.kubernetes.io/name: headlamp
80+
app.kubernetes.io/instance: headlamp
81+
app.kubernetes.io/version: "0.35.0"
82+
app.kubernetes.io/managed-by: Helm
83+
spec:
84+
replicas: 1
85+
selector:
86+
matchLabels:
87+
app.kubernetes.io/name: headlamp
88+
app.kubernetes.io/instance: headlamp
89+
template:
90+
metadata:
91+
labels:
92+
app.kubernetes.io/name: headlamp
93+
app.kubernetes.io/instance: headlamp
94+
spec:
95+
serviceAccountName: headlamp
96+
automountServiceAccountToken: true
97+
securityContext:
98+
{}
99+
containers:
100+
- name: headlamp
101+
securityContext:
102+
privileged: false
103+
runAsGroup: 101
104+
runAsNonRoot: true
105+
runAsUser: 100
106+
image: "ghcr.io/headlamp-k8s/headlamp:v0.35.0"
107+
imagePullPolicy: IfNotPresent
108+
109+
env:
110+
args:
111+
- "-in-cluster"
112+
- "-plugins-dir=/headlamp/plugins"
113+
# Check if externalSecret is disabled
114+
- "-tls-cert-path=/headlamp-cert/headlamp-ca.crt"
115+
- "-tls-key-path=/headlamp-cert/headlamp-tls.key"
116+
ports:
117+
- name: http
118+
containerPort: 4466
119+
protocol: TCP
120+
livenessProbe:
121+
httpGet:
122+
path: "/"
123+
port: http
124+
readinessProbe:
125+
httpGet:
126+
path: "/"
127+
port: http
128+
resources:
129+
{}
130+
volumeMounts:
131+
- mountPath: /headlamp-cert
132+
name: headlamp-cert
133+
volumes:
134+
- name: headlamp-cert
135+
secret:
136+
items:
137+
- key: tls.crt
138+
path: headlamp-ca.crt
139+
- key: tls.key
140+
path: headlamp-tls.key
141+
secretName: headlamp-tls

0 commit comments

Comments
 (0)