From 0814ccaac6f8436dc4a05ae915fb40eaef8896bc Mon Sep 17 00:00:00 2001
From: Maysa Macedo <maysa.macedo95@gmail.com>
Date: Wed, 22 Jan 2020 16:19:52 +0000
Subject: [PATCH] Remove openshift routes(Ingress) support

Route pods from openshift can be used instead and the code
is not being used/maintained.

Change-Id: I76448752ba07f4b30dbfa783c2ae99d46e730eaf
---
 .zuul.d/octavia.yaml                          |  12 -
 .zuul.d/project.yaml                          |   1 -
 devstack/local.conf.openshift.sample          |  14 -
 devstack/plugin.sh                            |  60 ---
 devstack/settings                             |   6 -
 doc/source/devref/index.rst                   |   1 -
 .../kuryr_kubernetes_ocp_route_design.rst     | 167 -------
 doc/source/installation/index.rst             |   1 -
 doc/source/installation/ocp_route.rst         | 161 -------
 kuryr_kubernetes/config.py                    |   6 -
 kuryr_kubernetes/constants.py                 |   5 -
 kuryr_kubernetes/controller/drivers/base.py   |  85 ----
 .../controller/drivers/lbaasv2.py             | 149 ------
 .../controller/handlers/ingress_lbaas.py      | 213 ---------
 .../controller/ingress/__init__.py            |   0
 .../controller/ingress/ingress_ctl.py         | 159 -------
 kuryr_kubernetes/controller/service.py        |   3 -
 kuryr_kubernetes/exceptions.py                |   8 -
 kuryr_kubernetes/objects/lbaas.py             |  58 ---
 kuryr_kubernetes/objects/route.py             |  43 --
 kuryr_kubernetes/opts.py                      |   1 -
 kuryr_kubernetes/platform/__init__.py         |   0
 kuryr_kubernetes/platform/constants.py        |  17 -
 kuryr_kubernetes/platform/ocp/__init__.py     |   0
 .../platform/ocp/controller/__init__.py       |   0
 .../ocp/controller/handlers/__init__.py       |   0
 .../platform/ocp/controller/handlers/route.py | 255 -----------
 .../unit/controller/drivers/test_lbaasv2.py   | 362 ---------------
 .../controller/handlers/test_ingress_lbaas.py | 192 --------
 .../unit/controller/handlers/test_lbaas.py    |  34 --
 .../tests/unit/controller/ingress/__init__.py |   0
 .../controller/ingress/test_ingress_ctl.py    | 135 ------
 .../tests/unit/platform/__init__.py           |   0
 .../tests/unit/platform/ocp/__init__.py       |   0
 .../unit/platform/ocp/controller/__init__.py  |   0
 .../ocp/controller/handlers/__init__.py       |   0
 .../ocp/controller/handlers/test_route.py     | 428 ------------------
 kuryr_kubernetes/tests/unit/test_object.py    |   8 -
 setup.cfg                                     |   2 -
 39 files changed, 2586 deletions(-)
 delete mode 100644 doc/source/devref/kuryr_kubernetes_ocp_route_design.rst
 delete mode 100644 doc/source/installation/ocp_route.rst
 delete mode 100644 kuryr_kubernetes/controller/handlers/ingress_lbaas.py
 delete mode 100644 kuryr_kubernetes/controller/ingress/__init__.py
 delete mode 100644 kuryr_kubernetes/controller/ingress/ingress_ctl.py
 delete mode 100644 kuryr_kubernetes/objects/route.py
 delete mode 100644 kuryr_kubernetes/platform/__init__.py
 delete mode 100644 kuryr_kubernetes/platform/constants.py
 delete mode 100644 kuryr_kubernetes/platform/ocp/__init__.py
 delete mode 100644 kuryr_kubernetes/platform/ocp/controller/__init__.py
 delete mode 100644 kuryr_kubernetes/platform/ocp/controller/handlers/__init__.py
 delete mode 100644 kuryr_kubernetes/platform/ocp/controller/handlers/route.py
 delete mode 100644 kuryr_kubernetes/tests/unit/controller/handlers/test_ingress_lbaas.py
 delete mode 100644 kuryr_kubernetes/tests/unit/controller/ingress/__init__.py
 delete mode 100644 kuryr_kubernetes/tests/unit/controller/ingress/test_ingress_ctl.py
 delete mode 100644 kuryr_kubernetes/tests/unit/platform/__init__.py
 delete mode 100644 kuryr_kubernetes/tests/unit/platform/ocp/__init__.py
 delete mode 100644 kuryr_kubernetes/tests/unit/platform/ocp/controller/__init__.py
 delete mode 100644 kuryr_kubernetes/tests/unit/platform/ocp/controller/handlers/__init__.py
 delete mode 100644 kuryr_kubernetes/tests/unit/platform/ocp/controller/handlers/test_route.py

diff --git a/.zuul.d/octavia.yaml b/.zuul.d/octavia.yaml
index 3d3663d74..eaf194d64 100644
--- a/.zuul.d/octavia.yaml
+++ b/.zuul.d/octavia.yaml
@@ -144,18 +144,6 @@
         KURYR_K8S_SERIAL_TESTS: True
       tempest_concurrency: 1
 
-
-- job:
-   name: kuryr-kubernetes-tempest-openshift-ingress
-   parent: kuryr-kubernetes-tempest-openshift
-   description: |
-     Kuryr-Kubernetes tempest job using ingress controller and OpenShift
-   vars:
-     devstack_localrc:
-       KURYR_ENABLE_INGRESS: true
-       KURYR_ENABLED_HANDLERS: vif,lb,lbaasspec,namespace,pod_label,policy,kuryrnetpolicy,ocproute,ingresslb
-   voting: false
-
 - job:
     name: kuryr-kubernetes-tempest-containerized-crio
     parent: kuryr-kubernetes-tempest-containerized
diff --git a/.zuul.d/project.yaml b/.zuul.d/project.yaml
index 579b648c5..9a274c1e4 100644
--- a/.zuul.d/project.yaml
+++ b/.zuul.d/project.yaml
@@ -36,7 +36,6 @@
         - kuryr-kubernetes-tempest-containerized-openshift-serial
         - kuryr-kubernetes-tempest-ovn
         - kuryr-kubernetes-tempest-openshift
-        - kuryr-kubernetes-tempest-openshift-ingress
         - kuryr-kubernetes-tempest-openshift-multi-vif
         - kuryr-kubernetes-tempest-multinode-ha
         - kuryr-kubernetes-tempest-containerized-crio
diff --git a/devstack/local.conf.openshift.sample b/devstack/local.conf.openshift.sample
index 1445ac0e0..90b1f989b 100644
--- a/devstack/local.conf.openshift.sample
+++ b/devstack/local.conf.openshift.sample
@@ -137,20 +137,6 @@ enable_service kuryr-kubernetes
 # Since Rocky release this is a default deployment configuration.
 enable_service kuryr-daemon
 
-# Kuryr enable L7 routing
-# ========================
-#
-# Uncomment the next line to enable the L7 Routing/Ingress controller
-#
-#KURYR_ENABLE_INGRESS=True
-
-# Kuryr L7 router/lb name
-# ========================
-#
-# Edit the next line to change L7 Router/LB name
-#
-#KURYR_L7_ROUTER_NAME=kuryr-l7-router
-
 # Containerized Kuryr
 # ===================
 #
diff --git a/devstack/plugin.sh b/devstack/plugin.sh
index 35a513b42..a56501179 100644
--- a/devstack/plugin.sh
+++ b/devstack/plugin.sh
@@ -915,60 +915,6 @@ function run_kuryr_daemon {
     run_process kuryr-daemon "$daemon_bin --config-file $KURYR_CONFIG" root root
 }
 
-function create_ingress_l7_router {
-
-    local lb_port_id
-    local lb_name
-    local project_id
-    local max_timeout
-    local lb_vip
-    local fake_svc_name
-    local l7_router_fip
-    local project_id
-    local lb_uuid
-
-    lb_name=${KURYR_L7_ROUTER_NAME}
-    max_timeout=1000
-    project_id=$(get_or_create_project \
-        "$KURYR_NEUTRON_DEFAULT_PROJECT" default)
-
-    create_load_balancer "$lb_name" "$KURYR_NEUTRON_DEFAULT_SERVICE_SUBNET" "$project_id"
-
-    wait_for_lb $lb_name $max_timeout
-
-    lb_port_id="$(get_loadbalancer_attribute "$lb_name" "vip_port_id")"
-
-    #allocate FIP and bind it to lb vip
-    l7_router_fip=$(openstack --os-cloud devstack-admin \
-           --os-region "$REGION_NAME" \
-           floating ip create --project "$project_id" \
-            --subnet "$KURYR_NEUTRON_DEFAULT_EXT_SVC_SUBNET" \
-             "$KURYR_NEUTRON_DEFAULT_EXT_SVC_NET" \
-            -f value -c floating_ip_address)
-
-    openstack  --os-cloud devstack-admin \
-            --os-region "$REGION_NAME" \
-            floating ip set --port "$lb_port_id" "$l7_router_fip"
-
-    lb_uuid="$(get_loadbalancer_attribute "$lb_name" "id")"
-    iniset "$KURYR_CONFIG" ingress l7_router_uuid "$lb_uuid"
-
-    #in case tempest enabled, update router's FIP in tempest.conf
-    if is_service_enabled tempest; then
-       iniset $TEMPEST_CONFIG kuryr_kubernetes ocp_router_fip "$l7_router_fip"
-    fi
-
-    if is_service_enabled octavia; then
-        echo -n "Octavia: no need to create fake k8s service for Ingress."
-    else
-        # keep fake an endpoint less k8s service to keep Kubernetes API server
-        # from allocating ingress LB vip
-        fake_svc_name='kuryr-svc-ingress'
-        echo -n "LBaaS: create fake k8s service: $fake_svc_name for Ingress."
-        lb_vip="$(get_loadbalancer_attribute "$lb_name" "vip_address")"
-        create_k8s_fake_service $fake_svc_name $lb_vip
-    fi
-}
 
 function configure_overcloud_vm_k8s_svc_sg {
     local dst_port
@@ -1184,12 +1130,6 @@ elif [[ "$1" == "stack" && "$2" == "test-config" ]]; then
     if is_service_enabled kuryr-kubernetes; then
         if is_service_enabled octavia; then
             create_k8s_api_service
-            #create Ingress L7 router if required
-            enable_ingress=$(trueorfalse False KURYR_ENABLE_INGRESS)
-
-            if [ "$enable_ingress" == "True" ]; then
-                create_ingress_l7_router
-            fi
         fi
 
         # FIXME(dulek): This is a very late phase to start Kuryr services.
diff --git a/devstack/settings b/devstack/settings
index 2e84b4aaa..2b0506e49 100644
--- a/devstack/settings
+++ b/devstack/settings
@@ -97,12 +97,6 @@ KURYR_CONTROLLER_HA_PORT=${KURYR_CONTROLLER_HA_PORT:-16401}
 KURYR_CONTROLLER_REPLICAS=${KURYR_CONTROLLER_REPLICAS:-1}
 KURYR_FORCE_IMAGE_BUILD=${KURYR_FORCE_IMAGE_BUILD:-False}
 
-# Kuryr ingress enable
-KURYR_ENABLE_INGRESS=${KURYR_ENABLE_INGRESS:-False}
-
-# Kuryr L7 router's name
-KURYR_L7_ROUTER_NAME=${KURYR_L7_ROUTER_NAME:-kuryr-l7-router}
-
 # Whether to use lower-constraints.txt when installing dependencies.
 KURYR_CONTAINERS_USE_LOWER_CONSTRAINTS=${KURYR_CONTAINERS_USE_LOWER_CONSTRAINTS:-False}
 
diff --git a/doc/source/devref/index.rst b/doc/source/devref/index.rst
index 1406fae03..b4c1e81d3 100644
--- a/doc/source/devref/index.rst
+++ b/doc/source/devref/index.rst
@@ -42,7 +42,6 @@ Design documents
    vif_handler_drivers_design
    health_manager
    kuryr_kubernetes_ingress_design
-   kuryr_kubernetes_ocp_route_design
    high_availability
    kuryr_kubernetes_versions
    port_crd_usage
diff --git a/doc/source/devref/kuryr_kubernetes_ocp_route_design.rst b/doc/source/devref/kuryr_kubernetes_ocp_route_design.rst
deleted file mode 100644
index 2ca80b9d7..000000000
--- a/doc/source/devref/kuryr_kubernetes_ocp_route_design.rst
+++ /dev/null
@@ -1,167 +0,0 @@
-..
-    This work is licensed under a Creative Commons Attribution 3.0 Unported
-    License.
-
-    http://creativecommons.org/licenses/by/3.0/legalcode
-
-    Convention for heading levels in Neutron devref:
-    =======  Heading 0 (reserved for the title in a document)
-    -------  Heading 1
-    ~~~~~~~  Heading 2
-    +++++++  Heading 3
-    '''''''  Heading 4
-    (Avoid deeper levels because they do not render well.)
-
-====================================================
-Kuryr Kubernetes Openshift Routes integration design
-====================================================
-
-Purpose
--------
-
-The purpose of this document is to present how Openshift Routes are supported
-by kuryr-kubernetes.
-
-
-Overview
---------
-
-`OpenShift Origin`_ is an open source cloud application development and
-hosting platform that automates the provisioning, management and scaling
-of applications.
-
-OpenShift Origin is a distribution of Kubernetes optimized for continuous
-application development and multi-tenancy deployment. OpenShift adds developer
-and operations-centric tools on top of Kubernetes to enable rapid application
-development, easy deployment and scaling, and long-term lifecycle maintenance.
-
-The `OpenShift Route`_ exposes a Service at a host name, like www.example.com,
-so that external clients can reach it by name.
-The Route is an Openshift resource that defines the rules you want to apply to
-incoming connections.
-The Openshift Routes concept was `introduced before Ingress`_ was supported by
-kubernetes, the Openshift Route matches the functionality of kubernetes Ingress.
-
-
-Proposed Solution
------------------
-
-The solution will rely on L7 router, Service/Endpoints handler and L7 router
-driver components described at kuryr-kubernetes Ingress integration design,
-where a new component - OCP-Route handler, will satisfy requests for Openshift
-Route resources.
-
-
-Controller Handlers impact:
----------------------------
-
-The controller handlers should be extended to support OCP-Route resource.
-
-
-The OCP-Route handler
-~~~~~~~~~~~~~~~~~~~~~
-
-The OCP-Route handler watches the apiserver's for updates to Openshift
-Route resources.
-The following scheme describes OCP-Route controller SW architecture:
-
-.. image:: ../../images/kuryr_k8s_ocp_route_ctrl_sw.svg
-   :alt: Ingress/OCP-Route controllers SW architecture
-   :align: center
-   :width: 100%
-
-Similar to Kubernetes Ingress, each OCP-Route object being translated to a L7
-policy in L7 router, and the rules on OCP-Route become L7 (URL) mapping rules
-in that L7 policy. The L7 policy is configured to forward the filtered traffic
-to LbaaS Pool. The LbaaS pool represents an Endpoints resource, and it's the
-Service/Endpoints handler responsibility to attach all its members to this
-pool. Since the Endpoints resource is not aware of changes in OCP-Route objects
-pointing to it, the OCP-Route handler should trigger this notification, the
-notification will be implemented using annotation of the relevant Endpoint
-resource.
-
-
-Use cases examples
-~~~~~~~~~~~~~~~~~~
-
-This section describes in details the following scenarios:
-
-A. Create OCP-Route, create Service/Endpoints.
-B. Create Service/Endpoints, create OCP-Route, delete OCP-Route.
-
-* Create OCP-Route, create Service/Endpoints:
-
-  * OCP-Route is created under namespace 'mynamespace'
-
-    * OCP-Route details :
-
-      .. code-block:: yaml
-
-         apiVersion: v1
-         kind: Route
-         metadata:
-           name: test
-           spec:
-             host: www.example.com
-             to:
-               kind: Service
-               name: s1
-
-    * Since it's the first route pointing to this Service, the OCP-Route
-      handler will create LbaaS pool (attached to L7 router)- named
-      'mynamespace_s1'.
-
-    * The OCP-Route handler will create L7 rule and L7 policy, the L7
-      policy direct it's filtered traffic towards 'mynamespace_s1' pool.
-
-  * Service/Endpoints is created under namespace 'mynamespace'
-
-    * name: s1
-
-    * The Service/Endpoints handler will create user loadbalancer
-
-    * The Service/Endpoints handler will check for pool named
-      'mynamespace_s1' and add its members to this pool.
-
-* Create Service/Endpoints, create OCP-Route, delete OCP-Route:
-
-  * Service/Endpoints is created under namespace 'mynamespace'
-
-    * name: s1
-
-    * The Service/Endpoints handler will create user loadbalancer
-    * Since no pool named 'mynamespace_s1' exist in L7 router,
-      Service will exit.
-
-  * OCP-Route is created with same details as described in above yaml file.
-
-    * Since it's the first route pointing to this Service, the OCP-Route
-      handler will create LbaaS pool (attached to L7 router) named
-      'mynamespace_s1'.
-    * The OCP-Route handler will create L7 rule and L7 policy, the L7 policy
-      configured to direct its filtered traffic towards 'mynamespace_s1' pool.
-
-    * The last step from OCP-Route handler will be to notify
-      (using annotation) s1 Endpoint.
-
-    * As a result to the OCP-Route notification, the Endpoint handler will
-      be called.
-      The Service/Endpoints handler will update the members information
-      attached to 'mynamespace_s1' pool.
-
-  * OCP-Route is deleted
-
-    * OCP-Route handler will first delete L7 rule and L7 policy.
-
-    * In case no other L7 policy is pointing 'mynamespace_s1' pool, the
-      OCP-Route handler will delete 'mynamespace_s1' pool's members and the pool
-      itself. The last step from Ingress handler will be to notify s1
-      Service/Endpoints.
-
-    * As a result to the OCP-Route handler notification, the Service/Endpoints
-      handler will set its internal state to 'no Ingress is pointing' state.
-
-
-.. _OpenShift Origin: https://www.openshift.org/
-.. _OpenShift Route: https://docs.openshift.com/enterprise/3.0/architecture/core_concepts/routes.html
-.. _introduced before Ingress: https://kubernetes.io/docs/concepts/Services-networking/ingress/
diff --git a/doc/source/installation/index.rst b/doc/source/installation/index.rst
index f368191bf..338d15f08 100644
--- a/doc/source/installation/index.rst
+++ b/doc/source/installation/index.rst
@@ -42,7 +42,6 @@ This section describes how you can install and configure kuryr-kubernetes
    testing_connectivity
    testing_nested_connectivity
    containerized
-   ocp_route
    multi_vif_with_npwg_spec
    sriov
    testing_udp_services
diff --git a/doc/source/installation/ocp_route.rst b/doc/source/installation/ocp_route.rst
deleted file mode 100644
index 63703645d..000000000
--- a/doc/source/installation/ocp_route.rst
+++ /dev/null
@@ -1,161 +0,0 @@
-===============================
-Enable OCP-Router functionality
-===============================
-
-To enable OCP-Router functionality we should set the following:
-
-- Setting L7 Router.
-- Configure Kuryr to support L7 Router and OCP-Route resources.
-
-
-Setting L7 Router
-------------------
-
-The L7 Router is the ingress point for the external traffic destined for
-services in the K8S/OCP cluster. The next steps are needed for setting the L7
-Router:
-
-#. Create LoadBalancer that will run the L7 loadbalancing:
-
-   .. code-block:: console
-
-      $ openstack loadbalancer create --name  kuryr-l7-router  --vip-subnet-id  k8s-service-subnet
-      +---------------------+--------------------------------------+
-      | Field               | Value                                |
-      +---------------------+--------------------------------------+
-      | admin_state_up      | True                                 |
-      | created_at          | 2018-06-28T06:34:15                  |
-      | description         |                                      |
-      | flavor              |                                      |
-      | id                  | 99f580e6-d894-442a-bc5f-4d14b41e10d2 |
-      | listeners           |                                      |
-      | name                | kuryr-l7-router                      |
-      | operating_status    | OFFLINE                              |
-      | pools               |                                      |
-      | project_id          | 24042703aba141b89217e098e495cea1     |
-      | provider            | amphora                              |
-      | provisioning_status | PENDING_CREATE                       |
-      | updated_at          | None                                 |
-      | vip_address         | 10.0.0.171                           |
-      | vip_network_id      | 65875d24-5a54-43fb-91a7-087e956deb1a |
-      | vip_port_id         | 42c6062a-644a-4004-a4a6-5a88bf596196 |
-      | vip_qos_policy_id   | None                                 |
-      | vip_subnet_id       | 01f21201-65a3-4bc5-a7a8-868ccf4f0edd |
-      +---------------------+--------------------------------------+
-      $
-
-#. Create floating IP address that should be accessible from external network:
-
-   .. code-block:: console
-
-      $ openstack floating ip create --subnet public-subnet  public
-      +---------------------+--------------------------------------+
-      | Field               | Value                                |
-      +---------------------+--------------------------------------+
-      | created_at          | 2018-06-28T06:31:36Z                 |
-      | description         |                                      |
-      | dns_domain          | None                                 |
-      | dns_name            | None                                 |
-      | fixed_ip_address    | None                                 |
-      | floating_ip_address | 172.24.4.3                           |
-      | floating_network_id | 3371c2ba-edb5-45f2-a589-d35080177311 |
-      | id                  | c971f6d3-ba63-4318-a9e7-43cbf85437c2 |
-      | name                | 172.24.4.3                           |
-      | port_details        | None                                 |
-      | port_id             | None                                 |
-      | project_id          | 24042703aba141b89217e098e495cea1     |
-      | qos_policy_id       | None                                 |
-      | revision_number     | 0                                    |
-      | router_id           | None                                 |
-      | status              | DOWN                                 |
-      | subnet_id           | 939eeb1f-20b8-4185-a6b1-6477fbe73409 |
-      | tags                | []                                   |
-      | updated_at          | 2018-06-28T06:31:36Z                 |
-      +---------------------+--------------------------------------+
-      $
-
-#. Bind the floating IP to LB vip:
-
-   .. code-block:: console
-
-      [stack@gddggd devstack]$ openstack floating ip set --port 42c6062a-644a-4004-a4a6-5a88bf596196  172.24.4.3
-
-
-Configure Kuryr to support L7 Router and OCP-Route resources
-------------------------------------------------------------
-
-#. Configure the L7 Router by adding the LB UUID at kuryr.conf:
-
-   .. code-block:: ini
-
-      [ingress]
-      l7_router_uuid = 99f580e6-d894-442a-bc5f-4d14b41e10d2
-
-#. Enable the ocp-route and k8s-endpoint handlers. For that you need to add
-   this handlers to the enabled handlers list at kuryr.conf (details on how to
-   edit this for containerized deployment can be found at
-   :doc:`./devstack/containerized`):
-
-   .. code-block:: ini
-
-      [kubernetes]
-      enabled_handlers=vif,lb,lbaasspec,ocproute,ingresslb
-
-Note: you need to restart the kuryr controller after applying the above
-detailed steps. For devstack non-containerized deployments:
-
-.. code-block:: console
-
-   $ sudo systemctl restart devstack@kuryr-kubernetes.service
-
-And for containerized deployments:
-
-.. code-block:: console
-
-   $ kubectl -n kube-system get pod | grep kuryr-controller
-   $ kubectl -n kube-system delete pod KURYR_CONTROLLER_POD_NAME
-
-For directly enabling both L7 router and OCP-Route handlers when deploying
-with devstack, you just need to add the following at local.conf file:
-
-.. code-block:: bash
-
-   KURYR_ENABLE_INGRESS=True
-   KURYR_ENABLED_HANDLERS=vif,lb,lbaasspec,ocproute,ingresslb
-
-
-Testing OCP-Route functionality
--------------------------------
-
-#. Create a service:
-
-   .. code-block:: console
-
-      $ oc run --image=celebdor/kuryr-demo  kuryr-demo
-      $ oc scale dc/kuryr-demo  --replicas=2
-      $ oc expose dc/kuryr-demo --port 80 --target-port 8080
-
-#. Create a Route object pointing to above service (kuryr-demo):
-
-   .. code-block:: console
-
-      $  cat >> route.yaml << EOF
-      > apiVersion: v1
-      > kind: Route
-      > metadata:
-      >  name: testroute
-      > spec:
-      >  host: www.firstroute.com
-      >  to:
-      >    kind: Service
-      >    name: kuryr-demo
-      > EOF
-      $ oc create -f route.yaml
-
-#. Curl L7 router's FIP using specified hostname:
-
-   .. code-block:: console
-
-      $  curl  --header 'Host: www.firstroute.com'  172.24.4.3
-         kuryr-demo-1-gzgj2: HELLO, I AM ALIVE!!!
-      $
diff --git a/kuryr_kubernetes/config.py b/kuryr_kubernetes/config.py
index 790c62786..c8a59135b 100644
--- a/kuryr_kubernetes/config.py
+++ b/kuryr_kubernetes/config.py
@@ -263,11 +263,6 @@ cache_defaults = [
                default="dogpile.cache.memory"),
 ]
 
