diff --git a/chart/templates/kiali/grafana-auth-secret.yaml b/chart/templates/kiali/grafana-auth-secret.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..036b7d415bcde39e225cd4a5972b78c7af7dd551
--- /dev/null
+++ b/chart/templates/kiali/grafana-auth-secret.yaml
@@ -0,0 +1,19 @@
+apiVersion: v1
+kind: Secret
+metadata:
+  name: grafana-auth
+  namespace: kiali
+  labels:
+    app.kubernetes.io/name: kiali
+    app.kubernetes.io/component: "core"
+    {{- include "commonLabels" . | nindent 4}}
+type: kubernetes.io/opaque
+stringData:
+{{- if (dig "grafana" "admin" "existingSecret" "" .Values.monitoring.values) }}
+  {{- $passwordKey := (dig "grafana" "admin" "passwordKey" "admin-password" .Values.monitoring.values) }}
+  {{- with lookup "v1" "Secret" "monitoring" .Values.monitoring.values.grafana.admin.existingSecret }}
+  password: {{ (get .data $passwordKey | b64dec) | default "prom-operator" }}
+  {{- end }}
+{{- else }}
+  password: {{ dig "grafana" "adminPassword" "prom-operator" .Values.monitoring.values }}
+{{- end }}
diff --git a/chart/templates/kiali/values.yaml b/chart/templates/kiali/values.yaml
index 5e83a225dc2a51d881978eb3dc83e0e28db211e6..e5e46fc8f2928dcdb367062dd57fdf8e081b7029 100644
--- a/chart/templates/kiali/values.yaml
+++ b/chart/templates/kiali/values.yaml
@@ -37,11 +37,21 @@ cr:
       {{- end }}
     external_services:
       grafana:
-        {{- $grafanaUrls := first (dig "istio" "grafana" "hosts" list .Values.monitoring.values) }}
-        url: https://{{ tpl ($grafanaUrls | default (printf "%s.%s" "grafana" .Values.hostname)) . }}
+        {{- $grafanaUrl := first (dig "istio" "grafana" "hosts" list .Values.monitoring.values) }}
+        url: https://{{ tpl ($grafanaUrl | default (printf "%s.%s" "grafana" .Values.hostname)) . }}
+        auth:
+        {{- if (dig "grafana" "admin" "existingSecret" "" .Values.monitoring.values) }}
+          {{- $userKey := (dig "grafana" "admin" "userKey" "admin-user" .Values.monitoring.values) }}
+          {{- with lookup "v1" "Secret" "monitoring" .Values.monitoring.values.grafana.admin.existingSecret }}
+          username: {{ (get .data $userKey | b64dec) | default "admin" }}
+          {{- end }}
+        {{- else }}
+          username: {{ dig "grafana" "adminUser" "admin" .Values.monitoring.values }}
+        {{- end }}
+          password: "secret:grafana-auth:password"
       tracing:
-        {{- $tracingUrls := first (dig "istio" "jaeger" "hosts" list .Values.jaeger.values) }}
-        url: https://{{ tpl ($tracingUrls | default (printf "%s.%s" "tracing" .Values.hostname)) . }}
+        {{- $tracingUrl := first (dig "istio" "jaeger" "hosts" list .Values.jaeger.values) }}
+        url: https://{{ tpl ($tracingUrl | default (printf "%s.%s" "tracing" .Values.hostname)) . }}
       istio:
         component_status:
           components: