[Yandex Cloud documentation](../../index.md) > [Yandex Application Load Balancer](../index.md) > Tools for Managed Service for Kubernetes > Ingress controller > Upgrading an ingress controller

# Upgrading an Application Load Balancer Ingress controller for Managed Service for Kubernetes

# Upgrading an Application Load Balancer Ingress controller for Managed Service for Kubernetes

{% note tip %}

We recommend using the new [Yandex Cloud Gwin](../tools/gwin/index.md) controller instead of an ALB Ingress controller and Gateway API.

{% endnote %}

[ALB Ingress Controller](https://yandex.cloud/en/marketplace/products/yc/alb-ingress-controller) versions 0.2.0 and newer are incompatible with any 0.1.x releases. This incompatibility causes [backend groups](../tools/k8s-ingress-controller/principles.md) limitations.

One method for creating a backend group involves specifying [rules](../k8s-ref/ingress.md#rule) directly in the `Ingress` resource. Pre-0.2.0 ALB Ingress Controller versions map each backend group to a distinct combination of `host`, `http.paths.path`, and `http.paths.pathType` values. ALB Ingress Controllers v0.2.0 and later map backend groups to the `backend.service` setting of the `Ingress` resource. This setting specifies a [Kubernetes service](../../managed-kubernetes/concepts/service.md). For more information about `Ingress` resource configuration and settings, see [this Kubernetes article](https://kubernetes.io/docs/concepts/services-networking/ingress/).

When upgrading your ALB Ingress Controller from version 0.1.x to 0.2.0 or later, check whether any of the following scenarios apply to your `Ingress` resource groups, i.e., `Ingress` resources with matching `ingress.alb.yc.io/group-name` values:

* They are configured with the same `host`, `http.paths.path`, and `http.paths.pathType` combinations, but different `backend.service.name`, i.e., Kubernetes service, values. In this case, recreate your backend groups using the [HttpBackendGroup](../k8s-ref/http-backend-group.md) objects.

* There is one Kubernetes service per multiple `host`, `http.paths.path`, and `http.paths.pathType` combinations. In this case, check whether their `backend` settings differ. For example, one `Ingress` resource group can establish gRPC connections, while another group, HTTP connections.

   If the backend settings match, no configuration changes are needed. If they differ, follow the steps below:

   1. Create an individual `Service` configuration file for each `Ingress` resource group and specify the following settings:

      * Service name: Use a different name for each service.
      * `Deployment` name: This name must be the same for all services, as you previously used only one Kubernetes service.
      * Backend settings differing between `Ingress` resource groups.

      {% cut "Configuration file example" %}

      ```yaml
      apiVersion: v1
      kind: Service
      metadata:
        name: alb-demo-service-1 # Specify different names for each service.
      spec:
        selector:
          app: alb-demo-app # Specify the same Deployment for each service.
        type: NodePort
        ports:
          ... # Specify the settings differing for Ingress resource groups.
      ```

      {% endcut %}

   1. Apply the configurations:

      ```bash
      kubectl apply -f <configuration_file_names>
      ```

   1. Change Kubernetes service names in the `Ingress` resources. In the `backend.service.name` setting, specify the service name associated with the `Ingress` resource’s group.
   1. Apply the updated `Ingress` resource configurations:

      ```bash
      kubectl apply -f <Ingress_resource_file_names>
      ```

{% note info %}

If you cannot change the `Ingress` resource configuration, do not upgrade the ALB Ingress Controller, or it will lead to collisions.

{% endnote %}