diff --git a/doc/source/install/developer/kubernetes-and-common-setup.rst b/doc/source/install/developer/kubernetes-and-common-setup.rst
index 7f08f0984a..40781242c7 100644
--- a/doc/source/install/developer/kubernetes-and-common-setup.rst
+++ b/doc/source/install/developer/kubernetes-and-common-setup.rst
@@ -79,7 +79,7 @@ Alternatively, this step can be performed by running the script directly:
 Deploy the ingress controller
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-.. literalinclude:: ../../../../tools/deployment/developer/common/030-ingress.sh
+.. literalinclude:: ../../../../tools/deployment/component/common/ingress.sh
     :language: shell
     :lines: 1,17-
 
@@ -87,4 +87,4 @@ Alternatively, this step can be performed by running the script directly:
 
 .. code-block:: shell
 
-  ./tools/deployment/developer/common/030-ingress.sh
+  ./tools/deployment/developer/component/common/ingress.sh
diff --git a/doc/source/install/multinode.rst b/doc/source/install/multinode.rst
index bdd114e12b..49c266c7ae 100644
--- a/doc/source/install/multinode.rst
+++ b/doc/source/install/multinode.rst
@@ -90,7 +90,11 @@ Alternatively, this step can be performed by running the script directly:
 Deploy the ingress controller
 -----------------------------
 
-.. literalinclude:: ../../../tools/deployment/multinode/020-ingress.sh
+.. code-block:: shell
+
+  export OSH_DEPLOY_MULTINODE=True
+
+.. literalinclude:: ../../../tools/deployment/component/common/ingress.sh
     :language: shell
     :lines: 1,17-
 
@@ -98,7 +102,7 @@ Alternatively, this step can be performed by running the script directly:
 
 .. code-block:: shell
 
-  ./tools/deployment/multinode/020-ingress.sh
+  OSH_DEPLOY_MULTINODE=True ./tools/deployment/component/common/ingress.sh
 
 
 Deploy Ceph
