Help Center/ Application Service Mesh/ User Guide/ Mesh Configuration/ Upgrades/ Upgrading v1.3 to v1.8 to Allow VirtualService to Support Delegate Switchover
Updated on 2024-10-08 GMT+08:00

Upgrading v1.3 to v1.8 to Allow VirtualService to Support Delegate Switchover

Scenarios

By default, the mesh of v1.8 supports the Delegate function of VirtualService, and the ASM console supports only the VirtualService in Delegate format. The upgrade does not modify your VirtualService, but you cannot maintain the route on the page after the upgrade. Therefore, you need to modify your VirtualService according to this section.

For details about Delegate, see the description in the Istio community.

https://istio.io/latest/docs/reference/config/networking/virtual-service/#Delegate

Constraints

  • Delegate can be set only when route and redirect are left blank.
  • ASM supports only 1-level Delegate. Multi-level Delegate does not take effect.
  • HTTPMatchRequest of Delegate VirtualService must be a subset of root VirtualService.
  • The Delegate feature is valid only for HTTP and gRPC protocols.

Procedure

The modification involves two scenarios. The following uses the Tomcat service added to a mesh as an example.

Scenario 1: If no gateway is added to the service before the upgrade, you can skip the following operations after the upgrade.

Scenario 2: If a gateway is added to the service before the upgrade, perform the following operations after the upgrade.

  1. Configure the kubectl command for the cluster where the mesh is located. For details, see the cluster details on the CCE console.
  2. Create two VirtualService YAML files in the istio-system namespace.

    File name: tomcat-default-gateway.yaml

    To be more specific:

    • tomcat: name of the service to be modified.
    • tomcat-default-gateway: name of the VirtualService. The format is {Service name}-default-gateway.
    • tomcat-route: name of the VirtualService to be modified.
    • 100.85.219.117: ELB IP address.
    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: tomcat-default-gateway
      namespace: istio-system
    spec:
      gateways:
      - istio-system/tomcat-default-gateway
      hosts:
      - 100.85.219.117
      http:
      - delegate:
          name: tomcat-route
          namespace: default
        match:
        - uri:
            prefix: /test
    

    File name: tomcat-route-default.yaml

    To be more specific:

    • tomcat: name of the service to be modified.
    • tomcat-route-default: name of the VirtualService. The format is {Service name}-route-default.
    • tomcat-route: name of the VirtualService to be modified.
    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: tomcat-route-default
      namespace: istio-system
    spec:
      hosts:
      - tomcat.default.svc.cluster.local
      http:
      - delegate:
          name: tomcat-route
          namespace: default
        match:
        - uri:
            prefix: /
    

    Run the following commands to create a VirtualService:

    kubectl create -f tomcat-route-default.yaml

    kubectl create -f tomcat-default-gateway.yaml

  3. Run the kubectl -n{namespace} get vs command to obtain the VirtualService of the service and run the kubectl -n{namespace} edit vs tomcat-route command to modify it as follows:
    1. Delete spec.gateways, spec.hosts, and spec.http.match.uri.
    2. Replace tomcat-default-gateway.istio-system.svc.cluster.local with istio-system/tomcat-default-gateway.
    3. Change apiVersion: networking.istio.io/v1alpha3 to apiVersion: networking.istio.io/v1beta1.
    4. destination.host: The format is {Service name}.{namespace}.svc.cluster.local.
    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: tomcat-route
      namespace: default
    spec:
      gateways:
      - tomcat-default-gateway.istio-system.svc.cluster.local
      - mesh
      hosts:
      - tomcat
     - 100.85.219.117 # spec.gateways and spec.hosts need to be deleted.
      http:
      - match:
        - gateways:
          - istio-system/tomcat-default-gateway
          port: 5555
          uri:
            prefix: /test # spec.http.match.uri needs to be deleted.
        route:
        - destination:
            host: tomcat.default.svc.cluster.local
            port:
              number: 8080
            subset: v1
      - match:
        - gateways:
          - mesh
          port: 8080
        route:
        - destination:
            host: tomcat.default.svc.cluster.local
            port:
              number: 8080
            subset: v1
  4. Click External Access URL on the service list page to check whether it can be accessed normally.

  5. On the Service Gateway page, check whether the service gateway route is displayed properly.