diff --git a/chart/templates/_helpers.yaml b/chart/templates/_helpers.yaml
index f3cafc03731b0..074ecc7d4914c 100644
--- a/chart/templates/_helpers.yaml
+++ b/chart/templates/_helpers.yaml
@@ -443,6 +443,17 @@ server_tls_key_file = /etc/pgbouncer/server.key
 {{ (printf "%s/webserver_config.py" .Values.airflowHome) | quote }}
 {{- end }}
 
+{{ define "airflow_webserver_config_configmap_name" -}}
+{{ default (printf "%s-webserver-config" .Release.Name) .Values.webserver.webserverConfigConfigMapName }}
+{{- end }}
+
+{{ define "airflow_webserver_config_mount" -}}
+- name: webserver-config
+  mountPath: {{ template "airflow_webserver_config_path" . }}
+  subPath: webserver_config.py
+  readOnly: True
+{{- end -}}
+
 {{ define "airflow_local_setting_path" -}}
 {{ (printf "%s/config/airflow_local_settings.py" .Values.airflowHome) | quote }}
 {{- end }}
diff --git a/chart/templates/configmaps/webserver-configmap.yaml b/chart/templates/configmaps/webserver-configmap.yaml
index e8d5ca016e725..26fb5094d969e 100644
--- a/chart/templates/configmaps/webserver-configmap.yaml
+++ b/chart/templates/configmaps/webserver-configmap.yaml
@@ -18,11 +18,11 @@
 ################################
 ## Airflow ConfigMap
 #################################
-{{- if .Values.webserver.webserverConfig }}
+{{- if and .Values.webserver.webserverConfig (not .Values.webserver.webserverConfigConfigMapName) }}
 apiVersion: v1
 kind: ConfigMap
 metadata:
-  name: {{ .Release.Name }}-webserver-config
+  name: {{ template "airflow_webserver_config_configmap_name" . }}
   labels:
     tier: airflow
     component: config
diff --git a/chart/templates/scheduler/scheduler-deployment.yaml b/chart/templates/scheduler/scheduler-deployment.yaml
index 89e5ab3d8c98e..9f8411c716b07 100644
--- a/chart/templates/scheduler/scheduler-deployment.yaml
+++ b/chart/templates/scheduler/scheduler-deployment.yaml
@@ -139,6 +139,9 @@ spec:
 {{- include "airflow_config_mount" . | nindent 12 }}
 {{- if .Values.scheduler.extraVolumeMounts }}
 {{ toYaml .Values.scheduler.extraVolumeMounts | indent 12 }}
+{{- end }}
+{{- if or .Values.webserver.webserverConfig .Values.webserver.webserverConfigConfigMapName }}
+{{ include "airflow_webserver_config_mount" . | indent 12 }}
 {{- end }}
           args:
           {{- include "wait-for-migrations-command" . | indent 10 }}
@@ -204,6 +207,9 @@ spec:
             - name: logs
               mountPath: {{ template "airflow_logs" . }}
 {{- include "airflow_config_mount" . | nindent 12 }}
+{{- if or .Values.webserver.webserverConfig .Values.webserver.webserverConfigConfigMapName }}
+{{ include "airflow_webserver_config_mount" . | indent 12 }}
+{{- end }}
 {{- if and $localOrDagProcessorDisabled (or .Values.dags.persistence.enabled .Values.dags.gitSync.enabled) }}
 {{- include "airflow_dags_mount" . | nindent 12 }}
 {{- end }}
@@ -235,6 +241,9 @@ spec:
               mountPath: {{ template "airflow_logs" . }}
 {{- if .Values.scheduler.extraVolumeMounts }}
 {{ toYaml .Values.scheduler.extraVolumeMounts | indent 12 }}
+{{- end }}
+{{- if or .Values.webserver.webserverConfig .Values.webserver.webserverConfigConfigMapName }}
+{{ include "airflow_webserver_config_mount" . | indent 12 }}
 {{- end }}
           {{- end }}
 {{- if .Values.scheduler.extraContainers }}
@@ -244,6 +253,11 @@ spec:
         - name: config
           configMap:
             name: {{ template "airflow_config" . }}
+        {{- if or .Values.webserver.webserverConfig .Values.webserver.webserverConfigConfigMapName }}
+        - name: webserver-config
+          configMap:
+            name: {{ template "airflow_webserver_config_configmap_name" . }}
+        {{- end }}
 {{- if $localOrDagProcessorDisabled }}
         {{- if .Values.dags.persistence.enabled }}
         - name: dags
