diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9f11b75
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+.idea/
diff --git a/README.md b/README.md
index 9185e67..e9fb3b3 100644
--- a/README.md
+++ b/README.md
@@ -2,22 +2,5 @@
Complete prometheus monitoring stack setup on Kubernetes.
-Idea of this repo to understand all the components involved in prometheus setup.
-
-You can find the full tutorial from here--> [Kubernetes Monitoting setup Using Prometheus](https://devopscube.com/setup-prometheus-monitoring-on-kubernetes/)
-
-## 🚀 CKA, CKAD, CKS or KCNA Voucher Codes/Updates
-
-If you are preparing for CKA, CKAD, CKS or KCNA exam, **get $60 discount** today using code **DCUBEOFFER** at https://kube.promo/latest. It is a limited time offer.
-
-## ✍️ Other Manifest repos
-
-Kube State metrics manifests: https://github.com/devopscube/kube-state-metrics-configs
-
-Alert manager Manifests: https://github.com/bibinwilson/kubernetes-alert-manager
-
-Grafana manifests: https://github.com/bibinwilson/kubernetes-grafana
-
-Node Exporter manifests: https://github.com/bibinwilson/kubernetes-node-exporter
diff --git a/alert-manager/AlertManagerConfigmap.yaml b/alert-manager/AlertManagerConfigmap.yaml
new file mode 100644
index 0000000..658d28e
--- /dev/null
+++ b/alert-manager/AlertManagerConfigmap.yaml
@@ -0,0 +1,35 @@
+kind: ConfigMap
+apiVersion: v1
+metadata:
+ name: alertmanager-config
+ namespace: monitoring
+data:
+ config.yml: |-
+ global:
+ templates:
+ - '/etc/alertmanager/*.tmpl'
+ route:
+ receiver: alert-emailer
+ group_by: ['alertname', 'priority']
+ group_wait: 10s
+ repeat_interval: 30m
+ routes:
+ - receiver: slack_demo
+ # Send severity=slack alerts to slack.
+ match:
+ severity: slack
+ group_wait: 10s
+ repeat_interval: 1m
+
+ receivers:
+ - name: alert-emailer
+ email_configs:
+ - to: demo@devopscube.com
+ send_resolved: false
+ from: from-email@email.com
+ smarthost: smtp.eample.com:25
+ require_tls: false
+ - name: slack_demo
+ slack_configs:
+ - api_url: https://hooks.slack.com/services/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sz4Qk
+ channel: '#devopscube-demo'
\ No newline at end of file
diff --git a/alert-manager/AlertTemplateConfigMap.yaml b/alert-manager/AlertTemplateConfigMap.yaml
new file mode 100644
index 0000000..577eb80
--- /dev/null
+++ b/alert-manager/AlertTemplateConfigMap.yaml
@@ -0,0 +1,177 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ creationTimestamp: null
+ name: alertmanager-templates
+ namespace: monitoring
+data:
+ default.tmpl: |
+ {{ define "__alertmanager" }}AlertManager{{ end }}
+ {{ define "__alertmanagerURL" }}{{ .ExternalURL }}/#/alerts?receiver={{ .Receiver }}{{ end }}
+ {{ define "__subject" }}[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] {{ .GroupLabels.SortedPairs.Values | join " " }} {{ if gt (len .CommonLabels) (len .GroupLabels) }}({{ with .CommonLabels.Remove .GroupLabels.Names }}{{ .Values | join " " }}{{ end }}){{ end }}{{ end }}
+ {{ define "__description" }}{{ end }}
+ {{ define "__text_alert_list" }}{{ range . }}Labels:
+ {{ range .Labels.SortedPairs }} - {{ .Name }} = {{ .Value }}
+ {{ end }}Annotations:
+ {{ range .Annotations.SortedPairs }} - {{ .Name }} = {{ .Value }}
+ {{ end }}Source: {{ .GeneratorURL }}
+ {{ end }}{{ end }}
+ {{ define "slack.default.title" }}{{ template "__subject" . }}{{ end }}
+ {{ define "slack.default.username" }}{{ template "__alertmanager" . }}{{ end }}
+ {{ define "slack.default.fallback" }}{{ template "slack.default.title" . }} | {{ template "slack.default.titlelink" . }}{{ end }}
+ {{ define "slack.default.pretext" }}{{ end }}
+ {{ define "slack.default.titlelink" }}{{ template "__alertmanagerURL" . }}{{ end }}
+ {{ define "slack.default.iconemoji" }}{{ end }}
+ {{ define "slack.default.iconurl" }}{{ end }}
+ {{ define "slack.default.text" }}{{ end }}
+ {{ define "hipchat.default.from" }}{{ template "__alertmanager" . }}{{ end }}
+ {{ define "hipchat.default.message" }}{{ template "__subject" . }}{{ end }}
+ {{ define "pagerduty.default.description" }}{{ template "__subject" . }}{{ end }}
+ {{ define "pagerduty.default.client" }}{{ template "__alertmanager" . }}{{ end }}
+ {{ define "pagerduty.default.clientURL" }}{{ template "__alertmanagerURL" . }}{{ end }}
+ {{ define "pagerduty.default.instances" }}{{ template "__text_alert_list" . }}{{ end }}
+ {{ define "opsgenie.default.message" }}{{ template "__subject" . }}{{ end }}
+ {{ define "opsgenie.default.description" }}{{ .CommonAnnotations.SortedPairs.Values | join " " }}
+ {{ if gt (len .Alerts.Firing) 0 -}}
+ Alerts Firing:
+ {{ template "__text_alert_list" .Alerts.Firing }}
+ {{- end }}
+ {{ if gt (len .Alerts.Resolved) 0 -}}
+ Alerts Resolved:
+ {{ template "__text_alert_list" .Alerts.Resolved }}
+ {{- end }}
+ {{- end }}
+ {{ define "opsgenie.default.source" }}{{ template "__alertmanagerURL" . }}{{ end }}
+ {{ define "victorops.default.message" }}{{ template "__subject" . }} | {{ template "__alertmanagerURL" . }}{{ end }}
+ {{ define "victorops.default.from" }}{{ template "__alertmanager" . }}{{ end }}
+ {{ define "email.default.subject" }}{{ template "__subject" . }}{{ end }}
+ {{ define "email.default.html" }}
+
+
+
+
+
+
+ {{ template "__subject" . }}
+
+
+
+
+ |
+
+
+
+
+ |
+ {{ .Alerts | len }} alert{{ if gt (len .Alerts) 1 }}s{{ end }} for {{ range .GroupLabels.SortedPairs }}
+ {{ .Name }}={{ .Value }}
+ {{ end }}
+ |
+
+
+
+
+
+ |
+ View in {{ template "__alertmanager" . }}
+ |
+
+ {{ if gt (len .Alerts.Firing) 0 }}
+
+ |
+ [{{ .Alerts.Firing | len }}] Firing
+ |
+
+ {{ end }}
+ {{ range .Alerts.Firing }}
+
+
+ Labels
+ {{ range .Labels.SortedPairs }}{{ .Name }} = {{ .Value }} {{ end }}
+ {{ if gt (len .Annotations) 0 }}Annotations {{ end }}
+ {{ range .Annotations.SortedPairs }}{{ .Name }} = {{ .Value }} {{ end }}
+ Source
+ |
+
+ {{ end }}
+ {{ if gt (len .Alerts.Resolved) 0 }}
+ {{ if gt (len .Alerts.Firing) 0 }}
+
+
+
+
+
+ |
+
+ {{ end }}
+
+ |
+ [{{ .Alerts.Resolved | len }}] Resolved
+ |
+
+ {{ end }}
+ {{ range .Alerts.Resolved }}
+
+
+ Labels
+ {{ range .Labels.SortedPairs }}{{ .Name }} = {{ .Value }} {{ end }}
+ {{ if gt (len .Annotations) 0 }}Annotations {{ end }}
+ {{ range .Annotations.SortedPairs }}{{ .Name }} = {{ .Value }} {{ end }}
+ Source
+ |
+
+ {{ end }}
+
+ |
+
+
+
+ |
+ |
+
+
+
+
+ {{ end }}
+ {{ define "pushover.default.title" }}{{ template "__subject" . }}{{ end }}
+ {{ define "pushover.default.message" }}{{ .CommonAnnotations.SortedPairs.Values | join " " }}
+ {{ if gt (len .Alerts.Firing) 0 }}
+ Alerts Firing:
+ {{ template "__text_alert_list" .Alerts.Firing }}
+ {{ end }}
+ {{ if gt (len .Alerts.Resolved) 0 }}
+ Alerts Resolved:
+ {{ template "__text_alert_list" .Alerts.Resolved }}
+ {{ end }}
+ {{ end }}
+ {{ define "pushover.default.url" }}{{ template "__alertmanagerURL" . }}{{ end }}
+ slack.tmpl: |
+ {{ define "slack.devops.text" }}
+ {{range .Alerts}}{{.Annotations.DESCRIPTION}}
+ {{end}}
+ {{ end }}
\ No newline at end of file
diff --git a/alert-manager/Deployment.yaml b/alert-manager/Deployment.yaml
new file mode 100644
index 0000000..df0e048
--- /dev/null
+++ b/alert-manager/Deployment.yaml
@@ -0,0 +1,49 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: alertmanager
+ namespace: monitoring
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app: alertmanager
+ template:
+ metadata:
+ name: alertmanager
+ labels:
+ app: alertmanager
+ spec:
+ containers:
+ - name: alertmanager
+ image: prom/alertmanager:latest
+ imagePullPolicy: IfNotPresent
+ args:
+ - "--config.file=/etc/alertmanager/config.yml"
+ - "--storage.path=/alertmanager"
+ ports:
+ - name: alertmanager
+ containerPort: 9093
+ resources:
+ requests:
+ cpu: 500m
+ memory: 500M
+ limits:
+ cpu: 1
+ memory: 1Gi
+ volumeMounts:
+ - name: config-volume
+ mountPath: /etc/alertmanager
+ - name: templates-volume
+ mountPath: /etc/alertmanager-templates
+ - name: alertmanager
+ mountPath: /alertmanager
+ volumes:
+ - name: config-volume
+ configMap:
+ name: alertmanager-config
+ - name: templates-volume
+ configMap:
+ name: alertmanager-templates
+ - name: alertmanager
+ emptyDir: {}
diff --git a/alert-manager/Service.yaml b/alert-manager/Service.yaml
new file mode 100644
index 0000000..5cb261d
--- /dev/null
+++ b/alert-manager/Service.yaml
@@ -0,0 +1,16 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: alertmanager
+ namespace: monitoring
+ annotations:
+ prometheus.io/scrape: 'true'
+ prometheus.io/port: '9093'
+spec:
+ selector:
+ app: alertmanager
+ type: NodePort
+ ports:
+ - port: 9093
+ targetPort: 9093
+ nodePort: 31000
diff --git a/config-map.yaml b/config-map.yaml
index e009197..5eb4aaf 100644
--- a/config-map.yaml
+++ b/config-map.yaml
@@ -104,7 +104,7 @@ data:
- job_name: 'kube-state-metrics'
static_configs:
- - targets: ['kube-state-metrics.kube-system.svc.cluster.local:8080']
+ - targets: ['prometheus-service:8080']
- job_name: 'kubernetes-cadvisor'
@@ -157,3 +157,8 @@ data:
- source_labels: [__meta_kubernetes_service_name]
action: replace
target_label: kubernetes_name
+
+
+ - job_name: 'My Ubuntu server metrics'
+ static_configs:
+ - targets: ['ubuntu.tehd.ir:9100']
diff --git a/grafana/deployment.yaml b/grafana/deployment.yaml
new file mode 100644
index 0000000..b2d9e92
--- /dev/null
+++ b/grafana/deployment.yaml
@@ -0,0 +1,43 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: grafana
+ namespace: monitoring
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app: grafana
+ template:
+ metadata:
+ name: grafana
+ labels:
+ app: grafana
+ spec:
+ containers:
+ - name: grafana
+ image: grafana/grafana:9.0.4
+ imagePullPolicy: IfNotPresent
+ ports:
+ - name: grafana
+ containerPort: 3000
+ resources:
+ limits:
+ memory: "1Gi"
+ cpu: "1000m"
+ requests:
+ memory: 500M
+ cpu: "500m"
+ volumeMounts:
+ - mountPath: /var/lib/grafana
+ name: grafana-storage
+ - mountPath: /etc/grafana/provisioning/datasources
+ name: grafana-datasources
+ readOnly: false
+ volumes:
+ - name: grafana-storage
+ emptyDir: {}
+ - name: grafana-datasources
+ configMap:
+ defaultMode: 420
+ name: grafana-datasources
diff --git a/grafana/grafana-datasource-config.yaml b/grafana/grafana-datasource-config.yaml
new file mode 100644
index 0000000..77428f2
--- /dev/null
+++ b/grafana/grafana-datasource-config.yaml
@@ -0,0 +1,21 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: grafana-datasources
+ namespace: monitoring
+data:
+ prometheus.yaml: |-
+ {
+ "apiVersion": 1,
+ "datasources": [
+ {
+ "access":"proxy",
+ "editable": true,
+ "name": "prometheus",
+ "orgId": 1,
+ "type": "prometheus",
+ "url": "http://prometheus-service.monitoring.svc:8080",
+ "version": 1
+ }
+ ]
+ }
\ No newline at end of file
diff --git a/grafana/service.yaml b/grafana/service.yaml
new file mode 100644
index 0000000..c57bbf7
--- /dev/null
+++ b/grafana/service.yaml
@@ -0,0 +1,16 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: grafana
+ namespace: monitoring
+ annotations:
+ prometheus.io/scrape: 'true'
+ prometheus.io/port: '3000'
+spec:
+ selector:
+ app: grafana
+ type: NodePort
+ ports:
+ - port: 3000
+ targetPort: 3000
+ nodePort: 32000
\ No newline at end of file
diff --git a/kube-state-metrics/cluster-role-binding.yaml b/kube-state-metrics/cluster-role-binding.yaml
new file mode 100644
index 0000000..12f5466
--- /dev/null
+++ b/kube-state-metrics/cluster-role-binding.yaml
@@ -0,0 +1,16 @@
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ labels:
+ app.kubernetes.io/component: exporter
+ app.kubernetes.io/name: kube-state-metrics
+ app.kubernetes.io/version: 2.3.0
+ name: kube-state-metrics
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: kube-state-metrics
+subjects:
+- kind: ServiceAccount
+ name: kube-state-metrics
+ namespace: kube-system
diff --git a/kube-state-metrics/cluster-role.yaml b/kube-state-metrics/cluster-role.yaml
new file mode 100644
index 0000000..859e901
--- /dev/null
+++ b/kube-state-metrics/cluster-role.yaml
@@ -0,0 +1,109 @@
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ labels:
+ app.kubernetes.io/component: exporter
+ app.kubernetes.io/name: kube-state-metrics
+ app.kubernetes.io/version: 2.3.0
+ name: kube-state-metrics
+rules:
+- apiGroups:
+ - ""
+ resources:
+ - configmaps
+ - secrets
+ - nodes
+ - pods
+ - services
+ - resourcequotas
+ - replicationcontrollers
+ - limitranges
+ - persistentvolumeclaims
+ - persistentvolumes
+ - namespaces
+ - endpoints
+ verbs:
+ - list
+ - watch
+- apiGroups:
+ - apps
+ resources:
+ - statefulsets
+ - daemonsets
+ - deployments
+ - replicasets
+ verbs:
+ - list
+ - watch
+- apiGroups:
+ - batch
+ resources:
+ - cronjobs
+ - jobs
+ verbs:
+ - list
+ - watch
+- apiGroups:
+ - autoscaling
+ resources:
+ - horizontalpodautoscalers
+ verbs:
+ - list
+ - watch
+- apiGroups:
+ - authentication.k8s.io
+ resources:
+ - tokenreviews
+ verbs:
+ - create
+- apiGroups:
+ - authorization.k8s.io
+ resources:
+ - subjectaccessreviews
+ verbs:
+ - create
+- apiGroups:
+ - policy
+ resources:
+ - poddisruptionbudgets
+ verbs:
+ - list
+ - watch
+- apiGroups:
+ - certificates.k8s.io
+ resources:
+ - certificatesigningrequests
+ verbs:
+ - list
+ - watch
+- apiGroups:
+ - storage.k8s.io
+ resources:
+ - storageclasses
+ - volumeattachments
+ verbs:
+ - list
+ - watch
+- apiGroups:
+ - admissionregistration.k8s.io
+ resources:
+ - mutatingwebhookconfigurations
+ - validatingwebhookconfigurations
+ verbs:
+ - list
+ - watch
+- apiGroups:
+ - networking.k8s.io
+ resources:
+ - networkpolicies
+ - ingresses
+ verbs:
+ - list
+ - watch
+- apiGroups:
+ - coordination.k8s.io
+ resources:
+ - leases
+ verbs:
+ - list
+ - watch
diff --git a/kube-state-metrics/deployment.yaml b/kube-state-metrics/deployment.yaml
new file mode 100644
index 0000000..9098f36
--- /dev/null
+++ b/kube-state-metrics/deployment.yaml
@@ -0,0 +1,49 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ labels:
+ app.kubernetes.io/component: exporter
+ app.kubernetes.io/name: kube-state-metrics
+ app.kubernetes.io/version: 2.3.0
+ name: kube-state-metrics
+ namespace: kube-system
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app.kubernetes.io/name: kube-state-metrics
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/component: exporter
+ app.kubernetes.io/name: kube-state-metrics
+ app.kubernetes.io/version: 2.3.0
+ spec:
+ automountServiceAccountToken: true
+ containers:
+ - image: k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.3.0
+ livenessProbe:
+ httpGet:
+ path: /healthz
+ port: 8080
+ initialDelaySeconds: 5
+ timeoutSeconds: 5
+ name: kube-state-metrics
+ ports:
+ - containerPort: 8080
+ name: http-metrics
+ - containerPort: 8081
+ name: telemetry
+ readinessProbe:
+ httpGet:
+ path: /
+ port: 8081
+ initialDelaySeconds: 5
+ timeoutSeconds: 5
+ securityContext:
+ allowPrivilegeEscalation: false
+ readOnlyRootFilesystem: true
+ runAsUser: 65534
+ nodeSelector:
+ kubernetes.io/os: linux
+ serviceAccountName: kube-state-metrics
diff --git a/kube-state-metrics/service-account.yaml b/kube-state-metrics/service-account.yaml
new file mode 100644
index 0000000..fa8254e
--- /dev/null
+++ b/kube-state-metrics/service-account.yaml
@@ -0,0 +1,10 @@
+apiVersion: v1
+automountServiceAccountToken: false
+kind: ServiceAccount
+metadata:
+ labels:
+ app.kubernetes.io/component: exporter
+ app.kubernetes.io/name: kube-state-metrics
+ app.kubernetes.io/version: 2.3.0
+ name: kube-state-metrics
+ namespace: kube-system
diff --git a/kube-state-metrics/service.yaml b/kube-state-metrics/service.yaml
new file mode 100644
index 0000000..164818a
--- /dev/null
+++ b/kube-state-metrics/service.yaml
@@ -0,0 +1,20 @@
+apiVersion: v1
+kind: Service
+metadata:
+ labels:
+ app.kubernetes.io/component: exporter
+ app.kubernetes.io/name: kube-state-metrics
+ app.kubernetes.io/version: 2.3.0
+ name: kube-state-metrics
+ namespace: kube-system
+spec:
+ clusterIP: None
+ ports:
+ - name: http-metrics
+ port: 8080
+ targetPort: http-metrics
+ - name: telemetry
+ port: 8081
+ targetPort: telemetry
+ selector:
+ app.kubernetes.io/name: kube-state-metrics
diff --git a/node-exporter/daemonset.yaml b/node-exporter/daemonset.yaml
new file mode 100644
index 0000000..bed771c
--- /dev/null
+++ b/node-exporter/daemonset.yaml
@@ -0,0 +1,56 @@
+apiVersion: apps/v1
+kind: DaemonSet
+metadata:
+ labels:
+ app.kubernetes.io/component: exporter
+ app.kubernetes.io/name: node-exporter
+ name: node-exporter
+ namespace: monitoring
+spec:
+ selector:
+ matchLabels:
+ app.kubernetes.io/component: exporter
+ app.kubernetes.io/name: node-exporter
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/component: exporter
+ app.kubernetes.io/name: node-exporter
+ spec:
+ containers:
+ - args:
+ - --path.sysfs=/host/sys
+ - --path.rootfs=/host/root
+ - --no-collector.wifi
+ - --no-collector.hwmon
+ - --collector.filesystem.ignored-mount-points=^/(dev|proc|sys|var/lib/docker/.+|var/lib/kubelet/pods/.+)($|/)
+ - --collector.netclass.ignored-devices=^(veth.*)$
+ name: node-exporter
+ image: prom/node-exporter
+ imagePullPolicy: IfNotPresent
+ ports:
+ - containerPort: 9100
+ protocol: TCP
+ resources:
+ limits:
+ cpu: 250m
+ memory: 180Mi
+ requests:
+ cpu: 102m
+ memory: 180Mi
+ volumeMounts:
+ - mountPath: /host/sys
+ mountPropagation: HostToContainer
+ name: sys
+ readOnly: true
+ - mountPath: /host/root
+ mountPropagation: HostToContainer
+ name: root
+ readOnly: true
+ volumes:
+ - hostPath:
+ path: /sys
+ name: sys
+ - hostPath:
+ path: /
+ name: root
diff --git a/node-exporter/service.yaml b/node-exporter/service.yaml
new file mode 100644
index 0000000..f29d3e3
--- /dev/null
+++ b/node-exporter/service.yaml
@@ -0,0 +1,18 @@
+---
+kind: Service
+apiVersion: v1
+metadata:
+ name: node-exporter
+ namespace: monitoring
+ annotations:
+ prometheus.io/scrape: 'true'
+ prometheus.io/port: '9100'
+spec:
+ selector:
+ app.kubernetes.io/component: exporter
+ app.kubernetes.io/name: node-exporter
+ ports:
+ - name: node-exporter
+ protocol: TCP
+ port: 9100
+ targetPort: 9100
\ No newline at end of file
diff --git a/prometheus-deployment.yaml b/prometheus-deployment.yaml
index 2ccb852..18a62c1 100644
--- a/prometheus-deployment.yaml
+++ b/prometheus-deployment.yaml
@@ -1,3 +1,8 @@
+apiVersion: v1
+kind: Namespace
+metadata:
+ name: monitoring
+---
apiVersion: apps/v1
kind: Deployment
metadata:
@@ -18,6 +23,7 @@ spec:
containers:
- name: prometheus
image: prom/prometheus
+ imagePullPolicy: IfNotPresent
args:
- "--config.file=/etc/prometheus/prometheus.yml"
- "--storage.tsdb.path=/prometheus/"
diff --git a/prometheus-ingress.yaml b/prometheus-ingress.yaml
index 202f2e6..86ffe5e 100644
--- a/prometheus-ingress.yaml
+++ b/prometheus-ingress.yaml
@@ -1,33 +1,45 @@
-## Nginx Ingress
-## Follow https://devopscube.com/setup-ingress-kubernetes-nginx-controller/
-
-apiVersion: extensions/v1beta1
+---
+apiVersion: cert-manager.io/v1
+kind: Issuer
+metadata:
+ name: selfsigned-issuer
+ namespace: monitoring
+spec:
+ selfSigned: {}
+---
+apiVersion: cert-manager.io/v1
+kind: Certificate
+metadata:
+ name: prometheus-selfsigned-certificate
+ namespace: monitoring
+spec:
+ secretName: prometheus-selfsigned
+ dnsNames:
+ - "prometheus.example.com"
+ isCA: true
+ issuerRef:
+ name: selfsigned-issuer
+ kind: Issuer
+---
+apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
- name: prometheus-ui
+ name: prometheus
namespace: monitoring
- annotations:
- kubernetes.io/ingress.class: nginx
spec:
+ ingressClassName: nginx
+ tls:
+ - hosts:
+ - prometheus.example.com
+ secretName: prometheus-selfsigned
rules:
- # Use the host you used in your kubernetes Ingress Configurations
- host: prometheus.example.com
http:
paths:
- - backend:
- serviceName: prometheus-service
- servicePort: 8080
- tls:
- - hosts:
- - prometheus.apps.shaker242.lab
- secretName: prometheus-secret
----
-apiVersion: v1
-kind: Secret
-metadata:
- name: prometheus-secret
- namespace: monitoring
-data:
-# USe base64 in the certs
- tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZpVENDQkhHZ0F3SUJBZ0lCQVRBTkJna3Foa2lHOXcwQkFRc0ZBRENCd0RFak1DRUdBMVVFQXhNYWFXNTAKWlhKdFpXUnBZWFJsTG5Ob1lXdGxjakkwTWk1c1lXSXhDekFKQmdOVkJBWVRBbFZUTVJFd0R3WURWUVFJRXdoVwphWEpuYVc1cFlURVFNQTRHQTFVRUJ4TUhRbkpwYzNSdmR6RXNNQ29HQTFVRUNoTWpVMGhCUzBWU01qUXlJRXhoCllpQkRaWEowYVdacFkyRjBaU0JCZFhSb2IzSnBkSGt4T1RBM0JnTlZCQXNUTUZOSVFVdEZVakkwTWlCTVlXSWcKU1c1MFpYSnRaV1JwWVhSbElFTmxjblJwWm1sallYUmxJRUYxZEdodmNtbDBlVEFlRncweE9URXdNVGN4TmpFMgpNekZhRncweU1URXdNVFl4TmpFMk16RmFNSUdBTVIwd0d3WURWUVFERkJRcUxtRndjSE11YzJoaGEyVnlNalF5CkxteGhZakVMTUFrR0ExVUVCaE1DVlZNeEVUQVBCZ05WQkFnVENGWnBjbWRwYm1saE1SQXdEZ1lEVlFRSEV3ZEMKY21semRHOTNNUll3RkFZRFZRUUtFdzFUU0VGTFJWSXlORElnVEdGaU1SVXdFd1lEVlFRTEV3eE1ZV0lnVjJWaQpjMmwwWlhNd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUURsRm16QVd0U09JcXZNCkpCV3Vuc0VIUmxraXozUmpSK0p1NTV0K0hCUG95YnZwVkJJeXMxZ3prby9INlkxa2Zxa1JCUzZZYVFHM2lYRFcKaDgzNlNWc3pNVUNVS3BtNXlZQXJRNzB4YlpPTXRJcjc1VEcrejFaRGJaeFUzbnh6RXdHdDN3U3c5OVJ0bjhWbgo5dEpTVXI0MHBHUytNemMzcnZOUFZRMjJoYTlhQTdGL2NVcGxtZUpkUnZEVnJ3Q012UklEcndXVEZjZkU3bUtxCjFSUkRxVDhETnlydlJmeUlubytmSkUxTmRuVEVMY0dTYVZlajhZVVFONHY0WFRnLzJncmxIN1pFT1VXNy9oYm8KUXh6NVllejVSam1wOWVPVUpvdVdmWk5FNEJBbGRZeVYxd2NPRXhRTmswck5BOU45ZXBjNWtUVVZQR3pOTWRucgovVXQxOWMweEFnTUJBQUdqZ2dIS01JSUJ4akFKQmdOVkhSTUVBakFBTUJFR0NXQ0dTQUdHK0VJQkFRUUVBd0lHClFEQUxCZ05WSFE4RUJBTUNCYUF3TXdZSllJWklBWWI0UWdFTkJDWVdKRTl3Wlc1VFUwd2dSMlZ1WlhKaGRHVmsKSUZObGNuWmxjaUJEWlhKMGFXWnBZMkYwWlRBZEJnTlZIUTRFRmdRVWRhYy94MTR6dXl3RVZPSi9vTjdQeU82bApDZ2N3Z2RzR0ExVWRJd1NCMHpDQjBJQVVzZFM1WWxuWEpWTk5mRVpkTEQvL2RyNE5mV3FoZ2JTa2diRXdnYTR4CkdUQVhCZ05WQkFNVEVHTmhMbk5vWVd0bGNqSTBNaTVzWVdJeEN6QUpCZ05WQkFZVEFsVlRNUkV3RHdZRFZRUUkKRXdoV2FYSm5hVzVwWVRFUU1BNEdBMVVFQnhNSFFuSnBjM1J2ZHpFc01Db0dBMVVFQ2hNalUwaEJTMFZTTWpReQpJRXhoWWlCRFpYSjBhV1pwWTJGMFpTQkJkWFJvYjNKcGRIa3hNVEF2QmdOVkJBc1RLRk5JUVV0RlVqSTBNaUJNCllXSWdVbTl2ZENCRFpYSjBhV1pwWTJGMFpTQkJkWFJvYjNKcGRIbUNBUUV3SFFZRFZSMGxCQll3RkFZSUt3WUIKQlFVSEF3RUdDQ3NHQVFVRkNBSUNNRWdHQTFVZEVRUkJNRCtDRFhOb1lXdGxjakkwTWk1c1lXS0NFbUZ3Y0hNdQpjMmhoYTJWeU1qUXlMbXhoWW9JVUtpNWhjSEJ6TG5Ob1lXdGxjakkwTWk1c1lXS0hCTUNvQ3hBd0RRWUpLb1pJCmh2Y05BUUVMQlFBRGdnRUJBRzA3ZHFNdFZYdVQrckduQlN4SkVTNjNSa2pHaWd0c3ZtNTk4NSsrbjZjRW5kSDIKb2hjaGdmRUo5V0UxYUFWSDR4QlJSdVRIUFVJOFcvd3N1OFBxQ1o4NHpRQ2U2elAyeThEcmEwbjFzK2lIeHFwRAorS3BwZS91NkNLVTFEL0VWRU9MakpZd3pRYlFLSUlPL2Y1Q0JVbUpGWjBuZ1VIUEtvUDNyTXordTlBOWFvRkVrCnF3dDBadHFHcWpjMkh3Q09UOTlOVmFsZ29ISXljOElxQXJXdjNSWklraUlyaW9kSUdDMS94MVQ2dHhKcEUyRisKQzZ0Tzk0U0FVSUJwc2VORjNFbGNLNUsyTW44YVAzR3NnNFRHeElPN2Q1eUIvb3YwNGhOV2Q1S2QwWGorL1BvQgpLOU43cFQ1SVU2citLekNoeGlSdmRvZlAzV0VYN1ZkNEtLWG94K0U9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
- tls.key: LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2d0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktrd2dnU2xBZ0VBQW9JQkFRRGxGbXpBV3RTT0lxdk0KSkJXdW5zRUhSbGtpejNSalIrSnU1NXQrSEJQb3lidnBWQkl5czFnemtvL0g2WTFrZnFrUkJTNllhUUczaVhEVwpoODM2U1Zzek1VQ1VLcG01eVlBclE3MHhiWk9NdElyNzVURyt6MVpEYlp4VTNueHpFd0d0M3dTdzk5UnRuOFZuCjl0SlNVcjQwcEdTK016YzNydk5QVlEyMmhhOWFBN0YvY1VwbG1lSmRSdkRWcndDTXZSSURyd1dURmNmRTdtS3EKMVJSRHFUOEROeXJ2UmZ5SW5vK2ZKRTFOZG5URUxjR1NhVmVqOFlVUU40djRYVGcvMmdybEg3WkVPVVc3L2hibwpReHo1WWV6NVJqbXA5ZU9VSm91V2ZaTkU0QkFsZFl5VjF3Y09FeFFOazByTkE5TjllcGM1a1RVVlBHek5NZG5yCi9VdDE5YzB4QWdNQkFBRUNnZ0VCQU5zOHRjRDBiQnpHZzRFdk8yek0wMUJoKzZYN3daZk4wSjV3bW5kNjZYYkwKc1VEZ1N6WW9PbzNJZ2o5QWZTY2lyQ3YwdUozMVNFWmNpeGRVQ2tTdjlVNnRvTzdyUWdqeUZPM1N1dm5Wc3ZKaQpTZXc5Y0hqNk5jVDczak8rWkgxQVFFZ2tlWG5mQTNZU0JEcTFsSnhpUVZOaHpHUFY0Yzh4Wi9xUkhEbUVBTWR6CmwyaTB6dHJtcWRqSng4aTQxOXpGL1pVektoa2JtcVZVb3JjZ1lNdEt5QVloSENMYms2RFZtQ1FhbDlndEUrNjUKTmFTOEwxUW9yVWNVS0FoSTNKT2Q2TTRwbWRPaExITjZpZ0VwWFdVWGxBZjRITUZicHd5M1oxejNqZzVqTE9ragp6SWNDSVRaai9CYVZvSVc4QzJUb0pieUJKWkN6UDVjUVJTdkJOOGV4aUFFQ2dZRUEvV0Nxb2xVUWtOQkQrSnlPCklXOUJIRVlPS3oxRFZxNWxHRFhoNFMyTStpOU1pck5nUlcvL0NFRGhRUVVMZmtBTDgxMERPQmxsMXRRRUpGK3cKb1V6dWt6U1lkK1hTSnhicTM5YTF1ZGJldTNZU1ljeC8wTEEweGFQOW1sN1l1NXUraUZ4NGhwcnYyL2UrVklZQQpzTWV4WkZSODA3Q3M5YXN5MkdFT1l2aEdKb0VDZ1lFQTUzVm1weFlQbDFOYTVTMElJbEpuYm40dTl0RHpwYm5TCnpsMjBVQ3Q0d0N4STR6YjY1S1o4V1VaYlFzVTVaZ0VqTmxJWURXUisrd3kwVXh2SmNxUG5nS0xuOEdoSzhvOVEKeVJuR2dSYXAxWmNuUEdsbGdCeHQzM0s5TDNWMmJzMXBPcGJKMGlpOVdySWM4MU1wUVFpQjZ1RDRSZ216M0ZWSQpnUk5Ec2ZHS0xyRUNnWUVBbWY5ZXRqc3RUbGJHZVJ2dDVyUlB4bmR0dFNvTysyZ1RXWnVtSmM0aG1RMldYOWFWCjlKNFZTMWJqa1RrWHV5d0NGMis0dlNmeWxaZFd6U1M3bmMyOFV3dnNmekxYZjVxV05tV3hIYnBTdFcwVnp3c1QKeENyVWFDczd2ODlWdXZEMTVMc1BKZ0NWT0FSalVjd0FMM0d2aDJNeVd4ZE9pQ0g5VFRYd0lJYjFYQUVDZ1lBMwp4ZUptZ0xwaERJVHFsRjlSWmVubWhpRnErQTY5OEhrTG9TakI2TGZBRnV1NVZKWkFZcDIwSlcvNE51NE4xbGhWCnpwSmRKOG94Vkc1ZldHTENiUnhyc3RXUTZKQ213a0lGTTJEUjJsUXlVNm53dExUd21la2YzdFlYaVlad1RLNysKbnpjaW5RNkR2RWVkbW54bVgxWnU4cWJndVpYTmtmOVdtdjNFOHg4SkFRS0JnUUNNeDFWNHJIcUpwVXJMdkRVVQo4RzhXVGNrT2VFM2o2anhlcHMwcnExdEd1cE9XWW5saFlNYyt5VkMzMDZUc2dXUmJ5R1Y4YWNaRkF4WS9Ub2N5CmxpcXlUS1NGNUloYXhZQVpRTzVkOU1oTmN0bTRReDNaOUtTekZ5ZG01QlZVL0grMFFmUnRwM29TeFVneXRZNXkKV3ZDTFZ5bmNGZlZpL0VkaTdaZHM2aW82QVE9PQotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg==
+ - path: /
+ pathType: ImplementationSpecific
+ backend:
+ service:
+ name: prometheus-service
+ port:
+ number: 8080