-ingress = [
-    cfg.StrOpt('l7_router_uuid',
-               help=_("UUID of the L7 Router")),
-]
-
 nested_vif_driver_opts = [
     cfg.StrOpt('worker_nodes_subnet',
                help=_("Neutron subnet ID for k8s worker node vms."),
@@ -325,7 +320,6 @@ CONF.register_opts(k8s_opts, group='kubernetes')
 CONF.register_opts(neutron_defaults, group='neutron_defaults')
 CONF.register_opts(octavia_defaults, group='octavia_defaults')
 CONF.register_opts(cache_defaults, group='cache_defaults')
-CONF.register_opts(ingress, group='ingress')
 CONF.register_opts(nested_vif_driver_opts, group='pod_vif_nested')
 CONF.register_opts(sriov_opts, group='sriov')
 
diff --git a/kuryr_kubernetes/constants.py b/kuryr_kubernetes/constants.py
index 1e6cbf932..ea4a5d2ba 100644
--- a/kuryr_kubernetes/constants.py
+++ b/kuryr_kubernetes/constants.py
@@ -43,10 +43,6 @@ K8S_ANNOTATION_LBAAS_SPEC = K8S_ANNOTATION_PREFIX + '-lbaas-spec'
 K8S_ANNOTATION_LBAAS_STATE = K8S_ANNOTATION_PREFIX + '-lbaas-state'
 K8S_ANNOTATION_NET_CRD = K8S_ANNOTATION_PREFIX + '-net-crd'
 K8S_ANNOTATION_NETPOLICY_CRD = K8S_ANNOTATION_PREFIX + '-netpolicy-crd'
-K8S_ANNOTATION_LBAAS_RT_STATE = K8S_ANNOTATION_PREFIX + '-lbaas-route-state'
-K8S_ANNOTATION_LBAAS_RT_NOTIF = K8S_ANNOTATION_PREFIX + '-lbaas-route-notif'
-K8S_ANNOTATION_ROUTE_STATE = K8S_ANNOTATION_PREFIX + '-route-state'
-K8S_ANNOTATION_ROUTE_SPEC = K8S_ANNOTATION_PREFIX + '-route-spec'
 
 K8S_ANNOTATION_NPWG_PREFIX = 'k8s.v1.cni.cncf.io'
 K8S_ANNOTATION_NPWG_NETWORK = K8S_ANNOTATION_NPWG_PREFIX + '/networks'
@@ -65,7 +61,6 @@ CNI_EXCEPTION_CODE = 100
 CNI_TIMEOUT_CODE = 200
 
 KURYR_PORT_NAME = 'kuryr-pool-port'
-KURYR_L7_ROUTER_HTTP_PORT = '80'
 KURYR_VIF_TYPE_SRIOV = 'sriov'
 
 OCTAVIA_L2_MEMBER_MODE = "L2"
diff --git a/kuryr_kubernetes/controller/drivers/base.py b/kuryr_kubernetes/controller/drivers/base.py
index b287ebb33..c0e752992 100644
--- a/kuryr_kubernetes/controller/drivers/base.py
+++ b/kuryr_kubernetes/controller/drivers/base.py
@@ -631,91 +631,6 @@ class LBaaSDriver(DriverBase):
         """
         raise NotImplementedError()
 
-    @abc.abstractmethod
-    def get_lb_by_uuid(self, lb_uuid):
-        """Get loadbalancer by loadbalancer uuid.
-
-        :param lb_uuid: Loadbalancer uuid
-        """
-        raise NotImplementedError()
-
-    @abc.abstractmethod
-    def get_pool_by_name(self, pool_name, project_id):
-        """Get pool by pool's name.
-
-        :param pool_name: the pool name
-        :param project_id: project id
-        """
-        raise NotImplementedError()
-
-    @abc.abstractmethod
-    def ensure_l7_policy(self, namespace, route_name, loadbalancer,
-                         pool, listener_id):
-        """Get or create L7 policy.
-
-        :param namespace: ocp-route/k8s-ingress namespace
-        :param route_name: ocp-route/k8s-ingress name
-        :param loadbalancer: `LBaaSLoadBalancer` object
-        :param pool: L7 policy's target pool
-        :param listener_id: ID of listener to attach L7policy to
-
-        """
-        raise NotImplementedError()
-
-    @abc.abstractmethod
-    def release_l7_policy(self, loadbalancer, l7_policy):
-        """Release l7policy.
-
-        :param loadbalancer: `LBaaSLoadBalancer` object
-        :param l7_policy: `LBaaSL7Policy` object
-
-        """
-        raise NotImplementedError()
-
-    @abc.abstractmethod
-    def ensure_l7_rule(self, loadbalancer, l7_policy, compare_type,
-                       type, value):
-        """Get or create L7 rule.
-
-        :param loadbalancer: `LBaaSLoadBalancer` object
-        :param l7_policy: `LBaaSL7Policy` object
-        :param compare_type: comparison type for the L7 rule.
-        :param type: the L7 rule type
-        :param value:the value to use for the comparison.
-
-        """
-        raise NotImplementedError()
-
-    @abc.abstractmethod
-    def release_l7_rule(self, loadbalancer, l7_rule):
-        """Release L7 rule.
-
-        :param loadbalancer: `LBaaSLoadBalancer` object
-        :param l7_rule: `LBaaSL7Rule` object
-
-        """
-        raise NotImplementedError()
-
-    @abc.abstractmethod
-    def update_l7_rule(self, l7_rule, new_value):
-        """Update L7 rule value.
-
-        :param l7_rule: `LBaaSL7Rule` object
-        :param new_value: rule's new value
-
-        """
-        raise NotImplementedError()
-
-    @abc.abstractmethod
-    def is_pool_used_by_other_l7policies(self, l7policy, pool):
-        """Checks if pool used by other L7policy.
-
-        :param l7policy: `LBaaSL7Policy` object
-        :param pool: `LBaaSPool` object
-
-        """
-        raise NotImplementedError()
-
     @abc.abstractmethod
     def update_lbaas_sg(self, service, sgs):
         """Update security group rules associated to the loadbalancer
diff --git a/kuryr_kubernetes/controller/drivers/lbaasv2.py b/kuryr_kubernetes/controller/drivers/lbaasv2.py
index 9044fb84a..aa13ae994 100644
--- a/kuryr_kubernetes/controller/drivers/lbaasv2.py
+++ b/kuryr_kubernetes/controller/drivers/lbaasv2.py
@@ -20,8 +20,6 @@ import time
 import requests
 
 from openstack import exceptions as os_exc
-from openstack.load_balancer.v2 import l7_policy as o_l7p
-from openstack.load_balancer.v2 import l7_rule as o_l7r
 from openstack.load_balancer.v2 import listener as o_lis
 from openstack.load_balancer.v2 import load_balancer as o_lb
 from openstack.load_balancer.v2 import member as o_mem
@@ -43,7 +41,6 @@ CONF = cfg.CONF
 LOG = logging.getLogger(__name__)
 
 _ACTIVATION_TIMEOUT = CONF.neutron_defaults.lbaas_activation_timeout
-_L7_POLICY_ACT_REDIRECT_TO_POOL = 'REDIRECT_TO_POOL'
 # NOTE(yboaron):Prior to sending create request to Octavia, LBaaS driver
 # verifies that LB is in a stable state by polling LB's provisioning_status
 # using backoff timer.
@@ -900,152 +897,6 @@ class LBaaSv2Driver(base.LBaaSDriver):
 
         return None
 
-    def get_lb_by_uuid(self, lb_uuid):
-        lbaas = clients.get_loadbalancer_client()
-        try:
-            response = lbaas.get_load_balancer(lb_uuid)
-        except os_exc.NotFoundException:
-            LOG.debug("Couldn't find loadbalancer with uuid=%s", lb_uuid)
-            return None
-
-        return obj_lbaas.LBaaSLoadBalancer(
-            id=response.id,
-            port_id=response.vip_port_id,
-            name=response.name,
-            project_id=response.project_id,
-            subnet_id=response.vip_subnet_id,
-            ip=response.vip_address,
-            security_groups=None,
-            provider=response.provider)
-
-    def get_pool_by_name(self, pool_name, project_id):
-        lbaas = clients.get_loadbalancer_client()
-
-        # NOTE(yboaron): pool_name should be constructed using
-        # get_loadbalancer_pool_name function, which means that pool's name
-        # is unique
-
-        pools = lbaas.pools(project_id=project_id)
-        for entry in pools:
-            if not entry:
-                continue
-            if entry.name == pool_name:
-                listener_id = (entry.listeners[0].id if
-                               entry.listeners else None)
-                return obj_lbaas.LBaaSPool(
-                    name=entry.name, project_id=entry.project_id,
-                    loadbalancer_id=entry.loadbalancers[0].id,
-                    listener_id=listener_id,
-                    protocol=entry.protocol, id=entry.id)
-        return None
-
-    def ensure_l7_policy(self, namespace, route_name,
-                         loadbalancer, pool,
-                         listener_id):
-        name = namespace + route_name
-        l7_policy = obj_lbaas.LBaaSL7Policy(name=name,
-                                            project_id=pool.project_id,
-                                            listener_id=listener_id,
-                                            redirect_pool_id=pool.id)
-
-        return self._ensure_provisioned(
-            loadbalancer, l7_policy, self._create_l7_policy,
-            self._find_l7_policy)
-
-    def release_l7_policy(self, loadbalancer, l7_policy):
-        lbaas = clients.get_loadbalancer_client()
-        self._release(
-            loadbalancer, l7_policy, lbaas.delete_l7_policy,
-            l7_policy.id)
-
-    def _create_l7_policy(self, l7_policy):
-        request = {
-            'action': _L7_POLICY_ACT_REDIRECT_TO_POOL,
-            'listener_id': l7_policy.listener_id,
-            'name': l7_policy.name,
-            'project_id': l7_policy.project_id,
-            'redirect_pool_id': l7_policy.redirect_pool_id,
-        }
-        self.add_tags('l7policy', request)
-        response = self._post_lb_resource(o_l7p.L7Policy, request)
-        l7_policy.id = response['id']
-        return l7_policy
-
-    def _find_l7_policy(self, l7_policy):
-        lbaas = clients.get_loadbalancer_client()
-        response = lbaas.l7_policies(
-            name=l7_policy.name,
-            project_id=l7_policy.project_id,
-            redirect_pool_id=l7_policy.redirect_pool_id,
-            listener_id=l7_policy.listener_id)
-        try:
-            l7_policy.id = next(response).id
-        except (KeyError, StopIteration):
-            return None
-        return l7_policy
-
-    def ensure_l7_rule(self, loadbalancer, l7_policy, compare_type,
-                       type, value):
-
-        l7_rule = obj_lbaas.LBaaSL7Rule(
-            compare_type=compare_type, l7policy_id=l7_policy.id,
-            type=type, value=value)
-        return self._ensure_provisioned(
-            loadbalancer, l7_rule, self._create_l7_rule,
-            self._find_l7_rule)
-
-    def _create_l7_rule(self, l7_rule):
-        request = {
-            'compare_type': l7_rule.compare_type,
-            'type': l7_rule.type,
-            'value': l7_rule.value
-        }
-        self.add_tags('rule', request)
-        response = self._post_lb_resource(o_l7r.L7Rule, request,
-                                          l7policy_id=l7_rule.l7policy_id)
-        l7_rule.id = response['id']
-        return l7_rule
-
-    def _find_l7_rule(self, l7_rule):
-        lbaas = clients.get_loadbalancer_client()
-        response = lbaas.l7_rules(
-            l7_rule.l7policy_id,
-            type=l7_rule.type,
-            value=l7_rule.value,
-            compare_type=l7_rule.compare_type)
-        try:
-            l7_rule.id = next(response).id
-        except (KeyError, StopIteration):
-            return None
-        return l7_rule
-
-    def release_l7_rule(self, loadbalancer, l7_rule):
-        lbaas = clients.get_loadbalancer_client()
-        self._release(
-            loadbalancer, l7_rule, lbaas.delete_l7_rule,
-            l7_rule.id, l7_rule.l7policy_id)
-
-    def update_l7_rule(self, l7_rule, new_value):
-        lbaas = clients.get_loadbalancer_client()
-        try:
-            lbaas.update_l7_rule(
-                l7_rule.id, l7_rule.l7policy_id,
-                value=new_value)
-        except os_exc.SDKException:
-            LOG.exception("Failed to update l7_rule- id=%s ", l7_rule.id)
-            raise
-
-    def is_pool_used_by_other_l7policies(self, l7policy, pool):
-        lbaas = clients.get_loadbalancer_client()
-        l7policy_list = lbaas.l7_policies(project_id=l7policy.project_id)
-        for entry in l7policy_list:
-            if not entry:
-                continue
-            if (entry.redirect_pool_id == pool.id and
-                    entry.id != l7policy.id):
-                return True
-        return False
-
     def update_lbaas_sg(self, service, sgs):
         LOG.debug('Setting SG for LBaaS VIP port')
 
diff --git a/kuryr_kubernetes/controller/handlers/ingress_lbaas.py b/kuryr_kubernetes/controller/handlers/ingress_lbaas.py
deleted file mode 100644
index 4c45b42de..000000000
--- a/kuryr_kubernetes/controller/handlers/ingress_lbaas.py
+++ /dev/null
@@ -1,213 +0,0 @@
-# Copyright (c) 2018 RedHat, Inc.
-# All Rights Reserved.
-#
-#    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.
-
-from oslo_log import log as logging
-from oslo_serialization import jsonutils
-
-from kuryr_kubernetes import clients
-from kuryr_kubernetes import config
-from kuryr_kubernetes import constants as k_const
-from kuryr_kubernetes.controller.drivers import base as drv_base
-from kuryr_kubernetes.controller.handlers import lbaas as h_lbaas
-from kuryr_kubernetes.controller.ingress import ingress_ctl
-from kuryr_kubernetes.objects import lbaas as obj_lbaas
-from kuryr_kubernetes import utils
-
-LOG = logging.getLogger(__name__)
-
-
-class IngressLoadBalancerHandler(h_lbaas.LoadBalancerHandler):
-    """IngressLoadBalancerHandler handles K8s Endpoints events.
-
-    IngressLoadBalancerHandler handles K8s Endpoints events and tracks
-    changes in LBaaSServiceSpec to update Ingress Controller
-    L7 router accordingly.
-    """
-
-    OBJECT_KIND = k_const.K8S_OBJ_ENDPOINTS
-    OBJECT_WATCH_PATH = "%s/%s" % (k_const.K8S_API_BASE, "endpoints")
-
-    def __init__(self):
-        super(IngressLoadBalancerHandler, self).__init__()
-        self._drv_lbaas = drv_base.LBaaSDriver.get_instance()
-        self._l7_router = None
-
-    def _should_ignore(self, endpoints, lbaas_spec):
-        return not(lbaas_spec and
-                   self._has_pods(endpoints))
-
-    def on_present(self, endpoints):
-        if not self._l7_router:
-            ing_ctl = ingress_ctl.IngressCtrlr.get_instance()
-            self._l7_router, listener = ing_ctl.get_router_and_listener()
-            if not self._l7_router:
-                LOG.info("No L7 router found - do nothing")
-                return
-
-        lbaas_spec = utils.get_lbaas_spec(endpoints)
-        if self._should_ignore(endpoints, lbaas_spec):
-            return
-
-        pool_name = self._drv_lbaas.get_loadbalancer_pool_name(
-            self._l7_router, endpoints['metadata']['namespace'],
-            endpoints['metadata']['name'])
-        pool = self._drv_lbaas.get_pool_by_name(pool_name,
-                                                self._l7_router.project_id)
-        if not pool:
-            if self._get_lbaas_route_state(endpoints):
-                self._set_lbaas_route_state(endpoints, None)
-            LOG.debug("L7 routing: no route defined for service "
-                      ":%s - do nothing", endpoints['metadata']['name'])
-        else:
-            # pool was found in L7 router LB ,verify that members are up2date
-            lbaas_route_state = self._get_lbaas_route_state(endpoints)
-            if not lbaas_route_state:
-                lbaas_route_state = obj_lbaas.LBaaSRouteState()
-            lbaas_route_state.pool = pool
-            if self._sync_lbaas_route_members(endpoints,
-                                              lbaas_route_state, lbaas_spec):
-                self._set_lbaas_route_state(endpoints, lbaas_route_state)
-        self._clear_route_notification(endpoints)
-
-    def on_deleted(self, endpoints):
-        if not self._l7_router:
-            LOG.info("No L7 router found - do nothing")
-            return
-
-        lbaas_route_state = self._get_lbaas_route_state(endpoints)
-        if not lbaas_route_state:
-            return
-        self._remove_unused_route_members(endpoints, lbaas_route_state,
-                                          obj_lbaas.LBaaSServiceSpec())
-
-    def _sync_lbaas_route_members(self, endpoints,
-                                  lbaas_route_state, lbaas_spec):
-        changed = False
-        if self._remove_unused_route_members(
-                endpoints, lbaas_route_state, lbaas_spec):
-            changed = True
-
-        if self._add_new_route_members(endpoints, lbaas_route_state):
-            changed = True
-
-        return changed
-
-    def _add_new_route_members(self, endpoints, lbaas_route_state):
-        changed = False
-
-        current_targets = {(str(m.ip), m.port)
-                           for m in lbaas_route_state.members}
-
-        for subset in endpoints.get('subsets', []):
-            subset_ports = subset.get('ports', [])
-            for subset_address in subset.get('addresses', []):
-                try:
-                    target_ip = subset_address['ip']
-                    target_ref = subset_address['targetRef']
-                    if target_ref['kind'] != k_const.K8S_OBJ_POD:
-                        continue
-                except KeyError:
-                    continue
-                for subset_port in subset_ports:
-                    target_port = subset_port['port']
-                    if (target_ip, target_port) in current_targets:
-                        continue
-
-                    # TODO(apuimedo): Do not pass subnet_id at all when in
-                    # L3 mode once old neutron-lbaasv2 is not supported, as
-                    # octavia does not require it
-                    if (config.CONF.octavia_defaults.member_mode ==
-                            k_const.OCTAVIA_L2_MEMBER_MODE):
-                        member_subnet_id = self._get_pod_subnet(target_ref,
-                                                                target_ip)
-                    else:
-                        # We use the service subnet id so that the connectivity
-                        # from VIP to pods happens in layer 3 mode, i.e.,
-                        # routed.
-                        member_subnet_id = self._l7_router.subnet_id
-                    member = self._drv_lbaas.ensure_member(
-                        loadbalancer=self._l7_router,
-                        pool=lbaas_route_state.pool,
-                        subnet_id=member_subnet_id,
-                        ip=target_ip,
-                        port=target_port,
-                        target_ref_namespace=target_ref['namespace'],
-                        target_ref_name=target_ref['name'])
-
-                    lbaas_route_state.members.append(member)
-                    changed = True
-
-        return changed
-
-    def _remove_unused_route_members(
-            self, endpoints, lbaas_route_state, lbaas_spec):
-        spec_port_names = {p.name for p in lbaas_spec.ports}
-        current_targets = {(a['ip'], p['port'])
-                           for s in endpoints['subsets']
-                           for a in s['addresses']
-                           for p in s['ports']
-                           if p.get('name') in spec_port_names}
-        removed_ids = set()
-        for member in lbaas_route_state.members:
-            if (str(member.ip), member.port) in current_targets:
-                continue
-            self._drv_lbaas.release_member(self._l7_router, member)
-            removed_ids.add(member.id)
-        if removed_ids:
-            lbaas_route_state.members = [
-                m for m in lbaas_route_state.members
-                if m.id not in removed_ids]
-        return bool(removed_ids)
-
-    def _set_lbaas_route_state(self, endpoints, route_state):
-        if route_state is None:
-            LOG.debug("Removing LBaaSRouteState annotation: %r", route_state)
-            annotation = None
-        else:
-            route_state.obj_reset_changes(recursive=True)
-            LOG.debug("Setting LBaaSRouteState annotation: %r", route_state)
-            annotation = jsonutils.dumps(route_state.obj_to_primitive(),
-                                         sort_keys=True)
-        k8s = clients.get_kubernetes_client()
-        k8s.annotate(endpoints['metadata']['selfLink'],
-                     {k_const.K8S_ANNOTATION_LBAAS_RT_STATE: annotation},
-                     resource_version=endpoints['metadata']['resourceVersion'])
-
-    def _get_lbaas_route_state(self, endpoints):
-        try:
-            annotations = endpoints['metadata']['annotations']
-            annotation = annotations[k_const.K8S_ANNOTATION_LBAAS_RT_STATE]
-        except KeyError:
-            return None
-        obj_dict = jsonutils.loads(annotation)
-        obj = obj_lbaas.LBaaSRouteState.obj_from_primitive(obj_dict)
-        LOG.debug("Got LBaaSRouteState from annotation: %r", obj)
-        return obj
-
-    def _clear_route_notification(self, endpoints):
-        try:
-            annotations = endpoints['metadata']['annotations']
-            annotation = annotations[
-                k_const.K8S_ANNOTATION_LBAAS_RT_NOTIF]
-        except KeyError:
-            return
-
-        LOG.debug("Removing LBaaSRouteNotifier annotation")
-        annotation = None
-        k8s = clients.get_kubernetes_client()
-        k8s.annotate(
-            endpoints['metadata']['selfLink'],
-            {k_const.K8S_ANNOTATION_LBAAS_RT_NOTIF: annotation},
-            resource_version=endpoints['metadata']['resourceVersion'])
diff --git a/kuryr_kubernetes/controller/ingress/__init__.py b/kuryr_kubernetes/controller/ingress/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/kuryr_kubernetes/controller/ingress/ingress_ctl.py b/kuryr_kubernetes/controller/ingress/ingress_ctl.py
deleted file mode 100644
index 67ad7abe4..000000000
--- a/kuryr_kubernetes/controller/ingress/ingress_ctl.py
+++ /dev/null
@@ -1,159 +0,0 @@
-# Copyright (c) 2018 RedHat, Inc.
-# All Rights Reserved.
-#
-#    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.
-import time
-
-
-from kuryr_kubernetes import config
-from kuryr_kubernetes import constants as k_const
-from kuryr_kubernetes.controller.drivers import base as drv_base
-from kuryr_kubernetes import exceptions
-from oslo_log import log as logging
-
-
-_OCP_ROUTE_HANDLER = 'ocproute'
-_INGRESS_LB_HANDLER = 'ingresslb'
-_ROUTER_POLL_INTERVAL = 10
-# NOTE(yboaron): LoadBalancers creation at Devstack is very slow, could take
-# up to 20 minutes
-_ROUTER_MANUAL_CREATION_TIMEOUT = 1200
-
-LOG = logging.getLogger(__name__)
-
-
-class L7Router(object):
-    """L7Router is responsible for create/verify L7 LoadBalancer entity."""
-
-    def __init__(self, router_uuid):
-
-        # Note(yboaron) the LBaaS driver is used as the L7 router driver
-        self._drv_l7_router = drv_base.LBaaSDriver.get_instance()
-        self._l7_router_uuid = router_uuid
-        self._l7_router_listeners = None
-        self._router_lb = None
-
-    def ensure_router(self):
-        # retrieve router details
-        self._router_lb = self._drv_l7_router.get_lb_by_uuid(
-            self._l7_router_uuid)
-        if not self._router_lb:
-            LOG.error("Failed to retrieve L7_Router (UUID=%s)",
-                      self._l7_router_uuid)
-            raise exceptions.IngressControllerFailure
-        # verify that loadbalancer is active
-        try:
-            self._drv_l7_router._wait_for_provisioning(
-                self._router_lb, _ROUTER_MANUAL_CREATION_TIMEOUT)
-        except exceptions.ResourceNotReady as e:
-            LOG.error("Timed out waiting for L7 router to appear in "
-                      "ACTIVE state: %s.", e)
-            raise exceptions.IngressControllerFailure
-
-        LOG.info("Ingress controller - "
-                 "retrieve '%s' router details", self._router_lb)
-
-        # TODO(yboaron) add support for HTTPS listener
-        # create/verify listeners
-        self._l7_router_listeners = {}
-        listener = self._drv_l7_router.ensure_listener(
-            self._router_lb, 'HTTP', k_const.KURYR_L7_ROUTER_HTTP_PORT,
-            service_type=None)
-        LOG.info("Ingress controller - "
-                 "retrieve HTTP listener details '%s'", listener)
-
-        self._l7_router_listeners[k_const.KURYR_L7_ROUTER_HTTP_PORT] = listener
-
-    def get_router(self):
-        return self._router_lb
-
-    def get_router_listeners(self):
-        return self._l7_router_listeners
-
-
-class IngressCtrlr(object):
-    """IngressCtrlr is responsible for the Ingress controller capability
-
-    The Ingress controller should create or verify (in case router pre-created
-    by admin) L7 router/LB - the entity that will do the actual L7 routing.
-    In addition the Ingress controller should provide the L7 router details
-    to Ingress/ocp-route handlers and Endpoint handler.
-    Both Ingress/ocp-route handlers and Endpoint handler should update the
-    L7 rules of the L7 router.
-
-    """
-    instances = {}
-
-    @classmethod
-    def get_instance(cls):
-        if cls not in IngressCtrlr.instances:
-            IngressCtrlr.instances[cls] = cls()
-        return IngressCtrlr.instances[cls]
-
-    def __init__(self):
-        self._l7_router = None
-        self._status = 'DOWN'
-
-    def _start_operation_impl(self):
-        LOG.info('Ingress controller is enabled')
-        self._l7_router = L7Router(config.CONF.ingress.l7_router_uuid)
-        try:
-            self._status = 'IN_PROGRESS'
-            self._l7_router.ensure_router()
-        except Exception as e:
-            self._status = 'DOWN'
-            LOG.error("Ingress controller - failed to get L7 router (%s)", e)
-            return
-        self._status = 'ACTIVE'
-        LOG.info("Ingress controller - ACTIVE")
-
-    def _is_ingress_controller_disabled(self):
-        # Note(yboaron) To enable the ingress controller admin should :
-        # A. Set the L7-router/LB UUID in kuryr.conf
-        # and
-        # B. Add K8S-ingress and OCP-route handlers to pluggable
-        # handlers list
-        configured_handlers = config.CONF.kubernetes.enabled_handlers
-        return not (any(handler in configured_handlers for handler in
-                        (_OCP_ROUTE_HANDLER, _INGRESS_LB_HANDLER)) and
-                    config.CONF.ingress.l7_router_uuid)
-
-    def start_operation(self):
-        if self._is_ingress_controller_disabled():
-            LOG.info('To enable Ingress controller either OCP-Route or '
-                     'Ingress-LB  handlers should be enabled, and '
-                     'l7_router_uuid should be specified')
-            return
-        self._start_operation_impl()
-
-    def get_router_and_listener(self):
-        """This function returns L7 router and Listeners details,
-
-        The caller to this function will be blocked until Ingress controller
-        status is in stable (not in progress), the consumers of this function
-        will be the OCP-Route and K8S-Ingress handlers
-        """
-        get_router_threshold = (time.time() + _ROUTER_MANUAL_CREATION_TIMEOUT)
-        while True:
-            if self._status != 'IN_PROGRESS':
-                if self._l7_router:
-                    return (self._l7_router.get_router(),
-                            self._l7_router.get_router_listeners())
-                else:
-                    return None, None
-            if time.time() > get_router_threshold:
-                LOG.error("Ingress controller: get router - timeout expired")
-                return None, None
-            LOG.debug("Ingress controller - waiting till status is "
-                      "!= IN_PROGRESS")
-            time.sleep(_ROUTER_POLL_INTERVAL)
diff --git a/kuryr_kubernetes/controller/service.py b/kuryr_kubernetes/controller/service.py
index e5bbcfb2c..7c166c769 100644
--- a/kuryr_kubernetes/controller/service.py
+++ b/kuryr_kubernetes/controller/service.py
@@ -28,7 +28,6 @@ from kuryr_kubernetes import clients
 from kuryr_kubernetes import config
 from kuryr_kubernetes.controller.drivers import base as drivers
 from kuryr_kubernetes.controller.handlers import pipeline as h_pipeline
-from kuryr_kubernetes.controller.ingress import ingress_ctl
 from kuryr_kubernetes.controller.managers import health
 from kuryr_kubernetes import objects
 from kuryr_kubernetes import utils
@@ -102,8 +101,6 @@ class KuryrK8sService(six.with_metaclass(KuryrK8sServiceMeta,
 
     def start(self):
         LOG.info("Service '%s' starting", self.__class__.__name__)
-        ingress_ctrl = ingress_ctl.IngressCtrlr.get_instance()
-        ingress_ctrl.start_operation()
         super(KuryrK8sService, self).start()
 
         if not CONF.kubernetes.controller_ha:
diff --git a/kuryr_kubernetes/exceptions.py b/kuryr_kubernetes/exceptions.py
index ec74be0ce..b2fa1d04b 100644
--- a/kuryr_kubernetes/exceptions.py
+++ b/kuryr_kubernetes/exceptions.py
@@ -76,11 +76,3 @@ class MultiPodDriverPoolConfigurationNotSupported(Exception):
     2. One of the pod drivers is not supported
     3. One of the pod drivers is not supported by its selected pool driver
     """
-
-
-class IngressControllerFailure(Exception):
-    """Exception represents a failure in the Ingress Controller functionality
-
-    This exception is raised when we fail to activate properly the Ingress
-    Controller.
-    """
diff --git a/kuryr_kubernetes/objects/lbaas.py b/kuryr_kubernetes/objects/lbaas.py
index b0c971327..8aef0ec1a 100644
--- a/kuryr_kubernetes/objects/lbaas.py
+++ b/kuryr_kubernetes/objects/lbaas.py
@@ -146,61 +146,3 @@ class LBaaSServiceSpec(k_obj.KuryrK8sObjectBase):
         'type': obj_fields.StringField(nullable=True, default=None),
         'lb_ip': obj_fields.IPAddressField(nullable=True, default=None),
     }
-
-
-@obj_base.VersionedObjectRegistry.register
-class LBaaSL7Policy(k_obj.KuryrK8sObjectBase):
-    VERSION = '1.0'
-
-    fields = {
-        'id': obj_fields.UUIDField(),
-        'name': obj_fields.StringField(nullable=True),
-        'listener_id': obj_fields.UUIDField(),
-        'redirect_pool_id': obj_fields.UUIDField(),
-        'project_id': obj_fields.StringField(),
-    }
-
-
-@obj_base.VersionedObjectRegistry.register
-class LBaaSL7Rule(k_obj.KuryrK8sObjectBase):
-    VERSION = '1.0'
-
-    fields = {
-        'id': obj_fields.UUIDField(),
-        'compare_type': obj_fields.StringField(nullable=True),
-        'l7policy_id': obj_fields.UUIDField(),
-        'type': obj_fields.StringField(nullable=True),
-        'value': obj_fields.StringField(nullable=True),
-    }
-
-
-@obj_base.VersionedObjectRegistry.register
-class LBaaSRouteState(k_obj.KuryrK8sObjectBase):
-    VERSION = '1.0'
-
-    fields = {
-        'members': obj_fields.ListOfObjectsField(LBaaSMember.__name__,
-                                                 default=[]),
-        'pool': obj_fields.ObjectField(LBaaSPool.__name__,
-                                       nullable=True, default=None),
-    }
-
-
-@obj_base.VersionedObjectRegistry.register
-class LBaaSRouteNotifEntry(k_obj.KuryrK8sObjectBase):
-    VERSION = '1.0'
-
-    fields = {
-        'route_id': obj_fields.UUIDField(),
-        'msg': obj_fields.StringField(),
-    }
-
-
-@obj_base.VersionedObjectRegistry.register
-class LBaaSRouteNotifier(k_obj.KuryrK8sObjectBase):
-    VERSION = '1.0'
-
-    fields = {
-        'routes': obj_fields.ListOfObjectsField(
-            LBaaSRouteNotifEntry.__name__, default=[]),
-    }
diff --git a/kuryr_kubernetes/objects/route.py b/kuryr_kubernetes/objects/route.py
deleted file mode 100644
index fbe50265c..000000000
--- a/kuryr_kubernetes/objects/route.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# Copyright (c) 2018 RedHat, Inc.
-# All Rights Reserved.
-#
-#    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.
-from kuryr_kubernetes.objects import base as k_obj
-from kuryr_kubernetes.objects import lbaas as lbaas_obj
-from oslo_versionedobjects import base as obj_base
-from oslo_versionedobjects import fields as obj_fields
-
-
-@obj_base.VersionedObjectRegistry.register
-class RouteState(k_obj.KuryrK8sObjectBase):
-    VERSION = '1.0'
-    fields = {
-        'router_pool': obj_fields.ObjectField(
-            lbaas_obj.LBaaSPool.__name__, nullable=True, default=None),
-        'l7_policy': obj_fields.ObjectField(
-            lbaas_obj.LBaaSL7Policy.__name__, nullable=True, default=None),
-        'h_l7_rule': obj_fields.ObjectField(
-            lbaas_obj.LBaaSL7Rule.__name__, nullable=True, default=None),
-        'p_l7_rule': obj_fields.ObjectField(
-            lbaas_obj.LBaaSL7Rule.__name__, nullable=True, default=None),
-    }
-
-
-@obj_base.VersionedObjectRegistry.register
-class RouteSpec(k_obj.KuryrK8sObjectBase):
-    VERSION = '1.0'
-    fields = {
-        'host': obj_fields.StringField(nullable=True, default=None),
-        'path': obj_fields.StringField(nullable=True, default=None),
-        'to_service': obj_fields.StringField(nullable=True, default=None),
-    }
diff --git a/kuryr_kubernetes/opts.py b/kuryr_kubernetes/opts.py
index 28de8e95e..d4d093e68 100644
--- a/kuryr_kubernetes/opts.py
+++ b/kuryr_kubernetes/opts.py
@@ -43,7 +43,6 @@ _kuryr_k8s_opts = [
     ('cni_health_server', cni_health.cni_health_server_opts),
     ('namespace_subnet', namespace_subnet.namespace_subnet_driver_opts),
     ('namespace_sg', namespace_security_groups.namespace_sg_driver_opts),
-    ('ingress', config.ingress),
     ('sriov', config.sriov_opts),
     ('namespace_handler_caching', namespace.namespace_handler_caching_opts),
     ('np_handler_caching', policy.np_handler_caching_opts),
diff --git a/kuryr_kubernetes/platform/__init__.py b/kuryr_kubernetes/platform/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/kuryr_kubernetes/platform/constants.py b/kuryr_kubernetes/platform/constants.py
deleted file mode 100644
index 2f8a36d30..000000000
--- a/kuryr_kubernetes/platform/constants.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright (c) 2018 RedHat, Inc.
-# All Rights Reserved.
-#
-#    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.
-
-OCP_API_BASE = '/apis/route.openshift.io/v1'
-OCP_OBJ_ROUTE = 'Route'
diff --git a/kuryr_kubernetes/platform/ocp/__init__.py b/kuryr_kubernetes/platform/ocp/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/kuryr_kubernetes/platform/ocp/controller/__init__.py b/kuryr_kubernetes/platform/ocp/controller/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/kuryr_kubernetes/platform/ocp/controller/handlers/__init__.py b/kuryr_kubernetes/platform/ocp/controller/handlers/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/kuryr_kubernetes/platform/ocp/controller/handlers/route.py b/kuryr_kubernetes/platform/ocp/controller/handlers/route.py
deleted file mode 100644
index f556e097d..000000000
--- a/kuryr_kubernetes/platform/ocp/controller/handlers/route.py
+++ /dev/null
@@ -1,255 +0,0 @@
-# Copyright (c) 2017 RedHat, Inc.
-# All Rights Reserved.
-#
-#    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.
-
-from kuryr.lib._i18n import _
-
-from kuryr_kubernetes import clients
-from kuryr_kubernetes import constants as k_const
-from kuryr_kubernetes.controller.drivers import base as drv_base
-from kuryr_kubernetes.controller.ingress import ingress_ctl
-from kuryr_kubernetes import exceptions as k_exc
-from kuryr_kubernetes.handlers import k8s_base
-from kuryr_kubernetes.objects import lbaas as obj_lbaas
-from kuryr_kubernetes.objects import route as obj_route
-from kuryr_kubernetes.platform import constants as ocp_const
-from oslo_log import log as logging
-from oslo_serialization import jsonutils
-
-LOG = logging.getLogger(__name__)
-
-
-class OcpRouteHandler(k8s_base.ResourceEventHandler):
-    """OcpRouteHandler handles OCP route events.
-
-    An OpenShift route allows service to be externally-reachable via host name.
-    This host name is then used to route traffic to the service.
-    The OcpRouteHandler is responsible for processing all route resource
-    events.
-
-    """
-
-    OBJECT_KIND = ocp_const.OCP_OBJ_ROUTE
-    OBJECT_WATCH_PATH = "%s/%s" % (ocp_const.OCP_API_BASE, "routes")
-
-    def __init__(self):
-        self._drv_lbaas = drv_base.LBaaSDriver.get_instance()
-        self._l7_router = None
-        self._l7_router_listeners = None
-
-    def on_present(self, route):
-        if not self._l7_router or not self._l7_router_listeners:
-            ing_ctl = ingress_ctl.IngressCtrlr.get_instance()
-            self._l7_router, self._l7_router_listeners = (
-                ing_ctl.get_router_and_listener())
-            if not self._l7_router or not self._l7_router_listeners:
-                LOG.info("No L7 router found - do nothing")
-                return
-
-        route_spec = self._get_route_spec(route)
-        if not route_spec:
-            route_spec = obj_route.RouteSpec()
-
-        if self._should_ignore(route, route_spec):
-            return
-        route_state = self._get_route_state(route)
-        if not route_state:
-            route_state = obj_route.RouteState()
-
-        self._sync_router_pool(route, route_spec, route_state)
-        self._sync_l7_policy(route, route_spec, route_state)
-        self._sync_host_l7_rule(route, route_spec, route_state)
-        self._sync_path_l7_rule(route, route_spec, route_state)
-
-        self._set_route_state(route, route_state)
-        self._set_route_spec(route, route_spec)
-        self._send_route_notification_to_ep(
-            route, route_spec.to_service)
-
-    def _get_endpoints_link_by_route(self, route_link, ep_name):
-        route_link = route_link.replace(
-            ocp_const.OCP_API_BASE, k_const.K8S_API_BASE)
-        link_parts = route_link.split('/')
-        if link_parts[-2] != 'routes':
-            raise k_exc.IntegrityError(_(
-                "Unsupported route link: %(link)s") % {
-                'link': route_link})
-        link_parts[-2] = 'endpoints'
-        link_parts[-1] = ep_name
-        return "/".join(link_parts)
-
-    def _send_route_notification_to_ep(self, route, ep_name):
-        route_link = route['metadata']['selfLink']
-        ep_link = self._get_endpoints_link_by_route(route_link, ep_name)
-        k8s = clients.get_kubernetes_client()
-        try:
-            k8s.get(ep_link)
-        except k_exc.K8sClientException:
-            LOG.debug("Failed to get EP link : %s", ep_link)
-            return
-
-        route_notifier = obj_lbaas.LBaaSRouteNotifier()
-        route_notifier.routes.append(
-            obj_lbaas.LBaaSRouteNotifEntry(
-                route_id=route['metadata']['uid'], msg='RouteChanged'))
-        route_notifier.obj_reset_changes(recursive=True)
-        LOG.debug("Setting LBaaSRouteNotifier annotation: %r", route_notifier)
-        annotation = jsonutils.dumps(route_notifier.obj_to_primitive(),
-                                     sort_keys=True)
-        k8s.annotate(
-            ep_link,
-            {k_const.K8S_ANNOTATION_LBAAS_RT_NOTIF: annotation},
-            resource_version=route['metadata']['resourceVersion'])
-
-    def _should_ignore(self, route, route_spec):
-        spec = route['spec']
-        return ((not self._l7_router)
-                or
-                ((spec.get('host') == route_spec.host) and
-                (spec.get('path') == route_spec.path) and
-                (spec['to'].get('name') == route_spec.to_service)))
-
-    def on_deleted(self, route):
-        if not self._l7_router:
-            LOG.info("No L7 router found - do nothing")
-            return
-
-        route_state = self._get_route_state(route)
-        if not route_state:
-            return
-        # NOTE(yboaron): deleting l7policy deletes also l7rules
-        if route_state.l7_policy:
-            self._drv_lbaas.release_l7_policy(
-                self._l7_router, route_state.l7_policy)
-
-        if route_state.router_pool:
-            if self._drv_lbaas.is_pool_used_by_other_l7policies(
-                    route_state.l7_policy, route_state.router_pool):
-                LOG.debug("Can't delete pool (pointed by another route)")
-            else:
-                self._drv_lbaas.release_pool(
-                    self._l7_router, route_state.router_pool)
-                # no more routes pointing to this pool/ep - update ep
-                spec = route['spec']
-                self._send_route_notification_to_ep(
-                    route, spec['to'].get('name'))
-
-    def _sync_router_pool(self, route, route_spec, route_state):
-        if route_state.router_pool:
-            return
-
-        pool_name = self._drv_lbaas.get_loadbalancer_pool_name(
-            self._l7_router, route['metadata']['namespace'],
-            route['spec']['to']['name'])
-        pool = self._drv_lbaas.get_pool_by_name(
-            pool_name, self._l7_router.project_id)
-        if not pool:
-            pool = self._drv_lbaas.ensure_pool_attached_to_lb(
-                self._l7_router, route['metadata']['namespace'],
-                route['spec']['to']['name'], protocol='HTTP')
-
-        route_state.router_pool = pool
-        route_spec.to_service = route['spec']['to']['name']
-
-    def _sync_l7_policy(self, route, route_spec, route_state):
-        if route_state.l7_policy:
-            return
-        # TBD , take care of listener HTTPS
-        listener = self._l7_router_listeners[k_const.KURYR_L7_ROUTER_HTTP_PORT]
-
-        route_state.l7_policy = self._drv_lbaas.ensure_l7_policy(
-            route['metadata']['namespace'], route['metadata']['name'],
-            self._l7_router, route_state.router_pool, listener.id)
-
-    def _sync_host_l7_rule(self, route, route_spec, route_state):
-        if route_spec.host == route['spec']['host']:
-            return
-        if not route_spec.host:
-            route_state.h_l7_rule = self._drv_lbaas.ensure_l7_rule(
-                self._l7_router, route_state.l7_policy,
-                'EQUAL_TO', 'HOST_NAME', route['spec']['host'])
-        else:
-            self._drv_lbaas.update_l7_rule(
-                route_state.h_l7_rule, route['spec']['host'])
-            route_state.h_l7_rule.value = route['spec']['host']
-
-        route_spec.host = route['spec']['host']
-
-    def _sync_path_l7_rule(self, route, route_spec, route_state):
-        if route_spec.path == route['spec'].get('path'):
-            return
-        if not route_spec.path:
-            route_state.p_l7_rule = self._drv_lbaas.ensure_l7_rule(
-                self._l7_router, route_state.l7_policy,
-                'STARTS_WITH', 'PATH', route['spec']['path'])
-        else:
-            if route['spec']['path']:
-                self._drv_lbaas.update_l7_rule(
-                    route_state.p_l7_rule, route['spec']['path'])
-                route_state.p_l7_rule.value = route['spec']['path']
-            else:
-                self._drv_lbaas.release_l7_rule(route_state.p_l7_rule)
-                route_state.p_l7_rule = None
-
-        route_spec.path = route['spec']['path']
-
-    def _get_route_spec(self, route):
-        try:
-            annotations = route['metadata']['annotations']
-            annotation = annotations[k_const.K8S_ANNOTATION_ROUTE_SPEC]
-        except KeyError:
-            return obj_route.RouteSpec()
-        obj_dict = jsonutils.loads(annotation)
-        obj = obj_route.RouteSpec.obj_from_primitive(obj_dict)
-        LOG.debug("Got RouteSpec from annotation: %r", obj)
-        return obj
-
-    def _set_route_spec(self, route, route_spec):
-        if route_spec is None:
-            LOG.debug("Removing RouteSpec annotation: %r", route_spec)
-            annotation = None
-        else:
-            route_spec.obj_reset_changes(recursive=True)
-            LOG.debug("Setting RouteSpec annotation: %r", route_spec)
-            annotation = jsonutils.dumps(route_spec.obj_to_primitive(),
-                                         sort_keys=True)
-        k8s = clients.get_kubernetes_client()
-        k8s.annotate(route['metadata']['selfLink'],
-                     {k_const.K8S_ANNOTATION_ROUTE_SPEC: annotation},
-                     resource_version=route['metadata']['resourceVersion'])
-
-    def _get_route_state(self, route):
-        try:
-            annotations = route['metadata']['annotations']
-            annotation = annotations[k_const.K8S_ANNOTATION_ROUTE_STATE]
-        except KeyError:
-            return obj_route.RouteState()
-        obj_dict = jsonutils.loads(annotation)
-        obj = obj_route.RouteState.obj_from_primitive(obj_dict)
-        LOG.debug("Got RouteState from annotation: %r", obj)
-        return obj
-
-    def _set_route_state(self, route, route_state):
-        if route_state is None:
-            LOG.debug("Removing RouteState annotation: %r", route_state)
-            annotation = None
-        else:
-            route_state.obj_reset_changes(recursive=True)
-            LOG.debug("Setting RouteState annotation: %r", route_state)
-            annotation = jsonutils.dumps(route_state.obj_to_primitive(),
-                                         sort_keys=True)
-        k8s = clients.get_kubernetes_client()
-        k8s.annotate(route['metadata']['selfLink'],
-                     {k_const.K8S_ANNOTATION_ROUTE_STATE: annotation},
-                     resource_version=route['metadata']['resourceVersion'])
diff --git a/kuryr_kubernetes/tests/unit/controller/drivers/test_lbaasv2.py b/kuryr_kubernetes/tests/unit/controller/drivers/test_lbaasv2.py
index 024b95b6f..50d532f9d 100644
--- a/kuryr_kubernetes/tests/unit/controller/drivers/test_lbaasv2.py
+++ b/kuryr_kubernetes/tests/unit/controller/drivers/test_lbaasv2.py
@@ -18,8 +18,6 @@ import munch
 
 from neutronclient.common import exceptions as n_exc
 from openstack import exceptions as os_exc
-from openstack.load_balancer.v2 import l7_policy as o_l7p
-from openstack.load_balancer.v2 import l7_rule as o_l7r
 from openstack.load_balancer.v2 import listener as o_lis
 from openstack.load_balancer.v2 import load_balancer as o_lb
 from openstack.load_balancer.v2 import member as o_mem
@@ -917,363 +915,3 @@ class TestLBaaSv2Driver(test_base.TestCase):
     def test_provisioning_timer(self):
         # REVISIT(ivc): add test if _provisioning_timer is to stay
         self.skipTest("not implemented")
-
-    def test_get_pool_by_name_not_found(self):
-        lbaas = self.useFixture(k_fix.MockLBaaSClient()).client
-        cls = d_lbaasv2.LBaaSv2Driver
-        m_driver = mock.Mock(spec=d_lbaasv2.LBaaSv2Driver)
-
-        pools = o_pool.Pool(name='KUKU',
-                            id='a2a62ea7-e3bf-40df-8c09-aa0c29876a6b')
-        lbaas.pools.return_value = [pools]
-        pool_name = 'NOT_KUKU'
-        project_id = 'TEST_PROJECT'
-
-        pool_id = cls.get_pool_by_name(m_driver, pool_name, project_id)
-        self.assertIsNone(pool_id)
-
-    def test_get_pool_by_name_found(self):
-        self._test_get_pool_by_name_found(listener_is_empty=False)
-
-    def test_get_pool_by_name_found_listener_is_empty(self):
-        self._test_get_pool_by_name_found(listener_is_empty=True)
-
-    def _test_get_pool_by_name_found(self, listener_is_empty):
-        lbaas = self.useFixture(k_fix.MockLBaaSClient()).client
-        cls = d_lbaasv2.LBaaSv2Driver
-        m_driver = mock.Mock(spec=d_lbaasv2.LBaaSv2Driver)
-
-        pool_name = 'KUKU'
-        pool_lb_id = "607226db-27ef-4d41-ae89-f2a800e9c2db"
-        pool_project_id = "e3cd678b11784734bc366148aa37580e"
-        pool_id = "ddb2b28f-89e9-45d3-a329-a359c3e39e4a"
-        pool_protocol = "HTTP"
-        pool_listener_id = "023f2e34-7806-443b-bfae-16c324569a3d"
-
-        if listener_is_empty:
-            resp_listeners = []
-        else:
-            resp_listeners = [o_lis.Listener(id=pool_listener_id)]
-
-        listener_id = (resp_listeners[0].id if resp_listeners else None)
-        expected_result = obj_lbaas.LBaaSPool(
-            name=pool_name, project_id=pool_project_id,
-            loadbalancer_id=pool_lb_id,
-            listener_id=listener_id,
-            protocol=pool_protocol,
-            id=pool_id)
-
-        resp = [o_pool.Pool(
-            protocol=pool_protocol,
-            loadbalancers=[o_lb.LoadBalancer(id=pool_lb_id)],
-            listeners=resp_listeners,
-            project_id=pool_project_id,
-            id=pool_id,
-            name=pool_name,
-        )]
-
-        lbaas.pools.return_value = resp
-
-        pool = cls.get_pool_by_name(m_driver, pool_name, pool_project_id)
-        lbaas.pools.assert_called_once()
-        for attr in expected_result.obj_fields:
-            self.assertEqual(getattr(expected_result, attr),
-                             getattr(pool, attr))
-
-    def test_get_pool_by_name_empty_list(self):
-        lbaas = self.useFixture(k_fix.MockLBaaSClient()).client
-        cls = d_lbaasv2.LBaaSv2Driver
-        m_driver = mock.Mock(spec=d_lbaasv2.LBaaSv2Driver)
-        pools = {}
-        lbaas.pools.return_value = [pools]
-        pool_name = 'NOT_KUKU'
-        project_id = 'TEST_PROJECT'
-
-        pool = cls.get_pool_by_name(m_driver, pool_name, project_id)
-        self.assertIsNone(pool)
-
-    def test_get_lb_by_uuid(self):
-        lbaas = self.useFixture(k_fix.MockLBaaSClient()).client
-        cls = d_lbaasv2.LBaaSv2Driver
-        m_driver = mock.Mock(spec=d_lbaasv2.LBaaSv2Driver)
-
-        loadbalancer_id = '00EE9E11-91C2-41CF-8FD4-7970579E5C4C'
-        loadbalancer_vip = '1.2.3.4'
-        loadbalancer_vip_port_id = '00EE9E11-91C2-41CF-8FD4-7970579EFFFF'
-        loadbalancer_project_id = '00EE9E11-91C2-41CF-8FD4-7970579EAAAA'
-        loadbalancer_name = 'MyName'
-        loadbalancer_subnet_id = '00EE9E11-91C2-41CF-8FD4-7970579EBBBB'
-        loadbalancer_provider = 'haproxy'
-
-        expected_lb = obj_lbaas.LBaaSLoadBalancer(
-            id=loadbalancer_id, port_id=loadbalancer_vip_port_id,
-            name=loadbalancer_name, project_id=loadbalancer_project_id,
-            subnet_id=loadbalancer_subnet_id, ip=loadbalancer_vip,
-            security_groups=None, provider=loadbalancer_provider)
-
-        resp = o_lb.LoadBalancer(id=loadbalancer_id,
-                                 vip_port_id=loadbalancer_vip_port_id,
-                                 name=loadbalancer_name,
-                                 project_id=loadbalancer_project_id,
-                                 vip_subnet_id=loadbalancer_subnet_id,
-                                 vip_address=loadbalancer_vip,
-                                 provider=loadbalancer_provider)
-
-        lbaas.get_load_balancer.return_value = resp
-
-        ret = cls.get_lb_by_uuid(m_driver, loadbalancer_id)
-        lbaas.get_load_balancer.assert_called_once()
-        for attr in expected_lb.obj_fields:
-            self.assertEqual(getattr(expected_lb, attr),
-                             getattr(ret, attr))
-        self.assertEqual(loadbalancer_id, ret.id)
-
-    def test_get_lb_by_uuid_not_found(self):
-        lbaas = self.useFixture(k_fix.MockLBaaSClient()).client
-        cls = d_lbaasv2.LBaaSv2Driver
-        m_driver = mock.Mock(spec=d_lbaasv2.LBaaSv2Driver)
-
-        resp = {'loadbalancer': {}}
-        lbaas.get_load_balancer.return_value = resp
-
-        requested_uuid = '00EE9E11-91C2-41CF-8FD4-7970579EFFFF'
-        lbaas.get_load_balancer.side_effect = os_exc.ResourceNotFound
-
-        ret = cls.get_lb_by_uuid(m_driver, requested_uuid)
-        lbaas.get_load_balancer.assert_called_once()
-        self.assertIsNone(ret)
-
-    def test_ensure_l7policy(self):
-        cls = d_lbaasv2.LBaaSv2Driver
-        m_driver = mock.Mock(spec=d_lbaasv2.LBaaSv2Driver)
-        expected_resp = mock.sentinel.expected_resp
-        loadbalancer = mock.sentinel.expected_resp
-        route_name = 'ROUTE_NAME'
-        namespace = 'NAMESPACE'
-        listener_id = 'D4F35594-27EB-4F4C-930C-31DD40F53B77'
-        pool = obj_lbaas.LBaaSPool(
-            id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C',
-            project_id='TEST_PROJECT',
-            name='NAME',
-            loadbalancer_id='010101',
-            listener_id='12345',
-            protocol='TCP'
-        )
-
-        m_driver._ensure_provisioned.return_value = expected_resp
-
-        cls.ensure_l7_policy(
-            m_driver, namespace, route_name, loadbalancer, pool, listener_id)
-
-        m_driver._ensure_provisioned.assert_called_once_with(
-            loadbalancer, mock.ANY, m_driver._create_l7_policy,
-            m_driver._find_l7_policy)
-        l7policy = m_driver._ensure_provisioned.call_args[0][1]
-
-        self.assertEqual("%s%s" % (namespace, route_name), l7policy.name)
-        self.assertEqual(listener_id, l7policy.listener_id)
-        self.assertEqual(pool.id, l7policy.redirect_pool_id)
-        self.assertEqual(pool.project_id, l7policy.project_id)
-
-    def test_release_l7policy(self):
-        lbaas = self.useFixture(k_fix.MockLBaaSClient()).client
-        cls = d_lbaasv2.LBaaSv2Driver
-        m_driver = mock.Mock(spec=d_lbaasv2.LBaaSv2Driver)
-
-        loadbalancer = mock.Mock()
-        l7_policy = mock.Mock()
-        cls.release_l7_policy(m_driver, loadbalancer, l7_policy)
-
-        m_driver._release.assert_called_once_with(
-            loadbalancer, l7_policy, lbaas.delete_l7_policy,
-            l7_policy.id)
-
-    def test_create_l7policy(self):
-        cls = d_lbaasv2.LBaaSv2Driver
-        m_driver = mock.Mock(spec=d_lbaasv2.LBaaSv2Driver)
-
-        l7_policy = obj_lbaas.LBaaSL7Policy(
-            name='TEST_NAME',
-            project_id='TEST_PROJECT',
-            listener_id='D4F35594-27EB-4F4C-930C-31DD40F53B77',
-            redirect_pool_id='D3FA400A-F543-4B91-9CD3-047AF0CE42D1')
-
-        l7policy_id = '3A70CEC0-392D-4BC1-A27C-06E63A0FD54F'
-        req = {
-            'action': 'REDIRECT_TO_POOL',
-            'listener_id': l7_policy.listener_id,
-            'name': l7_policy.name,
-            'project_id': l7_policy.project_id,
-            'redirect_pool_id': l7_policy.redirect_pool_id}
-        resp = {'id': l7policy_id}
-        m_driver._post_lb_resource.return_value = resp
-
-        ret = cls._create_l7_policy(m_driver, l7_policy)
-        m_driver._post_lb_resource.assert_called_once_with(o_l7p.L7Policy, req)
-        for attr in l7_policy.obj_fields:
-            self.assertEqual(getattr(l7_policy, attr),
-                             getattr(ret, attr))
-        self.assertEqual(l7policy_id, ret.id)
-
-    def test_find_l7_policy(self):
-        lbaas = self.useFixture(k_fix.MockLBaaSClient()).client
-        cls = d_lbaasv2.LBaaSv2Driver
-        m_driver = mock.Mock(spec=d_lbaasv2.LBaaSv2Driver)
-        l7_policy = obj_lbaas.LBaaSL7Policy(
-            name='TEST_NAME',
-            project_id='TEST_PROJECT',
-            listener_id='D4F35594-27EB-4F4C-930C-31DD40F53B77',
-            redirect_pool_id='D3FA400A-F543-4B91-9CD3-047AF0CE42D1')
-
-        l7policy_id = '3A70CEC0-392D-4BC1-A27C-06E63A0FD54F'
-
-        resp = iter([o_l7p.L7Policy(id=l7policy_id)])
-        lbaas.l7_policies.return_value = resp
-
-        ret = cls._find_l7_policy(m_driver, l7_policy)
-        lbaas.l7_policies.assert_called_once_with(
-            name=l7_policy.name,
-            project_id=l7_policy.project_id,
-            redirect_pool_id=l7_policy.redirect_pool_id,
-            listener_id=l7_policy.listener_id)
-        for attr in l7_policy.obj_fields:
-            self.assertEqual(getattr(l7_policy, attr),
-                             getattr(ret, attr))
-        self.assertEqual(l7policy_id, ret.id)
-
-    def test_find_l7_policy_not_found(self):
-        lbaas = self.useFixture(k_fix.MockLBaaSClient()).client
-        cls = d_lbaasv2.LBaaSv2Driver
-        m_driver = mock.Mock(spec=d_lbaasv2.LBaaSv2Driver)
-        l7_policy = obj_lbaas.LBaaSL7Policy(
-            name='TEST_NAME',
-            project_id='TEST_PROJECT',
-            listener_id='D4F35594-27EB-4F4C-930C-31DD40F53B77',
-            redirect_pool_id='D3FA400A-F543-4B91-9CD3-047AF0CE42D1')
-
-        resp = iter([])
-        lbaas.l7_policies.return_value = resp
-
-        ret = cls._find_l7_policy(m_driver, l7_policy)
-        lbaas.l7_policies.assert_called_once_with(
-            name=l7_policy.name,
-            project_id=l7_policy.project_id,
-            redirect_pool_id=l7_policy.redirect_pool_id,
-            listener_id=l7_policy.listener_id)
-        self.assertIsNone(ret)
-
-    def test_ensure_l7_rule(self):
-        cls = d_lbaasv2.LBaaSv2Driver
-        m_driver = mock.Mock(spec=d_lbaasv2.LBaaSv2Driver)
-        expected_resp = mock.sentinel.expected_resp
-        loadbalancer = mock.sentinel.expected_resp
-        compare_type = 'EQUAL_TO'
-        type = 'HOST_NAME'
-        value = 'www.test.com'
-        l7_policy = obj_lbaas.LBaaSL7Policy(
-            id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C',
-            name='TEST_NAME',
-            project_id='TEST_PROJECT',
-            listener_id='D4F35594-27EB-4F4C-930C-31DD40F53B77',
-            redirect_pool_id='D3FA400A-F543-4B91-9CD3-047AF0CE42D1')
-
-        m_driver._ensure_provisioned.return_value = expected_resp
-
-        cls.ensure_l7_rule(
-            m_driver, loadbalancer, l7_policy, compare_type, type, value)
-
-        m_driver._ensure_provisioned.assert_called_once_with(
-            loadbalancer, mock.ANY, m_driver._create_l7_rule,
-            m_driver._find_l7_rule)
-        l7rule = m_driver._ensure_provisioned.call_args[0][1]
-
-        self.assertEqual(compare_type, l7rule.compare_type)
-        self.assertEqual(type, l7rule.type)
-        self.assertEqual(value, l7rule.value)
-
-    def test_release_l7_rule(self):
-        lbaas = self.useFixture(k_fix.MockLBaaSClient()).client
-        cls = d_lbaasv2.LBaaSv2Driver
-        m_driver = mock.Mock(spec=d_lbaasv2.LBaaSv2Driver)
-
-        loadbalancer = mock.Mock()
-        l7_rule = mock.Mock()
-        cls.release_l7_rule(m_driver, loadbalancer, l7_rule)
-
-        m_driver._release.assert_called_once_with(
-            loadbalancer, l7_rule, lbaas.delete_l7_rule,
-            l7_rule.id, l7_rule.l7policy_id)
-
-    def test_create_l7_rule(self):
-        cls = d_lbaasv2.LBaaSv2Driver
-        m_driver = mock.Mock(spec=d_lbaasv2.LBaaSv2Driver)
-
-        l7_rule = obj_lbaas.LBaaSL7Rule(
-            compare_type='EQUAL_TO',
-            l7policy_id='D4F35594-27EB-4F4C-930C-31DD40F53B77',
-            type='HOST_NAME',
-            value='www.test.com')
-
-        l7_rule_id = '3A70CEC0-392D-4BC1-A27C-06E63A0FD54F'
-
-        req = {'compare_type': l7_rule.compare_type,
-               'type': l7_rule.type,
-               'value': l7_rule.value}
-
-        resp = {'id': l7_rule_id}
-        m_driver._post_lb_resource.return_value = resp
-
-        ret = cls._create_l7_rule(m_driver, l7_rule)
-        m_driver._post_lb_resource.assert_called_once_with(
-            o_l7r.L7Rule, req, l7policy_id=l7_rule.l7policy_id)
-        for attr in l7_rule.obj_fields:
-            self.assertEqual(getattr(l7_rule, attr),
-                             getattr(ret, attr))
-        self.assertEqual(l7_rule_id, ret.id)
-
-    def test_find_l7_rule(self):
-        lbaas = self.useFixture(k_fix.MockLBaaSClient()).client
-        cls = d_lbaasv2.LBaaSv2Driver
-        m_driver = mock.Mock(spec=d_lbaasv2.LBaaSv2Driver)
-        l7_rule = obj_lbaas.LBaaSL7Rule(
-            compare_type='EQUAL_TO',
-            l7policy_id='D4F35594-27EB-4F4C-930C-31DD40F53B77',
-            type='HOST_NAME',
-            value='www.test.com')
-
-        l7_rule_id = '3A70CEC0-392D-4BC1-A27C-06E63A0FD54F'
-        resp = iter([o_l7r.L7Rule(id=l7_rule_id)])
-        lbaas.l7_rules.return_value = resp
-
-        ret = cls._find_l7_rule(m_driver, l7_rule)
-        lbaas.l7_rules.assert_called_once_with(
-            l7_rule.l7policy_id,
-            type=l7_rule.type,
-            value=l7_rule.value,
-            compare_type=l7_rule.compare_type)
-
-        for attr in l7_rule.obj_fields:
-            self.assertEqual(getattr(l7_rule, attr),
-                             getattr(ret, attr))
-        self.assertEqual(l7_rule_id, ret.id)
-
-    def test_find_l7_rule_not_found(self):
-        lbaas = self.useFixture(k_fix.MockLBaaSClient()).client
-        cls = d_lbaasv2.LBaaSv2Driver
-        m_driver = mock.Mock(spec=d_lbaasv2.LBaaSv2Driver)
-        l7_rule = obj_lbaas.LBaaSL7Rule(
-            compare_type='EQUAL_TO',
-            l7policy_id='D4F35594-27EB-4F4C-930C-31DD40F53B77',
-            type='HOST_NAME',
-            value='www.test.com')
-
-        resp = iter([])
-        lbaas.l7_rules.return_value = resp
-
-        ret = cls._find_l7_rule(m_driver, l7_rule)
-        lbaas.l7_rules.assert_called_once_with(
-            l7_rule.l7policy_id,
-            type=l7_rule.type,
-            value=l7_rule.value,
-            compare_type=l7_rule.compare_type)
-        self.assertIsNone(ret)
diff --git a/kuryr_kubernetes/tests/unit/controller/handlers/test_ingress_lbaas.py b/kuryr_kubernetes/tests/unit/controller/handlers/test_ingress_lbaas.py
deleted file mode 100644
index 4c80a2f41..000000000
--- a/kuryr_kubernetes/tests/unit/controller/handlers/test_ingress_lbaas.py
+++ /dev/null
@@ -1,192 +0,0 @@
-# Copyright (c) 2018 RedHat, Inc.
-# All Rights Reserved.
-#
-#    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.
-
-import mock
-import uuid
-
-from kuryr_kubernetes.controller.handlers import ingress_lbaas as h_ing_lbaas
-from kuryr_kubernetes.objects import lbaas as obj_lbaas
-from kuryr_kubernetes.tests.unit.controller.handlers import \
-    test_lbaas as t_lbaas
-
-
-class TestIngressLoadBalancerHandler(t_lbaas.TestLoadBalancerHandler):
-
-    @mock.patch('kuryr_kubernetes.controller.handlers.lbaas'
-                '.LoadBalancerHandler._cleanup_leftover_lbaas')
-    @mock.patch('kuryr_kubernetes.controller.drivers.base'
-                '.LBaaSDriver.get_instance')
-    def test_init(self, m_get_drv_lbaas, m_cleanup_leftover_lbaas):
-        m_get_drv_lbaas.return_value = mock.sentinel.drv_lbaas
-
-        handler = h_ing_lbaas.IngressLoadBalancerHandler()
-
-        self.assertEqual(mock.sentinel.drv_lbaas, handler._drv_lbaas)
-
-    @mock.patch('kuryr_kubernetes.utils.get_lbaas_spec')
-    def test_on_present_no_ing_ctrlr(self, m_get_lbaas_spec):
-        endpoints = mock.sentinel.endpoints
-
-        m_handler = mock.Mock(spec=h_ing_lbaas.IngressLoadBalancerHandler)
-        m_handler._l7_router = None
-        h_ing_lbaas.IngressLoadBalancerHandler.on_present(m_handler, endpoints)
-
-        m_get_lbaas_spec.assert_not_called()
-        m_handler._should_ignore.assert_not_called()
-
-    def test_should_ignore(self):
-        endpoints = mock.sentinel.endpoints
-        lbaas_spec = mock.sentinel.lbaas_spec
-
-        m_handler = mock.Mock(spec=h_ing_lbaas.IngressLoadBalancerHandler)
-        m_handler._has_pods.return_value = False
-
-        ret = h_ing_lbaas.IngressLoadBalancerHandler._should_ignore(
-            m_handler, endpoints, lbaas_spec)
-        self.assertEqual(True, ret)
-
-        m_handler._has_pods.assert_called_once_with(endpoints)
-
-    def test_should_ignore_with_pods(self):
-        endpoints = mock.sentinel.endpoints
-        lbaas_spec = mock.sentinel.lbaas_spec
-
-        m_handler = mock.Mock(spec=h_ing_lbaas.IngressLoadBalancerHandler)
-        m_handler._has_pods.return_value = True
-
-        ret = h_ing_lbaas.IngressLoadBalancerHandler._should_ignore(
-            m_handler, endpoints, lbaas_spec)
-        self.assertEqual(False, ret)
-
-        m_handler._has_pods.assert_called_once_with(endpoints)
-
-    def _generate_route_state(self, vip, targets, project_id, subnet_id):
-        name = 'DUMMY_NAME'
-        drv = t_lbaas.FakeLBaaSDriver()
-        lb = drv.ensure_loadbalancer(
-            name, project_id, subnet_id, vip, None, 'ClusterIP')
-        pool = drv.ensure_pool_attached_to_lb(lb, 'namespace',
-                                              'svc_name', 'HTTP')
-
-        members = {}
-        for ip, (listen_port, target_port) in targets.items():
-            members.setdefault((ip, listen_port, target_port),
-                               drv.ensure_member(lb, pool,
-                                                 subnet_id, ip,
-                                                 target_port, None, None))
-        return obj_lbaas.LBaaSRouteState(
-            pool=pool,
-            members=list(members.values()))
-
-    def _sync_route_members_impl(self, m_get_drv_lbaas, m_get_drv_project,
-                                 m_get_drv_subnets, subnet_id, project_id,
-                                 endpoints, state, spec):
-        m_drv_lbaas = mock.Mock(wraps=t_lbaas.FakeLBaaSDriver())
-        m_drv_project = mock.Mock()
-        m_drv_project.get_project.return_value = project_id
-        m_drv_subnets = mock.Mock()
-        m_drv_subnets.get_subnets.return_value = {
-            subnet_id: mock.sentinel.subnet}
-        m_get_drv_lbaas.return_value = m_drv_lbaas
-        m_get_drv_project.return_value = m_drv_project
-        m_get_drv_subnets.return_value = m_drv_subnets
-
-        handler = h_ing_lbaas.IngressLoadBalancerHandler()
-
-        handler._l7_router = t_lbaas.FakeLBaaSDriver().ensure_loadbalancer(
-            name='L7_Router',
-            project_id=project_id,
-            subnet_id=subnet_id,
-            ip='1.2.3.4',
-            security_groups_ids=None,
-            service_type='ClusterIP')
-
-        with mock.patch.object(handler, '_get_pod_subnet') as m_get_pod_subnet:
-            m_get_pod_subnet.return_value = subnet_id
-            handler._sync_lbaas_route_members(endpoints, state, spec)
-
-        observed_targets = sorted(
-            (str(member.ip), (
-                member.port,
-                member.port))
-            for member in state.members)
-        return observed_targets
-
-    @mock.patch('kuryr_kubernetes.controller.handlers.lbaas'
-                '.LoadBalancerHandler._cleanup_leftover_lbaas')
-    @mock.patch('kuryr_kubernetes.controller.drivers.base'
-                '.PodSubnetsDriver.get_instance')
-    @mock.patch('kuryr_kubernetes.controller.drivers.base'
-                '.PodProjectDriver.get_instance')
-    @mock.patch('kuryr_kubernetes.controller.drivers.base'
-                '.LBaaSDriver.get_instance')
-    def test__sync_lbaas_route_members(self, m_get_drv_lbaas,
-                                       m_get_drv_project, m_get_drv_subnets,
-                                       m_cleanup_leftover_lbaas):
-        project_id = str(uuid.uuid4())
-        subnet_id = str(uuid.uuid4())
-        current_ip = '1.1.1.1'
-        current_targets = {
-            '1.1.1.101': (1001, 1001),
-            '1.1.1.111': (1001, 1001),
-            '1.1.1.201': (2001, 2001)}
-        expected_ip = '2.2.2.2'
-        expected_targets = {
-            '2.2.2.101': (1201, 1201),
-            '2.2.2.111': (1201, 1201),
-            '2.2.2.201': (2201, 2201)}
-        endpoints = self._generate_endpoints(expected_targets)
-        state = self._generate_route_state(
-            current_ip, current_targets, project_id, subnet_id)
-        spec = self._generate_lbaas_spec(expected_ip, expected_targets,
-                                         project_id, subnet_id)
-
-        observed_targets = self._sync_route_members_impl(
-            m_get_drv_lbaas, m_get_drv_project, m_get_drv_subnets,
-            subnet_id, project_id, endpoints, state, spec)
-
-        self.assertEqual(sorted(expected_targets.items()), observed_targets)
-
-    def test_on_deleted_no_ingress_controller(self):
-        endpoints = mock.sentinel.endpoints
-        m_handler = mock.Mock(spec=h_ing_lbaas.IngressLoadBalancerHandler)
-        m_handler._l7_router = None
-        h_ing_lbaas.IngressLoadBalancerHandler.on_deleted(m_handler, endpoints)
-
-        m_handler._get_lbaas_route_state.assert_not_called()
-        m_handler._remove_unused_route_members.assert_not_called()
-
-    def test_on_deleted(self):
-        endpoints = mock.sentinel.endpoints
-        project_id = str(uuid.uuid4())
-        subnet_id = str(uuid.uuid4())
-
-        m_handler = mock.Mock(spec=h_ing_lbaas.IngressLoadBalancerHandler)
-        m_handler._l7_router = t_lbaas.FakeLBaaSDriver().ensure_loadbalancer(
-            name='L7_Router',
-            project_id=project_id,
-            subnet_id=subnet_id,
-            ip='1.2.3.4',
-            security_groups_ids=None,
-            service_type='ClusterIP')
-
-        m_handler._get_lbaas_route_state.return_value = (
-            obj_lbaas.LBaaSRouteState())
-        m_handler._remove_unused_route_members.return_value = True
-
-        h_ing_lbaas.IngressLoadBalancerHandler.on_deleted(m_handler, endpoints)
-
-        m_handler._get_lbaas_route_state.assert_called_once()
-        m_handler._remove_unused_route_members.assert_called_once()
diff --git a/kuryr_kubernetes/tests/unit/controller/handlers/test_lbaas.py b/kuryr_kubernetes/tests/unit/controller/handlers/test_lbaas.py
index c4741c525..28bc13eb7 100644
--- a/kuryr_kubernetes/tests/unit/controller/handlers/test_lbaas.py
+++ b/kuryr_kubernetes/tests/unit/controller/handlers/test_lbaas.py
@@ -356,40 +356,6 @@ class FakeLBaaSDriver(drv_base.LBaaSDriver):
     def get_loadbalancer_pool_name(self, lb_name, namespace, svc_name):
         return "%s/%s/%s" % (lb_name, namespace, svc_name)
 
-    def ensure_l7_policy(self, namespace, route_name,
-                         loadbalancer, pool,
-                         listener_id):
-        pass
-
-    def release_l7_policy(self, loadbalancer, l7_policy):
-        pass
-
-    def ensure_l7_rule(self, loadbalancer, l7_policy, compare_type,
-                       type, value):
-        pass
-
-    def release_l7_rule(self, loadbalancer, l7_rule):
-        pass
-
-    def update_l7_rule(self, l7_rule, new_value):
-        pass
-
-    def ensure_pool_attached_to_lb(self, loadbalancer, namespace,
-                                   svc_name, protocol):
-        return obj_lbaas.LBaaSPool(id=str(uuid.uuid4()),
-                                   loadbalancer_id=loadbalancer.id,
-                                   project_id=loadbalancer.project_id,
-                                   protocol=protocol)
-
-    def get_pool_by_name(self, pool_name, project_id):
-        pass
-
-    def get_lb_by_uuid(self, vip):
-        pass
-
-    def is_pool_used_by_other_l7policies(l7policy, pool):
-        pass
-
 
 class TestLoadBalancerHandler(test_base.TestCase):
 
diff --git a/kuryr_kubernetes/tests/unit/controller/ingress/__init__.py b/kuryr_kubernetes/tests/unit/controller/ingress/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/kuryr_kubernetes/tests/unit/controller/ingress/test_ingress_ctl.py b/kuryr_kubernetes/tests/unit/controller/ingress/test_ingress_ctl.py
deleted file mode 100644
index 209f5d82f..000000000
--- a/kuryr_kubernetes/tests/unit/controller/ingress/test_ingress_ctl.py
+++ /dev/null
@@ -1,135 +0,0 @@
-# Copyright (c) 2018 RedHat, Inc.
-# All Rights Reserved.
-#
-#    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.
-from kuryr_kubernetes.controller.ingress import ingress_ctl
-from kuryr_kubernetes.objects import lbaas as obj_lbaas
-from kuryr_kubernetes.tests import base as test_base
-import mock
-
-
-class TestIngressCtrlr(test_base.TestCase):
-    def test_ingress_ctrlr_instance(self):
-        ing_ctrl = ingress_ctl.IngressCtrlr.get_instance()
-        self.assertIsNotNone(ing_ctrl)
-
-    @mock.patch('kuryr_kubernetes.config.CONF')
-    def test_ingress_ctrlr_conf_disabled(self, m_cfg):
-        m_cfg.kubernetes.enabled_handlers = ['not_ocproute']
-        m_cfg.ingress.l7_router_uuid = '00EE9E11-91C2-41CF-8FD4-7970579E5C4C'
-        ing_ctrl = ingress_ctl.IngressCtrlr.get_instance()
-        ing_ctrl.start_operation()
-        ret_l7router, ret_listener = ing_ctrl.get_router_and_listener()
-        self.assertIsNotNone(ing_ctrl)
-        self.assertIsNone(ret_l7router)
-        self.assertIsNone(ret_listener)
-
-    @mock.patch('kuryr_kubernetes.config.CONF')
-    def test_ingress_ctrlr_l7router_ip_not_defined(self, m_cfg):
-        m_cfg.kubernetes.enabled_handlers = ['ocproute']
-        m_cfg.ingress.l7_router_uuid = None
-        ing_ctrl = ingress_ctl.IngressCtrlr.get_instance()
-        ing_ctrl.start_operation()
-
-        ret_l7router, ret_listener = ing_ctrl.get_router_and_listener()
-        self.assertIsNotNone(ing_ctrl)
-        self.assertIsNone(ret_l7router)
-        self.assertIsNone(ret_listener)
-
-    @mock.patch('kuryr_kubernetes.controller.drivers.base'
-                '.LBaaSDriver.get_instance')
-    @mock.patch('kuryr_kubernetes.config.CONF')
-    def test_ingress_ctrlr_router_enabled_k8s(self, m_cfg, m_get_lbaas_drv):
-
-        m_cfg.kubernetes.enabled_handlers = ['ingresslb']
-        m_cfg.ingress.l7_router_uuid = '00EE9E11-91C2-41CF-8FD4-7970579E5C4C'
-        l7_router = obj_lbaas.LBaaSLoadBalancer(
-            name='TEST_NAME', project_id='TEST_PROJECT', ip='1.2.3.4',
-            subnet_id='D3FA400A-F543-4B91-9CD3-047AF0CE42D1',
-            security_groups=[],
-            id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C')
-
-        m_driver = mock.Mock()
-        m_driver.get_lb_by_uuid.return_value = l7_router
-        m_get_lbaas_drv.return_value = m_driver
-
-        ing_ctrl = ingress_ctl.IngressCtrlr.get_instance()
-        ing_ctrl.start_operation()
-        self.assertIsNotNone(ing_ctrl)
-        self.assertEqual(ing_ctrl._status, 'ACTIVE')
-
-    @mock.patch('kuryr_kubernetes.controller.drivers.base'
-                '.LBaaSDriver.get_instance')
-    @mock.patch('kuryr_kubernetes.config.CONF')
-    def test_ingress_ctrlr_router_enabled_ocp(self, m_cfg, m_get_lbaas_drv):
-
-        m_cfg.kubernetes.enabled_handlers = ['ocproute']
-        m_cfg.ingress.l7_router_uuid = '00EE9E11-91C2-41CF-8FD4-7970579E5C4C'
-
-        l7_router = obj_lbaas.LBaaSLoadBalancer(
-            name='TEST_NAME', project_id='TEST_PROJECT', ip='1.2.3.4',
-            subnet_id='D3FA400A-F543-4B91-9CD3-047AF0CE42D1',
-            security_groups=[],
-            id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C')
-
-        m_driver = mock.Mock()
-        m_driver.get_lb_by_uuid.return_value = l7_router
-        m_get_lbaas_drv.return_value = m_driver
-
-        ing_ctrl = ingress_ctl.IngressCtrlr.get_instance()
-        ing_ctrl.start_operation()
-        self.assertIsNotNone(ing_ctrl)
-        self.assertEqual(ing_ctrl._status, 'ACTIVE')
-
-    @mock.patch('kuryr_kubernetes.controller.drivers.base'
-                '.LBaaSDriver.get_instance')
-    @mock.patch('kuryr_kubernetes.config.CONF')
-    def test_ingress_ctrlr_router_created(self, m_cfg, m_get_lbaas_drv):
-
-        m_cfg.kubernetes.enabled_handlers = ['ocproute', 'ingresslb']
-        m_cfg.ingress.l7_router_uuid = '00EE9E11-91C2-41CF-8FD4-7970579E5C4C'
-
-        l7_router = obj_lbaas.LBaaSLoadBalancer(
-            name='TEST_NAME', project_id='TEST_PROJECT', ip='1.2.3.4',
-            subnet_id='D3FA400A-F543-4B91-9CD3-047AF0CE42D1',
-            security_groups=[],
-            id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C')
-
-        m_driver = mock.Mock()
-        m_driver.get_lb_by_uuid.return_value = l7_router
-        m_get_lbaas_drv.return_value = m_driver
-
-        ing_ctrl = ingress_ctl.IngressCtrlr.get_instance()
-        ing_ctrl._start_operation_impl()
-        self.assertIsNotNone(ing_ctrl)
-        self.assertEqual(ing_ctrl._status, 'ACTIVE')
-        ret_l7router, ret_listener = ing_ctrl.get_router_and_listener()
-        self.assertEqual(ret_l7router, l7_router)
-
-    @mock.patch('kuryr_kubernetes.controller.drivers.base'
-                '.LBaaSDriver.get_instance')
-    @mock.patch('kuryr_kubernetes.config.CONF')
-    def test_ingress_ctrlr_router_l7_router_drv_fail(
-            self, m_cfg, m_get_lbaas_drv):
-
-        m_cfg.ingress.l7_router_uuid = '00EE9E11-91C2-41CF-8FD4-7970579E5C4C'
-        m_cfg.kubernetes.enabled_handlers = ['ocproute', 'ingresslb']
-
-        m_driver = mock.Mock()
-        m_driver.get_lb_by_uuid.return_value = None
-        m_get_lbaas_drv.return_value = m_driver
-
-        ing_ctrl = ingress_ctl.IngressCtrlr.get_instance()
-        ing_ctrl._start_operation_impl()
-        self.assertEqual(ing_ctrl._status, 'DOWN')
-        self.assertIsNotNone(ing_ctrl)
diff --git a/kuryr_kubernetes/tests/unit/platform/__init__.py b/kuryr_kubernetes/tests/unit/platform/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/kuryr_kubernetes/tests/unit/platform/ocp/__init__.py b/kuryr_kubernetes/tests/unit/platform/ocp/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/kuryr_kubernetes/tests/unit/platform/ocp/controller/__init__.py b/kuryr_kubernetes/tests/unit/platform/ocp/controller/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/kuryr_kubernetes/tests/unit/platform/ocp/controller/handlers/__init__.py b/kuryr_kubernetes/tests/unit/platform/ocp/controller/handlers/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/kuryr_kubernetes/tests/unit/platform/ocp/controller/handlers/test_route.py b/kuryr_kubernetes/tests/unit/platform/ocp/controller/handlers/test_route.py
deleted file mode 100644
index acbc0e974..000000000
--- a/kuryr_kubernetes/tests/unit/platform/ocp/controller/handlers/test_route.py
+++ /dev/null
@@ -1,428 +0,0 @@
-# Copyright (c) 2017 RedHat, Inc.
-# All Rights Reserved.
-#
-#    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.
-from kuryr_kubernetes.controller.drivers import base as drv_base
-from kuryr_kubernetes.objects import lbaas as obj_lbaas
-from kuryr_kubernetes.objects import route as obj_route
-from kuryr_kubernetes.platform.ocp.controller.handlers import route as h_route
-from kuryr_kubernetes.tests import base as test_base
-import mock
-
-OCP_ROUTE_PATH_COMP_TYPE = 'STARTS_WITH'
-
-
-class TestOcpRouteHandler(test_base.TestCase):
-
-    @mock.patch('kuryr_kubernetes.controller.drivers.base'
-                '.LBaaSDriver.get_instance')
-    def test_init(self, m_get_drv_lbaas):
-        m_get_drv_lbaas.return_value = mock.sentinel.drv_lbaas
-
-        handler = h_route.OcpRouteHandler()
-        self.assertEqual(mock.sentinel.drv_lbaas, handler._drv_lbaas)
-        self.assertIsNone(handler._l7_router)
-        self.assertIsNone(handler._l7_router_listeners)
-
-    def test_on_present(self):
-        route_event = mock.sentinel.route_event
-        route_spec = mock.sentinel.route_spec
-        route_state = mock.sentinel.route_state
-        route_spec.to_service = mock.sentinel.to_service
-        m_handler = mock.Mock(spec=h_route.OcpRouteHandler)
-        m_handler._get_route_spec.return_value = route_spec
-        m_handler._should_ignore.return_value = False
-        m_handler._get_route_state.return_value = route_state
-        m_handler._l7_router = obj_lbaas.LBaaSLoadBalancer(
-            id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C',
-            project_id='TEST_PROJECT')
-        m_handler._l7_router_listeners = obj_lbaas.LBaaSListener(
-            id='00EE9E11-91C2-41CF-8FD4-7970579E1234',
-            project_id='TEST_PROJECT',
-            name='http_listenr',
-            protocol='http',
-            port=80)
-
-        h_route.OcpRouteHandler.on_present(m_handler, route_event)
-        m_handler._sync_router_pool.assert_called_once_with(
-            route_event, route_spec, route_state)
-        m_handler._sync_l7_policy.assert_called_once_with(
-            route_event, route_spec, route_state)
-        m_handler._sync_host_l7_rule.assert_called_once_with(
-            route_event, route_spec, route_state)
-        m_handler._sync_path_l7_rule.assert_called_once_with(
-            route_event, route_spec, route_state)
-        m_handler._set_route_state.assert_called_once_with(
-            route_event, route_state)
-        m_handler._set_route_spec.assert_called_once_with(
-            route_event, route_spec)
-        m_handler._send_route_notification_to_ep.assert_called_once_with(
-            route_event, route_spec.to_service)
-
-    def test_on_present_no_change(self):
-        route_event = mock.sentinel.route_event
-        route_spec = mock.sentinel.route_spec
-
-        m_handler = mock.Mock(spec=h_route.OcpRouteHandler)
-        m_handler._get_route_spec.return_value = route_spec
-        m_handler._should_ignore.return_value = True
-        m_handler._l7_router = obj_lbaas.LBaaSLoadBalancer(
-            id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C',
-            project_id='TEST_PROJECT')
-
-        m_handler._l7_router_listeners = obj_lbaas.LBaaSListener(
-            id='00EE9E11-91C2-41CF-8FD4-7970579E1234',
-            project_id='TEST_PROJECT',
-            name='http_listenr',
-            protocol='http',
-            port=80)
-
-        h_route.OcpRouteHandler.on_present(m_handler, route_event)
-        m_handler._get_route_spec.assert_called_once_with(
-            route_event)
-        m_handler._sync_router_pool.assert_not_called()
-        m_handler._sync_l7_policy.assert_not_called()
-        m_handler._sync_host_l7_rule.assert_not_called()
-        m_handler._sync_path_l7_rule.assert_not_called()
-        m_handler._set_route_state.assert_not_called()
-        m_handler._set_route_spec.assert_not_called()
-        m_handler._send_route_notification_to_ep.assert_not_called()
-
-    def test_get_endpoints_link_by_route(self):
-        m_handler = mock.Mock(spec=h_route.OcpRouteHandler)
-        route_link = (
-            '/apis/route.openshift.io/v1/namespaces/default/routes/my_route')
-        ep_name = 'my_endpoint'
-        expected_ep_link = '/api/v1/namespaces/default/endpoints/my_endpoint'
-        ret_ep_path = h_route.OcpRouteHandler._get_endpoints_link_by_route(
-            m_handler, route_link, ep_name)
-
-        self.assertEqual(expected_ep_link, ret_ep_path)
-
-    def test_get_endpoints_link_by_route_error(self):
-        m_handler = mock.Mock(spec=h_route.OcpRouteHandler)
-        route_link = '/oapi/v1/namespaces/default/routes/my_route'
-        ep_name = 'wrong_endpoint'
-        expected_ep_link = '/api/v1/namespaces/default/endpoints/my_endpoint'
-        ret_ep_path = h_route.OcpRouteHandler._get_endpoints_link_by_route(
-            m_handler, route_link, ep_name)
-
-        self.assertNotEqual(expected_ep_link, ret_ep_path)
-
-    def test_should_ignore_l7_router_not_exist(self):
-        m_handler = mock.Mock(spec=h_route.OcpRouteHandler)
-        m_handler._l7_router = None
-        route = {'spec': {
-            'host': 'www.test.com', 'path': 'mypath',
-            'to': {'name': 'target_service'}}}
-
-        route_spec = obj_route.RouteSpec(
-            host='www.test.com',
-            path='mypath',
-            to_service='target_service')
-        expected_result = True
-
-        ret_value = h_route.OcpRouteHandler._should_ignore(
-            m_handler, route, route_spec)
-
-        self.assertEqual(ret_value, expected_result)
-
-    def test_should_ignore_l7_router_exist_no_change(self):
-        m_handler = mock.Mock(spec=h_route.OcpRouteHandler)
-        m_handler._l7_router = obj_lbaas.LBaaSLoadBalancer(
-            id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C',
-            project_id='TEST_PROJECT')
-        route = {'spec': {
-            'host': 'www.test.com', 'path': 'mypath',
-            'to': {'name': 'target_service'}}}
-
-        route_spec = obj_route.RouteSpec(
-            host='www.test.com',
-            path='mypath',
-            to_service='target_service')
-        expected_result = True
-        ret_value = h_route.OcpRouteHandler._should_ignore(
-            m_handler, route, route_spec)
-        self.assertEqual(ret_value, expected_result)
-
-    def test_should_ignore_l7_router_exist_with_changes(self):
-        m_handler = mock.Mock(spec=h_route.OcpRouteHandler)
-        m_handler._l7_router = obj_lbaas.LBaaSLoadBalancer(
-            id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C',
-            project_id='TEST_PROJECT')
-        route = {'spec': {
-            'host': 'www.test.com', 'path': 'mypath',
-            'to': {'name': 'target_service'}}}
-        route_spec = obj_route.RouteSpec(
-            host='www.test.com1',
-            path='mypath',
-            to_service='target_service')
-        expected_result = False
-        ret_value = h_route.OcpRouteHandler._should_ignore(
-            m_handler, route, route_spec)
-        self.assertEqual(ret_value, expected_result)
-
-    def test_sync_router_pool_empty_pool(self):
-        m_handler = mock.Mock(spec=h_route.OcpRouteHandler)
-        m_handler._l7_router = obj_lbaas.LBaaSLoadBalancer(
-            id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C',
-            project_id='TEST_PROJECT')
-        m_handler._drv_lbaas = mock.Mock(
-            spec=drv_base.LBaaSDriver)
-        m_handler._drv_lbaas.get_pool_by_name.return_value = None
-        m_handler._drv_lbaas.ensure_pool_attached_to_lb.return_value = None
-
-        route = {'metadata': {'namespace': 'namespace'},
-                 'spec': {'host': 'www.test.com', 'path': 'mypath',
-                          'to': {'name': 'target_service'}}}
-        route_spec = obj_route.RouteSpec(
-            host='www.test.com1',
-            path='mypath',
-            to_service='target_service')
-
-        route_state = obj_route.RouteState()
-
-        h_route.OcpRouteHandler._sync_router_pool(
-            m_handler, route, route_spec, route_state)
-        self.assertIsNone(route_state.router_pool)
-
-    def test_sync_router_pool_valid_pool(self):
-        m_handler = mock.Mock(spec=h_route.OcpRouteHandler)
-        m_handler._l7_router = obj_lbaas.LBaaSLoadBalancer(
-            id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C',
-            project_id='TEST_PROJECT')
-        m_handler._drv_lbaas = mock.Mock(
-            spec=drv_base.LBaaSDriver)
-        ret_pool = obj_lbaas.LBaaSPool(
-            name='TEST_NAME', project_id='TEST_PROJECT', protocol='TCP',
-            listener_id='A57B7771-6050-4CA8-A63C-443493EC98AB',
-            loadbalancer_id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C')
-
-        m_handler._drv_lbaas.get_pool_by_name.return_value = None
-        m_handler._drv_lbaas.ensure_pool_attached_to_lb.return_value = ret_pool
-
-        route = {'metadata': {'namespace': 'namespace'},
-                 'spec': {'host': 'www.test.com', 'path': 'mypath',
-                          'to': {'name': 'target_service'}}}
-        route_spec = obj_route.RouteSpec(
-            host='www.test.com1',
-            path='mypath',
-            to_service='target_service')
-
-        route_state = obj_route.RouteState()
-
-        h_route.OcpRouteHandler._sync_router_pool(
-            m_handler, route, route_spec, route_state)
-        self.assertEqual(route_state.router_pool, ret_pool)
-
-    def test_sync_l7_policy(self):
-        m_handler = mock.Mock(spec=h_route.OcpRouteHandler)
-        m_handler._l7_router = obj_lbaas.LBaaSLoadBalancer(
-            id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C',
-            project_id='TEST_PROJECT')
-        m_handler._drv_lbaas = mock.Mock(
-            spec=drv_base.LBaaSDriver)
-        listener = obj_lbaas.LBaaSListener(
-            id='123443545',
-            name='TEST_NAME', project_id='TEST_PROJECT', protocol='TCP',
-            port=80, loadbalancer_id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C')
-        m_handler._l7_router_listeners = {'80': listener}
-        l7_policy = obj_lbaas.LBaaSL7Policy(
-            id='00EE9E11-91C2-41CF-8FD4-7970579E5C44', name='myname',
-            listener_id='00EE9E11-91C2-41CF-8FD4-7970579E5C45',
-            redirect_pool_id='00EE9E11-91C2-41CF-8FD4-7970579E5C46',
-            project_id='00EE9E11-91C2-41CF-8FD4-7970579E5C46')
-
-        route_state = obj_route.RouteState()
-        m_handler._drv_lbaas.ensure_l7_policy.return_value = l7_policy
-
-        route = {'metadata': {'namespace': 'namespace', 'name': 'name'},
-                 'spec': {'host': 'www.test.com', 'path': 'mypath',
-                          'to': {'name': 'target_service'}}}
-        route_spec = obj_route.RouteSpec(
-            host='www.test.com1',
-            path='mypath',
-            to_service='target_service')
-
-        h_route.OcpRouteHandler._sync_l7_policy(
-            m_handler, route, route_spec, route_state)
-        self.assertEqual(route_state.l7_policy, l7_policy)
-
-    def test_sync_host_l7_rule_already_exist(self):
-        m_handler = mock.Mock(spec=h_route.OcpRouteHandler)
-        m_handler._l7_router = obj_lbaas.LBaaSLoadBalancer(
-            id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C',
-            project_id='TEST_PROJECT')
-        m_handler._drv_lbaas = mock.Mock(
-            spec=drv_base.LBaaSDriver)
-        h_l7_rule = obj_lbaas.LBaaSL7Rule(
-            id='00EE9E11-91C2-41CF-8FD4-7970579E5C44',
-            compare_type='EQUAL_TO',
-            l7policy_id='00EE9E11-91C2-41CF-8FD4-7970579E5C45',
-            type='HOST',
-            value='www.example.com')
-
-        route_state = obj_route.RouteState(h_l7_rule=h_l7_rule)
-        route = {'metadata': {'namespace': 'namespace', 'name': 'name'},
-                 'spec': {'host': 'www.test.com', 'path': 'mypath',
-                          'to': {'name': 'target_service'}}}
-
-        route_spec = obj_route.RouteSpec(
-            host='www.test.com',
-            path='mypath',
-            to_service='target_service')
-
-        h_route.OcpRouteHandler._sync_host_l7_rule(
-            m_handler, route, route_spec, route_state)
-        self.assertEqual(route_state.h_l7_rule, h_l7_rule)
-
-    def test_sync_host_l7_rule_new_host(self):
-        m_handler = mock.Mock(spec=h_route.OcpRouteHandler)
-        m_handler._l7_router = obj_lbaas.LBaaSLoadBalancer(
-            id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C',
-            project_id='TEST_PROJECT')
-        m_handler._drv_lbaas = mock.Mock(
-            spec=drv_base.LBaaSDriver)
-        h_l7_rule = obj_lbaas.LBaaSL7Rule(
-            id='00EE9E11-91C2-41CF-8FD4-7970579E5C44',
-            compare_type='EQUAL_TO',
-            l7policy_id='00EE9E11-91C2-41CF-8FD4-7970579E5C45',
-            type='HOST',
-            value='www.example.com')
-
-        route_state = obj_route.RouteState(h_l7_rule=h_l7_rule)
-
-        route = {'metadata': {'namespace': 'namespace', 'name': 'name'},
-                 'spec': {'host': 'new.www.test.com', 'path': 'mypath',
-                          'to': {'name': 'target_service'}}}
-        route_spec = obj_route.RouteSpec(
-            host='www.test.com',
-            path='mypath',
-            to_service='target_service')
-
-        m_handler._drv_lbaas.ensure_l7_rule.return_value = h_l7_rule
-        h_route.OcpRouteHandler._sync_host_l7_rule(
-            m_handler, route, route_spec, route_state)
-        self.assertEqual(route_state.h_l7_rule.value, route['spec']['host'])
-
-    def test_sync_path_l7_rule(self):
-        m_handler = mock.Mock(spec=h_route.OcpRouteHandler)
-        m_handler._l7_router = obj_lbaas.LBaaSLoadBalancer(
-            id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C',
-            project_id='TEST_PROJECT')
-        m_handler._drv_lbaas = mock.Mock(
-            spec=drv_base.LBaaSDriver)
-
-        l7_policy = obj_lbaas.LBaaSL7Policy(
-            id='00EE9E11-91C2-41CF-8FD4-7970579E6666', name='myname',
-            listener_id='00EE9E11-91C2-41CF-8FD4-7970579E5C45',
-            redirect_pool_id='00EE9E11-91C2-41CF-8FD4-7970579E5C46',
-            project_id='00EE9E11-91C2-41CF-8FD4-7970579E5C46')
-
-        route_state = obj_route.RouteState(
-            l7_policy=l7_policy)
-
-        route = {'metadata': {'namespace': 'namespace', 'name': 'name'},
-                 'spec': {'host': 'new.www.test.com', 'path': '/nice_path',
-                          'to': {'name': 'target_service'}}}
-
-        route_spec = obj_route.RouteSpec(
-            host='www.test.com',
-            path=None,
-            to_service='target_service')
-
-        ret_p_l7_rule = obj_lbaas.LBaaSL7Rule(
-            id='55559E11-91C2-41CF-8FD4-7970579E5C44',
-            compare_type=OCP_ROUTE_PATH_COMP_TYPE,
-            l7policy_id='55559E11-91C2-41CF-8FD4-7970579E5C45',
-            type='PATH',
-            value='/nice_path')
-
-        m_handler._drv_lbaas.ensure_l7_rule.return_value = ret_p_l7_rule
-        h_route.OcpRouteHandler._sync_path_l7_rule(
-            m_handler, route, route_spec, route_state)
-        self.assertEqual(route_state.p_l7_rule, ret_p_l7_rule)
-        m_handler._drv_lbaas.ensure_l7_rule.assert_called_once_with(
-            m_handler._l7_router, route_state.l7_policy,
-            OCP_ROUTE_PATH_COMP_TYPE, 'PATH', route['spec']['path'])
-
-    def test_sync_path_l7_rule_edit_usecase(self):
-        m_handler = mock.Mock(spec=h_route.OcpRouteHandler)
-        m_handler._l7_router = obj_lbaas.LBaaSLoadBalancer(
-            id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C',
-            project_id='TEST_PROJECT')
-        m_handler._drv_lbaas = mock.Mock(
-            spec=drv_base.LBaaSDriver)
-
-        old_p_l7_rule = obj_lbaas.LBaaSL7Rule(
-            id='00EE9E11-91C2-41CF-8FD4-7970579E5C44',
-            compare_type=OCP_ROUTE_PATH_COMP_TYPE,
-            l7policy_id='00EE9E11-91C2-41CF-8FD4-7970579E5C45',
-            type='PATH',
-            value='/cur_path')
-
-        route_state = obj_route.RouteState(p_l7_rule=old_p_l7_rule)
-
-        route = {'metadata': {'namespace': 'namespace', 'name': 'name'},
-                 'spec': {'host': 'new.www.test.com', 'path': '/new_path',
-                          'to': {'name': 'target_service'}}}
-        route_spec = obj_route.RouteSpec(
-            host='www.test.com',
-            path=old_p_l7_rule.value,
-            to_service='target_service')
-
-        ret_p_l7_rule = obj_lbaas.LBaaSL7Rule(
-            id='00EE9E11-91C2-41CF-8FD4-7970579E5C44',
-            compare_type=OCP_ROUTE_PATH_COMP_TYPE,
-            l7policy_id='00EE9E11-91C2-41CF-8FD4-7970579E5C45',
-            type='PATH',
-            value=route['spec']['path'])
-
-        m_handler._drv_lbaas.update_l7_rule.return_value = True
-        h_route.OcpRouteHandler._sync_path_l7_rule(
-            m_handler, route, route_spec, route_state)
-        self.assertEqual(route_state.p_l7_rule.value, ret_p_l7_rule.value)
-        m_handler._drv_lbaas.update_l7_rule.assert_called_once_with(
-            old_p_l7_rule, route['spec']['path'])
-
-    def test_sync_path_l7_rule_route_spec_not_sync(self):
-        m_handler = mock.Mock(spec=h_route.OcpRouteHandler)
-        m_handler._l7_router = obj_lbaas.LBaaSLoadBalancer(
-            id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C',
-            project_id='TEST_PROJECT')
-        m_handler._drv_lbaas = mock.Mock(
-            spec=drv_base.LBaaSDriver)
-
-        old_p_l7_rule = obj_lbaas.LBaaSL7Rule(
-            id='00EE9E11-91C2-41CF-8FD4-7970579E5C44',
-            compare_type=OCP_ROUTE_PATH_COMP_TYPE,
-            l7policy_id='00EE9E11-91C2-41CF-8FD4-7970579E5C45',
-            type='PATH',
-            value='/cur_path')
-
-        route_state = obj_route.RouteState(p_l7_rule=old_p_l7_rule)
-
-        route = {'metadata': {'namespace': 'namespace', 'name': 'name'},
-                 'spec': {'host': 'new.www.test.com', 'path': 'new_path',
-                          'to': {'name': 'target_service'}}}
-
-        route_spec = obj_route.RouteSpec(
-            host='www.test.com',
-            path='/not_cur_path',
-            to_service='target_service')
-        m_handler._drv_lbaas.update_l7_rule.return_value = None
-
-        h_route.OcpRouteHandler._sync_path_l7_rule(
-            m_handler, route, route_spec, route_state)
-        self.assertEqual(route_state.p_l7_rule.value, route['spec']['path'])
-        self.assertEqual(route_spec.path, route['spec']['path'])
diff --git a/kuryr_kubernetes/tests/unit/test_object.py b/kuryr_kubernetes/tests/unit/test_object.py
index 1ec788800..7c83c4189 100644
--- a/kuryr_kubernetes/tests/unit/test_object.py
+++ b/kuryr_kubernetes/tests/unit/test_object.py
@@ -21,22 +21,14 @@ from oslo_versionedobjects import fixture
 # they come with a corresponding version bump in the affected
 # objects
 object_data = {
-    'LBaaSL7Policy':
-    '1.0-3ac4fcd50a555f433a78c67cb6a4cd52',
-    'LBaaSL7Rule': '1.0-276d9d678e1a8fc4b53fdbf3b2ac39ec',
     'LBaaSListener': '1.0-a9e2d5c73687f5edc66fdb2f48650e15',
     'LBaaSLoadBalancer': '1.3-8bc0a9bdbd160da67572aa38784378d1',
     'LBaaSMember': '1.0-a770c6884c27d6d8c21186b27d0e2ccb',
     'LBaaSPool': '1.1-6e77370d7632a902445444249eb77b01',
     'LBaaSPortSpec': '1.1-1b307f34630617086c7af70f2cb8b215',
     'LBaaSPubIp': '1.0-83992edec2c60fb4ab8998ea42a4ff74',
-    'LBaaSRouteNotifEntry': '1.0-dd2f2be956f68814b1f47cb13483a885',
-    'LBaaSRouteNotifier': '1.0-f0bfd8e772434abe7557930d7e0180c1',
-    'LBaaSRouteState': '1.0-bdf561462a2d337c0e0ae8cb10e9ff20',
     'LBaaSServiceSpec': '1.0-d430ecd443f2b1999196bfe531e56f7e',
     'LBaaSState': '1.0-a0ff7dce2d3f6ce1ffab4ff95a344361',
-    'RouteSpec': '1.0-2f02b2e24b1ca2b94c2bbdb718bfc020',
-    'RouteState': '1.0-2475dbeb6ebedabe2a1e235f9bc6b614',
 }
 
 
diff --git a/setup.cfg b/setup.cfg
index ad2ca13f8..4e8a21323 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -98,8 +98,6 @@ kuryr_kubernetes.controller.handlers =
     lbaasspec = kuryr_kubernetes.controller.handlers.lbaas:LBaaSSpecHandler
     lb = kuryr_kubernetes.controller.handlers.lbaas:LoadBalancerHandler
     namespace = kuryr_kubernetes.controller.handlers.namespace:NamespaceHandler
-    ingresslb = kuryr_kubernetes.controller.handlers.ingress_lbaas:IngressLoadBalancerHandler
-    ocproute  = kuryr_kubernetes.platform.ocp.controller.handlers.route:OcpRouteHandler
     policy = kuryr_kubernetes.controller.handlers.policy:NetworkPolicyHandler
     pod_label = kuryr_kubernetes.controller.handlers.pod_label:PodLabelHandler
     kuryrnetpolicy = kuryr_kubernetes.controller.handlers.kuryrnetpolicy:KuryrNetPolicyHandler