diff --git a/chart/templates/triggerer/triggerer-deployment.yaml b/chart/templates/triggerer/triggerer-deployment.yaml
index d79bc5ccc4a94..33f478caed651 100644
--- a/chart/templates/triggerer/triggerer-deployment.yaml
+++ b/chart/templates/triggerer/triggerer-deployment.yaml
@@ -120,6 +120,9 @@ spec:
             {{- if .Values.triggerer.extraVolumeMounts }}
             {{ toYaml .Values.triggerer.extraVolumeMounts | nindent 12 }}
             {{- end }}
+{{- if or .Values.webserver.webserverConfig .Values.webserver.webserverConfigConfigMapName }}
+{{ include "airflow_webserver_config_mount" . | indent 12 }}
+{{- end }}
           args:
           {{- include "wait-for-migrations-command" . | nindent 10 }}
           envFrom:
@@ -156,6 +159,9 @@ spec:
             - name: logs
               mountPath: {{ template "airflow_logs" . }}
 {{- include "airflow_config_mount" . | nindent 12 }}
+{{- if or .Values.webserver.webserverConfig .Values.webserver.webserverConfigConfigMapName }}
+{{ include "airflow_webserver_config_mount" . | indent 12 }}
+{{- end }}
             {{- if or .Values.dags.persistence.enabled .Values.dags.gitSync.enabled }}
             {{- include "airflow_dags_mount" . | nindent 12 }}
             {{- end }}
@@ -187,6 +193,11 @@ spec:
         - name: config
           configMap:
             name: {{ template "airflow_config" . }}
+        {{- if or .Values.webserver.webserverConfig .Values.webserver.webserverConfigConfigMapName }}
+        - name: webserver-config
+          configMap:
+            name: {{ template "airflow_webserver_config_configmap_name" . }}
+        {{- end }}
         {{- if .Values.dags.persistence.enabled }}
         - name: dags
           persistentVolumeClaim:
diff --git a/chart/templates/webserver/webserver-deployment.yaml b/chart/templates/webserver/webserver-deployment.yaml
index e745eed6a8a2a..81d97ab83d88b 100644
--- a/chart/templates/webserver/webserver-deployment.yaml
+++ b/chart/templates/webserver/webserver-deployment.yaml
@@ -131,6 +131,9 @@ spec:
 {{- include "airflow_config_mount" . | nindent 12 }}
 {{- if .Values.webserver.extraVolumeMounts }}
 {{ toYaml .Values.webserver.extraVolumeMounts | indent 12 }}
+{{- end }}
+{{- if or .Values.webserver.webserverConfig .Values.webserver.webserverConfigConfigMapName }}
+{{ include "airflow_webserver_config_mount" . | indent 12 }}
 {{- end }}
           args:
           {{- include "wait-for-migrations-command" . | indent 10 }}
@@ -169,11 +172,8 @@ spec:
               readOnly: true
 {{- end }}
 {{- include "airflow_config_mount" . | nindent 12 }}
-{{- if .Values.webserver.webserverConfig }}
-            - name: webserver-config
-              mountPath: {{ template "airflow_webserver_config_path" . }}
-              subPath: webserver_config.py
-              readOnly: true
+{{- if or .Values.webserver.webserverConfig .Values.webserver.webserverConfigConfigMapName }}
+{{ include "airflow_webserver_config_mount" . | indent 12 }}
 {{- end }}
 {{- if and (semverCompare "<2.0.0" .Values.airflowVersion) (or .Values.dags.gitSync.enabled .Values.dags.persistence.enabled) }}
             {{- include "airflow_dags_mount" . | nindent 12 }}
@@ -232,10 +232,10 @@ spec:
         - name: config
           configMap:
             name: {{ template "airflow_config" . }}
-        {{- if .Values.webserver.webserverConfig }}
+        {{- if or .Values.webserver.webserverConfig .Values.webserver.webserverConfigConfigMapName }}
         - name: webserver-config
           configMap:
-            name: {{ .Release.Name }}-webserver-config
+            name: {{ template "airflow_webserver_config_configmap_name" . }}
         {{- end }}
         {{- if (semverCompare "<2.0.0" .Values.airflowVersion) }}
         {{- if .Values.dags.persistence.enabled }}
