Skip to main content
logoTetrate Service BridgeVersion: 1.12.x

Upgrading to Unified Gateway

Unified Gateway replaces the previous Tier1Gateway and IngressGateway installs. If you are running a previous Gateway instance, you can upgrade it to the Unified gateway seamlessly, without incurring any downtime.

How to Upgrade

Version 1.12.x

Note that the process for upgrading gateways in 1.12 and later differs from the process used in earlier releases. This is because of a change in the Istio Operator implementation.

These instructions explain how to upgrade a gateway named app-gw, deployed in the bookinfo namespace. The upgrade is seamless, with no interruption in service.

  1. Check the current state

    Verify that your current gateway is functioning, and make note of any additional configuration that you will need to apply to the new gateway, such as cloud-provider specific annotations or gslb.tetrate.io/name annotations:

    Get current ingress gateway configuration
    kubectl get ingressgateway.install.tetrate.io app-gw -n bookinfo -o yaml
    # Expected Output
    # apiVersion: install.tetrate.io/v1alpha1
    # kind: IngressGateway
    # metadata:
    # annotations:
    # kubectl.kubernetes.io/last-applied-configuration: |
    # {"apiVersion":"install.tetrate.io/v1alpha1","kind":"IngressGateway","metadata":{"annotations":{},"name":"app-gw","namespace":"bookinfo"},"spec":{"kubeSpec":{"service":{"annotations":{"service.beta.kubernetes.io/aws-load-balancer-scheme":"internet-facing"},"type":"LoadBalancer"}}}}
    # ...

    Observe the name of the istiooperator that manages this gateway:

    List IstioOperator resources
    kubectl get iop -n istio-system
    # Expected Output
    # NAME REVISION STATUS AGE
    # xcp-iop-default HEALTHY 3h19m
    # xcpgw-ingress-e1a064b1-50d7-4e66-b405-f719e0b01c31 HEALTHY 172m
  2. Apply the new Unified Gateway install, using the same name.

    Apply the new Unified Gateway manifest, including the additional configuration noted above.

    Apply new Unified Gateway manifest
    cat <<EOF > my-unified-gateway.yaml
    apiVersion: install.tetrate.io/v1alpha1
    kind: Gateway
    metadata:
    name: app-gw
    spec:
    type: UNIFIED
    kubeSpec:
    service:
    type: LoadBalancer
    annotations:
    service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
    EOF

    kubectl apply -n bookinfo -f my-unified-gateway.yaml

    Observe the name of the istiooperator that manages the new gateway:

    Verify that the new istiooperator has been started
    kubectl get iop -n istio-system
    # Expected Output:
    # NAME REVISION STATUS AGE
    # xcp-iop-default HEALTHY 3h23m
    # xcpgw-ingress-e1a064b1-50d7-4e66-b405-f719e0b01c31 HEALTHY 177m
    # xcpgw-unified-44c6e3e5-85d4-40a0-8f87-b007ae0e4989 HEALTHY 33s
  3. Scale down XCP Operator Edge and delete the old Tier1 GW install resources

    Scale down the XCP Operator Edge service:

    Scale down XCP Operator Edge
    kubectl scale -n istio-system deployment/xcp-operator-edge --replicas=0
    # deployment.apps/xcp-operator-edge scaled

    Delete the old Tier1 or Ingress gateway install resource

    Delete old gateway instance
    kubectl delete ingressgateway.install.tetrate.io app-gw -n bookinfo
  4. Edit the XCP Gateway Install CR and delete the finalizer

    Remove the finalizer from the XCP Gateway Install custom resource:

    Find the appropriate XCP Gateway Install CR
    kubectl get ingressdeployments.install.xcp.tetrate.io -n istio-system -l install.tetrate.io/owner-name=app-gw
    # Expected Output
    # NAME AGE
    # ingress-fc5a4bd3-3023-4388-9696-ee3922f800ae 141m

    Edit the CR, and remove the highlighted finalizer value:

    Edit the CR and remove the highlighted line
    kubectl edit ingressdeployments.install.xcp.tetrate.io -n istio-system ingress-fc5a4bd3-3023-4388-9696-ee3922f800ae

    # ---Editing session follows---

    # Please edit the object below. Lines beginning with a '#' will be ignored,
    # and an empty file will abort the edit. If an error occurs while saving this file will be
    # reopened with the relevant failures.
    #
    apiVersion: install.xcp.tetrate.io/v1alpha1
    kind: IngressDeployment
    metadata:
    annotations:
    tsb.tetrate.io/contentHash: a4112bb79e6f3832
    creationTimestamp: "2025-03-17T13:18:20Z"
    deletionGracePeriodSeconds: 0
    deletionTimestamp: "2025-03-17T15:30:49Z"
    finalizers:
    - gateway.install.xcp.tetrate.io
    generation: 3
    labels:
    install.tetrate.io/owner-kind: IngressGateway
    install.tetrate.io/owner-name: app-gw
    install.tetrate.io/owner-namespace: bookinfo
    install.tetrate.io/owner-version: v1alpha1
    ...

    Save your changes, then verify that the CR has been deleted:

    Verify that the CR has been deleted
    kubectl get ingressdeployments.install.xcp.tetrate.io -n istio-system -l install.tetrate.io/owner-name=app-gw
    # Expected output
    # No resources found in istio-system namespace.
  5. Scale up XCP Operator Edge to its previous state

    Scale the XCP Operator Edge to 1 replica, restoring its operation:

    Scale up XCP Operator Edge
    kubectl scale -n istio-system deployment/xcp-operator-edge --replicas=1
    # deployment.apps/xcp-operator-edge scaled

    Once the Edge Operator is up, it will delete the old gateway install IOP from the cluster:

    Observe that the xcp-ingress install iop has been removed
    kubectl get iop -n istio-system
    # Expected Output:
    # NAME REVISION STATUS AGE
    # xcp-iop-default HEALTHY 3h23m
    # xcpgw-unified-44c6e3e5-85d4-40a0-8f87-b007ae0e4989 HEALTHY 33s

You have successfully migrated the gateway from legacy to the new Unified type, without any loss of service.