diff --git a/tools/deployment/component/common/ingress.sh b/tools/deployment/component/common/ingress.sh
index f571805bcf..75d3bdeaa2 100755
--- a/tools/deployment/component/common/ingress.sh
+++ b/tools/deployment/component/common/ingress.sh
@@ -24,6 +24,7 @@ export HELM_CHART_ROOT_PATH="${HELM_CHART_ROOT_PATH:="${OSH_INFRA_PATH:="../open
 make -C ${HELM_CHART_ROOT_PATH} ingress
 
 #NOTE: Deploy command
+: ${OSH_EXTRA_HELM_ARGS:=""}
 tee /tmp/ingress-kube-system.yaml << EOF
 deployment:
   mode: cluster
@@ -31,10 +32,28 @@ deployment:
 network:
   host_namespace: true
 EOF
+
+touch /tmp/ingress-component.yaml
+
+if [ -n "${OSH_DEPLOY_MULTINODE}" ]; then
+  tee --append /tmp/ingress-kube-system.yaml << EOF
+pod:
+  replicas:
+    error_page: 2
+EOF
+
+  tee /tmp/ingress-component.yaml << EOF
+pod:
+  replicas:
+    ingress: 2
+    error_page: 2
+EOF
+fi
+
 helm upgrade --install ingress-kube-system ${HELM_CHART_ROOT_PATH}/ingress \
   --namespace=kube-system \
   --values=/tmp/ingress-kube-system.yaml \
-  ${OSH_EXTRA_HELM_ARGS:=} \
+  ${OSH_EXTRA_HELM_ARGS} \
   ${OSH_EXTRA_HELM_ARGS_INGRESS} \
   ${OSH_EXTRA_HELM_ARGS_INGRESS_KUBE_SYSTEM}
 
@@ -45,9 +64,10 @@ helm upgrade --install ingress-kube-system ${HELM_CHART_ROOT_PATH}/ingress \
 helm status ingress-kube-system
 
 #NOTE: Deploy namespace ingress
-helm upgrade --install ingress-openstack ${OSH_INFRA_PATH}/ingress \
+helm upgrade --install ingress-openstack ${HELM_CHART_ROOT_PATH}/ingress \
   --namespace=openstack \
-  ${OSH_EXTRA_HELM_ARGS:=} \
+  --values=/tmp/ingress-component.yaml \
+  ${OSH_EXTRA_HELM_ARGS} \
   ${OSH_EXTRA_HELM_ARGS_INGRESS} \
   ${OSH_EXTRA_HELM_ARGS_INGRESS_OPENSTACK}
 
@@ -56,3 +76,16 @@ helm upgrade --install ingress-openstack ${OSH_INFRA_PATH}/ingress \
 
 #NOTE: Display info
 helm status ingress-openstack
+
+helm upgrade --install ingress-ceph ${HELM_CHART_ROOT_PATH}/ingress \
+  --namespace=ceph \
+  --values=/tmp/ingress-component.yaml \
+  ${OSH_EXTRA_HELM_ARGS} \
+  ${OSH_EXTRA_HELM_ARGS_INGRESS} \
+  ${OSH_EXTRA_HELM_ARGS_INGRESS_CEPH}
+
+#NOTE: Wait for deploy
+./tools/deployment/common/wait-for-pods.sh ceph
+
+#NOTE: Display info
+helm status ingress-ceph
diff --git a/tools/deployment/developer/common/030-ingress.sh b/tools/deployment/developer/common/030-ingress.sh
deleted file mode 100755
index a92f94d5fd..0000000000
--- a/tools/deployment/developer/common/030-ingress.sh
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/bin/bash
-
-# Copyright 2017 The Openstack-Helm Authors.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-set -xe
-
-#NOTE: Get the over-rides to use
-export HELM_CHART_ROOT_PATH="${HELM_CHART_ROOT_PATH:="${OSH_INFRA_PATH:="../openstack-helm-infra"}"}"
-: ${OSH_EXTRA_HELM_ARGS_INGRESS:="$(./tools/deployment/common/get-values-overrides.sh ingress)"}
-
-#NOTE: Lint and package chart
-make -C ${HELM_CHART_ROOT_PATH} ingress
-
-#NOTE: Deploy command
-: ${OSH_EXTRA_HELM_ARGS:=""}
-tee /tmp/ingress-kube-system.yaml << EOF
-deployment:
-  mode: cluster
-  type: DaemonSet
-network:
-  host_namespace: true
-EOF
-helm upgrade --install ingress-kube-system ${HELM_CHART_ROOT_PATH}/ingress \
-  --namespace=kube-system \
-  --values=/tmp/ingress-kube-system.yaml \
-  ${OSH_EXTRA_HELM_ARGS} \
-  ${OSH_EXTRA_HELM_ARGS_INGRESS} \
-  ${OSH_EXTRA_HELM_ARGS_INGRESS_KUBE_SYSTEM}
-
-#NOTE: Wait for deploy
-./tools/deployment/common/wait-for-pods.sh kube-system
-
-#NOTE: Display info
-helm status ingress-kube-system
-
-#NOTE: Deploy namespace ingress
-helm upgrade --install ingress-openstack ${HELM_CHART_ROOT_PATH}/ingress \
-  --namespace=openstack \
-  ${OSH_EXTRA_HELM_ARGS} \
-  ${OSH_EXTRA_HELM_ARGS_INGRESS} \
-  ${OSH_EXTRA_HELM_ARGS_INGRESS_OPENSTACK}
-
-#NOTE: Wait for deploy
-./tools/deployment/common/wait-for-pods.sh openstack
-
-#NOTE: Display info
-helm status ingress-openstack
-
-
-helm upgrade --install ingress-ceph ${HELM_CHART_ROOT_PATH}/ingress \
-  --namespace=ceph \
-  ${OSH_EXTRA_HELM_ARGS} \
-  ${OSH_EXTRA_HELM_ARGS_INGRESS} \
-  ${OSH_EXTRA_HELM_ARGS_INGRESS_CEPH}
-
-#NOTE: Wait for deploy
-./tools/deployment/common/wait-for-pods.sh ceph
-
-#NOTE: Display info
-helm status ingress-ceph
diff --git a/tools/deployment/developer/common/030-ingress.sh b/tools/deployment/developer/common/030-ingress.sh
new file mode 120000
index 0000000000..7097683624
--- /dev/null
+++ b/tools/deployment/developer/common/030-ingress.sh
@@ -0,0 +1 @@
+../../component/common/ingress.sh
\ No newline at end of file
diff --git a/tools/deployment/multinode/020-ingress.sh b/tools/deployment/multinode/020-ingress.sh
index 9fc1f82fcc..4a80205839 100755
--- a/tools/deployment/multinode/020-ingress.sh
+++ b/tools/deployment/multinode/020-ingress.sh
@@ -15,51 +15,5 @@
 #    under the License.
 
 set -xe
-
-#NOTE: Deploy global ingress
-: ${OSH_INFRA_PATH:="../openstack-helm-infra"}
-tee /tmp/ingress-kube-system.yaml << EOF
-pod:
-  replicas:
-    error_page: 2
-deployment:
-  mode: cluster
-  type: DaemonSet
-network:
-  host_namespace: true
-EOF
-helm upgrade --install ingress-kube-system ${OSH_INFRA_PATH}/ingress \
-  --namespace=kube-system \
-  --values=/tmp/ingress-kube-system.yaml \
-  ${OSH_EXTRA_HELM_ARGS} \
-  ${OSH_EXTRA_HELM_ARGS_INGRESS_KUBE_SYSTEM}
-
-#NOTE: Wait for deploy
-./tools/deployment/common/wait-for-pods.sh kube-system
-
-#NOTE: Display info
-helm status ingress-kube-system
-
-#NOTE: Deploy namespaced ingress controllers
-for NAMESPACE in openstack ceph; do
-  # Allow $OSH_EXTRA_HELM_ARGS_INGRESS_ceph and $OSH_EXTRA_HELM_ARGS_INGRESS_openstack overrides
-  OSH_EXTRA_HELM_ARGS_INGRESS_NAMESPACE="OSH_EXTRA_HELM_ARGS_INGRESS_${NAMESPACE}"
-  #NOTE: Deploy namespace ingress
-  tee /tmp/ingress-${NAMESPACE}.yaml << EOF
-pod:
-  replicas:
-    ingress: 2
-    error_page: 2
-EOF
-  helm upgrade --install ingress-${NAMESPACE} ${OSH_INFRA_PATH}/ingress \
-    --namespace=${NAMESPACE} \
-    --values=/tmp/ingress-${NAMESPACE}.yaml \
-  ${OSH_EXTRA_HELM_ARGS} \
-  ${!OSH_EXTRA_HELM_ARGS_INGRESS_NAMESPACE}
-
-  #NOTE: Wait for deploy
-  ./tools/deployment/common/wait-for-pods.sh ${NAMESPACE}
-
-  #NOTE: Display info
-  helm status ingress-${NAMESPACE}
-done
+export OSH_DEPLOY_MULTINODE=True
+./tools/deployment/component/common/ingress.sh
diff --git a/tools/gate/playbooks/multinode-deploy.yaml b/tools/gate/playbooks/multinode-deploy.yaml
index 1e3cffab16..efbde0affb 100644
--- a/tools/gate/playbooks/multinode-deploy.yaml
+++ b/tools/gate/playbooks/multinode-deploy.yaml
@@ -27,13 +27,14 @@
         chdir: "{{ zuul_osh_relative_path | default(zuul.project.src_dir) }}"
     - name: Deploy Ingress
       environment:
+        OSH_DEPLOY_MULTINODE: True
         OSH_OPENSTACK_RELEASE: "{{ osh_openstack_release }}"
         OSH_EXTRA_HELM_ARGS: "{{ zuul_osh_extra_helm_args_relative_path | default('') }}"
         OSH_INFRA_PATH: "{{ zuul_osh_infra_relative_path | default('') }}"
         zuul_site_mirror_fqdn: "{{ zuul_site_mirror_fqdn }}"
       shell: |
         set -xe;
-        ./tools/deployment/multinode/020-ingress.sh
+        ./tools/deployment/component/common/ingress.sh
       args:
         chdir: "{{ zuul_osh_relative_path | default(zuul.project.src_dir) }}"
     - name: Deploy Ceph
diff --git a/tools/gate/playbooks/multinode-tempest-deploy.yaml b/tools/gate/playbooks/multinode-tempest-deploy.yaml
index e6f68777be..141f04cd41 100644
--- a/tools/gate/playbooks/multinode-tempest-deploy.yaml
+++ b/tools/gate/playbooks/multinode-tempest-deploy.yaml
@@ -21,9 +21,11 @@
       args:
         chdir: "{{ zuul.project.src_dir }}"
     - name: Deploy Ingress
+      environment:
+        OSH_DEPLOY_MULTINODE: True
       shell: |
         set -xe;
-        ./tools/deployment/multinode/020-ingress.sh
+        ./tools/deployment/component/common/ingress.sh
       args:
         chdir: "{{ zuul.project.src_dir }}"
     - name: Deploy Ceph