diff --git a/chart/templates/workers/worker-deployment.yaml b/chart/templates/workers/worker-deployment.yaml
index c60b09ce3e418..5e8969b669c49 100644
--- a/chart/templates/workers/worker-deployment.yaml
+++ b/chart/templates/workers/worker-deployment.yaml
@@ -149,6 +149,9 @@ spec:
 {{- include "airflow_config_mount" . | nindent 12 }}
 {{- if .Values.workers.extraVolumeMounts }}
 {{ toYaml .Values.workers.extraVolumeMounts | indent 12 }}
+{{- end }}
+{{- if or .Values.webserver.webserverConfig .Values.webserver.webserverConfigConfigMapName }}
+{{ include "airflow_webserver_config_mount" . | indent 12 }}
 {{- end }}
           args:
           {{- include "wait-for-migrations-command" . | indent 10 }}
@@ -216,6 +219,9 @@ spec:
             {{- if or .Values.dags.persistence.enabled .Values.dags.gitSync.enabled }}
             {{- include "airflow_dags_mount" . | nindent 12 }}
             {{- end }}
+{{- if or .Values.webserver.webserverConfig .Values.webserver.webserverConfigConfigMapName }}
+{{ include "airflow_webserver_config_mount" . | indent 12 }}
+{{- end }}
           envFrom:
           {{- include "custom_airflow_environment_from" . | default "\n  []" | indent 10 }}
           env:
@@ -257,6 +263,9 @@ spec:
 {{- if .Values.workers.extraVolumeMounts }}
 {{ toYaml .Values.workers.extraVolumeMounts | indent 12 }}
 {{- end }}
+{{- if or .Values.webserver.webserverConfig .Values.webserver.webserverConfigConfigMapName }}
+{{ include "airflow_webserver_config_mount" . | indent 12 }}
+{{- end }}
 {{- end }}
         {{- if .Values.workers.kerberosSidecar.enabled }}
         - name: worker-kerberos
@@ -282,6 +291,9 @@ spec:
               readOnly: false
 {{- if .Values.workers.extraVolumeMounts }}
 {{ toYaml .Values.workers.extraVolumeMounts | indent 12 }}
+{{- end }}
+{{- if or .Values.webserver.webserverConfig .Values.webserver.webserverConfigConfigMapName }}
+{{ include "airflow_webserver_config_mount" . | indent 12 }}
 {{- end }}
           envFrom:
           {{- include "custom_airflow_environment_from" . | default "\n  []" | indent 10 }}
@@ -303,6 +315,11 @@ spec:
         - name: config
           configMap:
             name: {{ template "airflow_config" . }}
+        {{- if or .Values.webserver.webserverConfig .Values.webserver.webserverConfigConfigMapName }}
+        - name: webserver-config
+          configMap:
+            name: {{ template "airflow_webserver_config_configmap_name" . }}
+        {{- end }}
         {{- if .Values.kerberos.enabled }}
         - name: kerberos-keytab
           secret:
diff --git a/chart/values.schema.json b/chart/values.schema.json
index b9cb8fd1a5afa..96506e24c4e0d 100644
--- a/chart/values.schema.json
+++ b/chart/values.schema.json
@@ -3429,7 +3429,7 @@
                     }
                 },
                 "webserverConfig": {
-                    "description": "This string (can be templated) will be mounted into the Airflow webserver as a custom `webserver_config.py`. You can bake a `webserver_config.py` in to your image instead.",
+                    "description": "This string (can be templated) will be mounted into the Airflow webserver as a custom `webserver_config.py`. You can bake a `webserver_config.py` in to your image instead or specify a configmap containing the webserver_config.py.",
                     "type": [
                         "string",
                         "null"
@@ -3440,6 +3440,18 @@
                         "from airflow import configuration as conf\n\n# The SQLAlchemy connection string.\nSQLALCHEMY_DATABASE_URI = conf.get('database', 'SQL_ALCHEMY_CONN')\n\n# Flask-WTF flag for CSRF\nCSRF_ENABLED = True"
                     ]
                 },
