diff --git a/stable/prometheus/Chart.yaml b/stable/prometheus/Chart.yaml index b10c0e4ac2..00daf10cd8 100755 --- a/stable/prometheus/Chart.yaml +++ b/stable/prometheus/Chart.yaml @@ -1,5 +1,5 @@ name: prometheus -version: 3.1.0 +version: 3.2.0 description: Prometheus is a monitoring system and time series database. home: https://prometheus.io/ icon: https://raw.githubusercontent.com/prometheus/prometheus.github.io/master/assets/prometheus_logo-cb55bb5c346.png diff --git a/stable/prometheus/README.md b/stable/prometheus/README.md index 75fe5ef444..3397250907 100644 --- a/stable/prometheus/README.md +++ b/stable/prometheus/README.md @@ -147,6 +147,7 @@ Parameter | Description | Default `serverFiles.alerts` | Prometheus server alerts configuration | `""` `serverFiles.rules` | Prometheus server rules configuration | `""` `serverFiles.prometheus.yml` | Prometheus server scrape configuration | example configuration +`networkPolicy.enabled` | Enable NetworkPolicy | `false` | Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example, @@ -200,3 +201,19 @@ server: hosts: - prometheus.domain.com ``` + +### NetworkPolicy + +Enabling Network Policy for Prometheus will secure connections to Alert Manager +and Kube State Metrics by only accepting connections from Prometheus Server. +All inbound connections to Prometheus Server are still allowed. + +To enable network policy for Prometheus, install a networking plugin that +implements the Kubernetes NetworkPolicy spec, and set `networkPolicy.enabled` to true. + +If NetworkPolicy is enabled for Prometheus' scrape targets, you may also need +to manually create a networkpolicy which allows it. + +For Kubernetes v1.5 & v1.6, you must also turn on NetworkPolicy by setting the DefaultDeny namespace annotation. Note: this will enforce policy for all pods in the namespace: + + kubectl annotate namespace default "net.beta.kubernetes.io/network-policy={\"ingress\":{\"isolation\":\"DefaultDeny\"}}" diff --git a/stable/prometheus/templates/_helpers.tpl b/stable/prometheus/templates/_helpers.tpl index fdf4b53214..410c668fc4 100644 --- a/stable/prometheus/templates/_helpers.tpl +++ b/stable/prometheus/templates/_helpers.tpl @@ -50,3 +50,14 @@ We truncate at 63 chars because some Kubernetes name fields are limited to this {{- $name := default .Chart.Name .Values.nameOverride -}} {{- printf "%s-%s-%s" .Release.Name $name .Values.server.name | trunc 63 | trimSuffix "-" -}} {{- end -}} + +{{/* +Return the appropriate apiVersion for networkpolicy. +*/}} +{{- define "prometheus.networkPolicy.apiVersion" -}} +{{- if and (ge .Capabilities.KubeVersion.Minor "4") (le .Capabilities.KubeVersion.Minor "6") -}} +{{- print "extensions/v1beta1" -}} +{{- else if ge .Capabilities.KubeVersion.Minor "7" -}} +{{- print "networking.k8s.io/v1" -}} +{{- end -}} +{{- end -}} diff --git a/stable/prometheus/templates/alertmanager-networkpolicy.yaml b/stable/prometheus/templates/alertmanager-networkpolicy.yaml new file mode 100644 index 0000000000..9f5a7cae25 --- /dev/null +++ b/stable/prometheus/templates/alertmanager-networkpolicy.yaml @@ -0,0 +1,26 @@ +{{- if .Values.networkPolicy.enabled }} +apiVersion: {{ template "prometheus.networkPolicy.apiVersion" . }} +kind: NetworkPolicy +metadata: + name: {{ template "prometheus.alertmanager.fullname" . }} + labels: + app: {{ template "prometheus.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + component: "{{ .Values.alertmanager.name }}" + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +spec: + podSelector: + matchLabels: + app: {{ template "prometheus.name" . }} + component: "{{ .Values.alertmanager.name }}" + release: {{ .Release.Name }} + ingress: + - from: + - podSelector: + matchLabels: + release: {{ .Release.Name }} + component: "{{ .Values.server.name }}" + - ports: + - port: 9093 +{{- end }} diff --git a/stable/prometheus/templates/kube-state-metrics-networkpolicy.yaml b/stable/prometheus/templates/kube-state-metrics-networkpolicy.yaml new file mode 100644 index 0000000000..3fc62e2007 --- /dev/null +++ b/stable/prometheus/templates/kube-state-metrics-networkpolicy.yaml @@ -0,0 +1,26 @@ +{{- if .Values.networkPolicy.enabled }} +apiVersion: {{ template "prometheus.networkPolicy.apiVersion" . }} +kind: NetworkPolicy +metadata: + name: {{ template "prometheus.kubeStateMetrics.fullname" . }} + labels: + app: {{ template "prometheus.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + component: "{{ .Values.kubeStateMetrics.name }}" + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +spec: + podSelector: + matchLabels: + app: {{ template "prometheus.name" . }} + component: "{{ .Values.kubeStateMetrics.name }}" + release: {{ .Release.Name }} + ingress: + - from: + - podSelector: + matchLabels: + release: {{ .Release.Name }} + component: "{{ .Values.server.name }}" + - ports: + - port: 8080 +{{- end }} diff --git a/stable/prometheus/templates/server-networkpolicy.yaml b/stable/prometheus/templates/server-networkpolicy.yaml new file mode 100644 index 0000000000..3f1cdcc66a --- /dev/null +++ b/stable/prometheus/templates/server-networkpolicy.yaml @@ -0,0 +1,21 @@ +{{- if .Values.networkPolicy.enabled }} +apiVersion: {{ template "prometheus.networkPolicy.apiVersion" . }} +kind: NetworkPolicy +metadata: + name: {{ template "prometheus.server.fullname" . }} + labels: + app: {{ template "prometheus.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + component: "{{ .Values.server.name }}" + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +spec: + podSelector: + matchLabels: + app: {{ template "prometheus.name" . }} + component: "{{ .Values.server.name }}" + release: {{ .Release.Name }} + ingress: + - ports: + - port: 9090 +{{- end }} diff --git a/stable/prometheus/values.yaml b/stable/prometheus/values.yaml index 385e3935d4..c443a5e281 100644 --- a/stable/prometheus/values.yaml +++ b/stable/prometheus/values.yaml @@ -635,3 +635,8 @@ serverFiles: - source_labels: [__meta_kubernetes_pod_name] action: replace target_label: kubernetes_pod_name + +networkPolicy: + ## Enable creation of NetworkPolicy resources. + ## + enabled: false