Skip to content

Commit 6e3b2b6

Browse files
author
Barkha Choithani
committed
added security context for containers
1 parent a657820 commit 6e3b2b6

File tree

3 files changed

+69
-0
lines changed

3 files changed

+69
-0
lines changed

charts/templates/statefulset.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,12 @@ spec:
206206
sleep 10s
207207
fi
208208
done
209+
{{- if .Values.containerSecurityContext.enabled }}
210+
securityContext:
211+
runAsUser: {{ .Values.containerSecurityContext.runAsUser }}
212+
runAsNonRoot: {{ .Values.containerSecurityContext.runAsNonRoot }}
213+
allowPrivilegeEscalation: {{ .Values.containerSecurityContext.allowPrivilegeEscalation }}
214+
{{- end }}
209215
{{- if .Values.livenessProbe.enabled }}
210216
livenessProbe:
211217
httpGet:

charts/values.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,12 @@ serviceAccount:
100100
# If not set and create is true, a name is generated using the fullname template
101101
name: ""
102102

103+
# Below are the security configurations for container, by default security will be enabled
104+
containerSecurityContext:
105+
enabled: true
106+
runAsUser: 1000
107+
runAsNonRoot: false
108+
allowPrivilegeEscalation: false
103109

104110
# Below are the advanced configurations, please understand read the reference before you make changes
105111

test/template/sec_template_test.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package template_test
2+
3+
import (
4+
"path/filepath"
5+
"strings"
6+
"testing"
7+
8+
"github.com/stretchr/testify/require"
9+
appsv1 "k8s.io/api/apps/v1"
10+
11+
"github.com/gruntwork-io/terratest/modules/helm"
12+
"github.com/gruntwork-io/terratest/modules/k8s"
13+
"github.com/gruntwork-io/terratest/modules/random"
14+
)
15+
16+
func TestChartTemplateSecurityEnabled(t *testing.T) {
17+
t.Parallel()
18+
19+
// Path to the helm chart we will test
20+
helmChartPath, err := filepath.Abs("../../charts")
21+
releaseName := "marklogic-sec-test"
22+
t.Log(helmChartPath, releaseName)
23+
require.NoError(t, err)
24+
25+
// Set up the namespace; confirm that the template renders the expected value for the namespace.
26+
namespaceName := "marklogic-" + strings.ToLower(random.UniqueId())
27+
t.Logf("Namespace: %s\n", namespaceName)
28+
29+
// Setup the args for helm install
30+
options := &helm.Options{
31+
SetValues: map[string]string{
32+
"image.repository": "marklogicdb/marklogic-db",
33+
"image.tag": "latest",
34+
"persistence.enabled": "false",
35+
"securityContext.enabled": "true",
36+
"securityContext.runAsUser": "1000",
37+
"securityContext.runAsNonRoot": "true",
38+
"securityContext.allowPrivilegeEscalation": "false",
39+
},
40+
KubectlOptions: k8s.NewKubectlOptions("", "", namespaceName),
41+
}
42+
43+
// render the tempate
44+
output := helm.RenderTemplate(t, options, helmChartPath, releaseName, []string{"templates/statefulset.yaml"})
45+
46+
var statefulset appsv1.Deployment
47+
helm.UnmarshalK8SYaml(t, output, &statefulset)
48+
49+
// Verify the name and namespace matches
50+
require.Equal(t, namespaceName, statefulset.Namespace)
51+
52+
// Verify the image matches
53+
expectedImage := "marklogicdb/marklogic-db:latest"
54+
statefulSetContainers := statefulset.Spec.Template.Spec.Containers
55+
require.Equal(t, len(statefulSetContainers), 1)
56+
require.Equal(t, statefulSetContainers[0].Image, expectedImage)
57+
}

0 commit comments

Comments
 (0)