+                "webserverConfigConfigMapName": {
+                    "description": "The configmap name containing the webserver_config.py.",
+                    "type": [
+                        "string",
+                        "null"
+                    ],
+                    "x-docsSection": "Common",
+                    "default": null,
+                    "examples": [
+                        "my-webserver-configmap"
+                    ]
+                },
                 "service": {
                     "description": "Webserver Service configuration.",
                     "type": "object",
diff --git a/chart/values.yaml b/chart/values.yaml
index b05ddf4d58e21..22bba7da14fc8 100644
--- a/chart/values.yaml
+++ b/chart/values.yaml
@@ -970,8 +970,10 @@ webserver:
   extraVolumes: []
   extraVolumeMounts: []
 
-  # This string (can be templated) will be mounted into the Airflow Webserver as a custom
-  # webserver_config.py. You can bake a webserver_config.py in to your image instead.
+  # This string (can be templated) will be mounted into the Airflow Webserver
+  # as a custom webserver_config.py. You can bake a webserver_config.py in to
+  # your image instead or specify a configmap containing the
+  # webserver_config.py.
   webserverConfig: ~
   # webserverConfig: |
   #   from airflow import configuration as conf
@@ -981,6 +983,7 @@ webserver:
 
   #   # Flask-WTF flag for CSRF
   #   CSRF_ENABLED = True
+  webserverConfigConfigMapName: ~
 
   service:
     type: ClusterIP
diff --git a/tests/charts/test_airflow_common.py b/tests/charts/test_airflow_common.py
index 2a983c194e541..bb1389334d16e 100644
--- a/tests/charts/test_airflow_common.py
+++ b/tests/charts/test_airflow_common.py
@@ -89,6 +89,42 @@ def test_dags_mount(self, dag_values, expected_mount):
         for doc in docs:
             assert expected_mount in jmespath.search("spec.template.spec.containers[0].volumeMounts", doc)
 
+    def test_webserver_config_configmap_name_volume_mounts(self):
+        configmap_name = "my-configmap"
+        docs = render_chart(
+            values={
+                "webserver": {
+                    "webserverConfig": "CSRF_ENABLED = True  # {{ .Release.Name }}",
+                    "webserverConfigConfigMapName": configmap_name,
+                },
+                "workers": {"kerberosSidecar": {"enabled": True}},
+            },
+            show_only=[
+                "templates/scheduler/scheduler-deployment.yaml",
+                "templates/triggerer/triggerer-deployment.yaml",
+                "templates/webserver/webserver-deployment.yaml",
+                "templates/workers/worker-deployment.yaml",
+            ],
+        )
+        for index in range(len(docs)):
+            print(docs[index])
+            assert "webserver-config" in [
+                c["name"]
+                for r in jmespath.search(
+                    "spec.template.spec.initContainers[?name=='wait-for-airflow-migrations'].volumeMounts",
+                    docs[index],
+                )
+                for c in r
+            ]
+            for container in jmespath.search("spec.template.spec.containers", docs[index]):
+                assert "webserver-config" in [c["name"] for c in jmespath.search("volumeMounts", container)]
+            assert "webserver-config" in [
+                c["name"] for c in jmespath.search("spec.template.spec.volumes", docs[index])
+            ]
+            assert configmap_name == jmespath.search(
+                "spec.template.spec.volumes[?name=='webserver-config'].configMap.name | [0]", docs[index]
+            )
+
     def test_annotations(self):
         """
         Test Annotations are correctly applied on all pods created Scheduler, Webserver & Worker
diff --git a/tests/charts/test_webserver.py b/tests/charts/test_webserver.py
index dbe8a80dd96d2..c5551e730bb84 100644
--- a/tests/charts/test_webserver.py
+++ b/tests/charts/test_webserver.py
@@ -758,6 +758,18 @@ def test_no_webserver_config_configmap_by_default(self):
         docs = render_chart(show_only=["templates/configmaps/webserver-configmap.yaml"])
         assert 0 == len(docs)
 
+    def test_no_webserver_config_configmap_with_configmap_name(self):
+        docs = render_chart(
+            values={
+                "webserver": {
+                    "webserverConfig": "CSRF_ENABLED = True  # {{ .Release.Name }}",
+                    "webserverConfigConfigMapName": "my-configmap",
+                }
+            },
+            show_only=["templates/configmaps/webserver-configmap.yaml"],
+        )
+        assert 0 == len(docs)
+
     def test_webserver_config_configmap(self):
         docs = render_chart(
             values={"webserver": {"webserverConfig": "CSRF_ENABLED = True  # {{ .Release.Name }}"}},
