Upgrade Gloo Mesh

Upgrade minor and patch versions for the Gloo Mesh management server and agent.

During the upgrade, the data plane continues to run, but you might not be able to modify the configurations through the management plane. Because zero downtime is not guaranteed, try testing the upgrade in a staging environment before upgrading your production environment.

Before you begin

  1. Review the changelog. Focus especially on any Breaking Changes that might require a different upgrade procedure.

    • Default Gloo Platform add-ons namespace removed: In previous releases, all add-ons were automatically installed to the gloo-mesh-addons namespace unless you specified a different namespace during the Gloo Mesh Enterprise installation. Starting with release v2.5.0, this default value is removed. If no value is set in the common.addonsNamespace Helm field, your add-ons are now deployed to the namespace that the Helm release is installed to. To avoid disruptions or downtime for your add-on components, such as a rate limit server, set the namespace you want your add-ons to be installed to in the common.addonsNamespace field of your Helm values file.
    • Prometheus annotations removed: In Gloo Mesh Enterprise version 2.5.0, the prometheus.io/port: "<port_number>" annotation was removed from the Gloo management server and agent. However, the prometheus.io/scrape: true annotation is still present. If you have another Prometheus instance that runs in your cluster, and it is not set up with custom scraping jobs for the Gloo management server and agent, the instance automatically scrapes all ports on the management server and agent pods. This can lead to error messages in the management server and agent logs. To resolve this issue, see Run another Prometheus instance alongside the built-in one.
  2. Check that your underlying Kubernetes platform and Istio service mesh run supported versions for the Gloo Mesh Enterprise version that you want to upgrade to.

    1. Review the supported versions.
    2. Compare the supported version against the versions of Kubernetes and Istio that you run in your clusters.
    3. If necessary, upgrade Istio or Kubernetes to a version that is supported by the Gloo Mesh Enterprise version that you want to upgrade to.
  3. Set the Gloo Mesh version that you want to upgrade to as an environment variable. The latest version is used as an example. You can find other versions in the Changelog documentation. Append ‘-fips’ for a FIPS-compliant image, such as ‘2.5.0-fips’. Do not include v before the version number.

    export UPGRADE_VERSION=2.5.0
    

Step 1: Upgrade Gloo CRDs

Looking to update certain Helm chart values but not the version? Skip to step 2.

  1. Update the Helm repository for Gloo Platform.

    helm repo add gloo-platform https://storage.googleapis.com/gloo-platform/helm-charts
    helm repo update
    
  2. Apply the Gloo custom resource definitions (CRDs) for the target version by upgrading your gloo-platform-crds Helm release in the management cluster.

    helm upgrade gloo-platform-crds gloo-platform/gloo-platform-crds \
       --kube-context $MGMT_CONTEXT \
       --namespace=gloo-mesh \
       --version=$UPGRADE_VERSION
    
  3. Upgrade your gloo-platform-crds Helm release in each workload cluster. Remember to change the context for each workload cluster that you upgrade.

    helm upgrade gloo-platform-crds gloo-platform/gloo-platform-crds \
       --kube-context $REMOTE_CONTEXT \
       --namespace=gloo-mesh \
       --version=$UPGRADE_VERSION
    

Step 2: Get your Helm chart values

As part of the upgrade, you can update or reuse the Helm chart values for your Gloo management server, agent, and any add-ons that you might have such as rate limiting and external authentication services.

  1. Get the Helm values files for your current version.

    1. Get your current values for the management cluster. Note that if you migrated from the legacy Helm charts, your Helm release might be named gloo-mgmt or gloo-mesh-enterprise instead.
      helm get values gloo-platform -n gloo-mesh -o yaml --kube-context $MGMT_CONTEXT > mgmt-server.yaml
      open mgmt-server.yaml
      
    2. Get your current values for the workload clusters. Note that if you migrated from the legacy Helm charts, your Helm release might be named gloo-agent or gloo-mesh-agent instead.
      helm get values gloo-platform -n gloo-mesh -o yaml --kube-context $REMOTE_CONTEXT > agent.yaml
      open agent.yaml
      
    3. Optional: If you maintain a separate gloo-agent-addons Helm release, get the values for that Helm release too, and delete the first line that contains USER-SUPPLIED VALUES:.
      helm get values gloo-agent-addons -n gloo-mesh-addons -o yaml --kube-context $REMOTE_CONTEXT > gloo-agent-addons.yaml
      open gloo-agent-addons.yaml
      
  2. Compare your current Helm chart values with the version that you want to upgrade to. You can get a values file for the upgrade version with the helm show values command.

    helm show values gloo-platform/gloo-platform --version $UPGRADE_VERSION > all-values.yaml
    
  3. Review the changelog for any Helm Changes that might require modifications to your Helm chart. For example, the following Helm chart updates might impact your upgrade from an earlier version to Gloo 2.5.0, especially if you try to reuse your existing Helm values file.

    • Default Gloo Platform add-ons namespace removed: In previous releases, all add-ons were automatically installed to the gloo-mesh-addons namespace unless you specified a different namespace during the Gloo Mesh Enterprise installation. Starting with release v2.5.0, this default value is removed. If no value is set in the common.addonsNamespace Helm field, your add-ons are now deployed to the namespace that the Helm release is installed to. To avoid disruptions or downtime for your add-on components, such as a rate limit server, set the namespace you want your add-ons to be installed to in the common.addonsNamespace field of your Helm values file.
    • Gloo agent health check port: Because you can now run the Gloo agent as a sidecar container in the management server pod, the default Gloo agent health check port is changed from 8090 to 8091. If you health check the Gloo agent directly, update the port.
    • Gloo UI graph: To use the Gloo UI graph to visualize the network traffic in your environment, you must set the telemetryCollector.enabled Helm setting to true in each cluster in your environment, including the management cluster. Be sure to add this setting in your Helm values for the management cluster, if it is not already enabled.
    • Portal logs pipeline: The Gloo telemetry pipeline istio_access_logs is renamed to logs/portal. If you use the telemetryCollectorCustomization.pipelines.logs/istio_access_logs.enabled=true setting in your Helm values file, update the setting to telemetryCollectorCustomization.pipelines.logs/portal.enabled=true. For more information, see Monitor Portal analytics in the Gloo Gateway docs.
    • Sidecar acceleration: Support for the eBPF-based acceleration alpha feature is removed.
  4. Edit the Helm values files or prepare the --set flags to make any changes that you want. If you do not want to use certain settings, comment them out.

Updating values in the istioInstallations section? See Upgrade managed Istio for special instructions.

Step 3: Upgrade and verify the Helm installation

You must always upgrade the Gloo management server before upgrading the Gloo agent to avoid unexpected behavior. Note that only n-1 minor version skew is supported between the management server and the agent. For more information, see the Skew policy.

  1. Upgrade the Gloo Mesh Helm installation. Make sure to include your Helm values when you upgrade either as a configuration file in the --values flag or with --set flags. Otherwise, any previous custom values that you set might be overwritten. In single cluster setups, this might mean that your Gloo agent and ingress gateways are removed.

    1. Upgrade your Helm release in the management cluster. Change the release name as needed.
      helm upgrade gloo-platform gloo-platform/gloo-platform \
         --kube-context $MGMT_CONTEXT \
         --namespace gloo-mesh \
         -f mgmt-server.yaml \
         --version $UPGRADE_VERSION
      
    2. Upgrade your Helm release in each workload cluster. Change the release name as needed. Be sure to update the cluster context for each workload cluster that you repeat this command for.
      helm upgrade gloo-platform gloo-platform/gloo-platform \
         --kube-context $REMOTE_CONTEXT \
         --namespace gloo-mesh \
         -f agent.yaml \
         --version $UPGRADE_VERSION
      
    3. Optional: If you migrated from the legacy Helm charts and maintained a separate gloo-agent-addons Helm release during the migration, upgrade that Helm release in each workload cluster too. Be sure to update the cluster context for each workload cluster that you repeat this command for.
      helm upgrade gloo-agent-addons gloo-platform/gloo-platform \
         --kube-context $REMOTE_CONTEXT \
         --namespace gloo-mesh-addons \
         -f gloo-agent-addons.yaml \
         --version $UPGRADE_VERSION
      
  2. Optional: Check that the Gloo management and agent resources are connected.

    meshctl check --kubecontext $MGMT_CONTEXT
    
  3. Confirm that the server components such as gloo-mesh-mgmt-server run the version that you upgraded to.

    meshctl version --kubecontext $MGMT_CONTEXT
    

    Example output:

       "server": [
       {
         "Namespace": "gloo-mesh",
         "components": [
           {
             "componentName": "gloo-mesh-mgmt-server",
             "images": [
                {
                 "name": "gloo-mesh-mgmt-server",
                 "domain": "gcr.io",
                 "path": "gloo-mesh-mgmt-server",
                 "version": "2.5.0"
               }
             ]
           },
       

  4. Confirm that the agent components such as gloo-mesh-agent run the version that you upgraded to.

    meshctl version --kubecontext $REMOTE_CONTEXT
    

    Example output:

       {
             "componentName": "gloo-mesh-agent",
             "images": [
               {
                 "name": "gloo-mesh-agent",
                 "domain": "gcr.io",
                 "path": "gloo-mesh/gloo-mesh-agent",
                 "version": "2.5.0"
               }
             ]
           },
       

Next steps

Now that you upgraded Gloo Mesh Enterprise, you must upgrade your meshctl CLI to the matching version. Depending on the Gloo Mesh Enterprise version support, you might also want to upgrade Istio or Kubernetes in your clusters.

  1. Upgrade the meshctl CLI to the same version of Gloo Mesh.
  2. Optional: If the new version of Gloo Mesh supports a more recent version of Istio, you can upgrade Istio.
  3. Optional: If the new version of Gloo Mesh supports a more recent version of Kubernetes, you can upgrade Kubernetes on your cluster. For more information, consult your cluster infrastructure provider.

Upgrade managed Istio in your gloo-platform Helm chart

The steps in this section upgrade Istio installations that are managed by the istioInstallations section of your Gloo Platform Helm chart. If you directly created IstioLifecycleManager and GatewayLifecycleManager CRs to manage the Istio control planes and gateways instead of using the Helm chart option, follow the Upgrade Gloo Mesh-managed Istio guide instead.

During step 2 of the Helm upgrade process, you might make changes to the istioInstallations section of your Helm values file to update your Istio control plane and gateways. Depending on the type of change, you apply updates to the installations in one of the following ways:

Istio 1.20 is supported only as patch version 1.20.1-patch1 and later. Do not use patch versions 1.20.0 and 1.20.1, which contain bugs that impact several Gloo Platform features that rely on Istio ServiceEntries.

Revisioned canary upgrades (recommended)

In a canary upgrade, you install another Istio installation (canary) alongside your active installation. Each installation is revisioned so that you can easily identify and verify the separate settings and resources for each installation. Note that during a canary upgrade, the validating admissions webhook is enabled only for the canary installation to prevent issues that occur when multiple webhooks are enabled.

Perform a canary upgrade when you change one of the following fields:

To perform a canary upgrade:

  1. OpenShift only: Elevate the permissions of the service account that will be created for the new revision's operator project. This permission allows the Istio sidecar to make use of a user ID that is normally restricted by OpenShift. Replace the revision with the revision you plan to use.

    oc adm policy add-scc-to-group anyuid system:serviceaccounts:gm-iop-1-20 --context $REMOTE_CONTEXT1
    oc adm policy add-scc-to-group anyuid system:serviceaccounts:gm-iop-1-20 --context $REMOTE_CONTEXT2
    
  2. Follow the steps in this guide to perform a regular upgrade of your Gloo Mesh installation. When you edit the istioInstallations.controlPlane and istioInstallations.eastWestGateways sections of your Helm values file, add another installation entry for the canary revision, and leave the entry your your current installation as-is. For the canary revision, be sure to set defaultRevision and activeGateway to false so that only the existing revisions continue to run.

    For example, you might add the following installation entries for the Istio control plane and east-west gateway alongside your existing entries. If you have a Gloo Gateway license, you might also have entries for the ingress gateway proxy in the nothSouthGateways section too.

    istioInstallations:
        controlPlane:
            enabled: true
            installations:
                # EXISTING revision
                - clusters:
                      # Keep this field set to TRUE
                    - defaultRevision: true
                      name: cluster1
                      trustDomain: ""
                  istioOperatorSpec:
                    hub: $REPO
                    tag: 1.19.5-solo
                    profile: minimal
                    namespace: istio-system
                    ...
                  revision: 1-19
                # NEW revision
                - clusters:
                      # Set this field to FALSE
                    - defaultRevision: false
                      name: cluster1
                      trustDomain: ""
                  istioOperatorSpec:
                    hub: $REPO
                    tag: 1.20.2-solo
                    profile: minimal
                    namespace: istio-system
                    ...
                  revision: 1-20
        eastWestGateways:
            - enabled: true
              installations:
                # EXISTING revision
                - clusters:
                      # Keep this field set to TRUE
                    - activeGateway: true
                      name: cluster1
                      name: 
                      trustDomain: ""
                  gatewayRevision: 1-19
                  istioOperatorSpec:
                    hub: $REPO
                    tag: 1.19.5-solo
                    profile: empty
                    namespace: gloo-mesh-gateways
                    ...
                # NEW revision
                - clusters:
                      # Set this field to FALSE
                    - activeGateway: false
                      name: cluster1
                      name: 
                      trustDomain: ""
                  gatewayRevision: 1-20
                  istioOperatorSpec:
                    hub: $REPO
                    tag: 1.20.2-solo
                    profile: empty
                    namespace: gloo-mesh-gateways
                    ...
              name: istio-eastwestgateway
        enabled: true
    

    Updating the minor version of Istio? In your canary revision section, be sure to update both the repo key in the hub field, and the Istio version in the tag field. You can get the repo key for the Istio version that you want to install from the Istio images built by Solo.io support article.

    For most use cases, you can set the revision and the gatewayRevision to the same version. However, gateway installations can point to any istiod control plane revision by using the controlPlaneRevision field. For simplicity, if you do not specify controlPlaneRevision, the gateway installation uses a control plane with the same revision as itself.

  3. After you apply the Helm upgrade with your updated values file, verify that Istio resources for the canary installation are created. For example, if you updated the Istio minor version to 1-20, verify that resources are created in the gm-iop-1-20 namespace, and that resources for 1-20 are created alongside the existing resources for the previous version in the istio-system and gloo-mesh-gateways namespaces. Note that the gateway load balancers for the canary revision contain the revision in the name, such as istio-eastwestgateway-1-20.

    kubectl get all -n gm-iop-1-20 --context $REMOTE_CONTEXT
    kubectl get all -n istio-system --context $REMOTE_CONTEXT
    kubectl get all -n gloo-mesh-gateways --context $REMOTE_CONTEXT
    
  4. After performing any necessary testing, switch to the new Istio control plane and gateway revisions.

    1. Get your Helm values file. Change the release name as needed.
      helm get values gloo-platform -n gloo-mesh -o yaml > mgmt-server.yaml
      open mgmt-server.yaml
      
    2. Change defaultRevision and activeGateway to false for the old revision and to true for the new revision.
      New load balancers are created for the canary gateways. To instead change the control plane revision in use by the existing gateway load balancers, you can set the istio.io/rev label on the gateway deployment, which triggers a rolling restart.
      istioInstallations:
          controlPlane:
              enabled: true
              installations:
                  # OLD revision
                  - clusters:
                        # Set this field to FALSE
                      - defaultRevision: false
                        name: cluster1
                        trustDomain: ""
                    istioOperatorSpec:
                      hub: $REPO
                      tag: 1.19.5-solo
                      profile: minimal
                      namespace: istio-system
                      ...
                    revision: 1-19
                  # NEW revision
                  - clusters:
                        # Set this field to TRUE
                      - defaultRevision: true
                        name: cluster1
                        trustDomain: ""
                    istioOperatorSpec:
                      hub: $REPO
                      tag: 1.20.2-solo
                      profile: minimal
                      namespace: istio-system
                      ...
                    revision: 1-20
          eastWestGateways:
              - enabled: true
                installations:
                  # OLD revision
                  - clusters:
                        # Set this field to FALSE
                      - activeGateway: false
                        name: cluster1
                        name: 
                        trustDomain: ""
                    gatewayRevision: 1-19
                    istioOperatorSpec:
                      hub: $REPO
                      tag: 1.19.5-solo
                      profile: empty
                      namespace: gloo-mesh-gateways
                      ...
                  # NEW revision
                  - clusters:
                        # Set this field to TRUE
                      - activeGateway: true
                        name: cluster1
                        name: 
                        trustDomain: ""
                    gatewayRevision: 1-20
                    istioOperatorSpec:
                      hub: $REPO
                      tag: 1.20.2-solo
                      profile: empty
                      namespace: gloo-mesh-gateways
                      ...
                name: istio-eastwestgateway
          enabled: true
      
    3. Upgrade your Helm release. Change the release name as needed.
      helm upgrade gloo-platform gloo-platform/gloo-platform \
         --namespace gloo-mesh \
         -f mgmt-server.yaml \
         --version $UPGRADE_VERSION
      
  5. After your Helm upgrade completes, verify that the active gateways for the new revision are created, which do not have the revision appended to the name. Note that gateways for the inactive revision that you previously ran also exist in the namespace, in the case that a rollback is required.

    kubectl get all -n gloo-mesh-gateways
    

    Example output, in which the active gateway (istio-eastwestgateway) for the new revision and inactive gateway (such as istio-eastwestgateway-1-19) for the old revision are created:

    NAME                            TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)     
    istio-eastwestgateway            LoadBalancer   10.44.4.140   34.150.235.221   15021:31321/TCP,80:32525/TCP,443:31826/TCP   48s                                                 AGE
    istio-eastwestgateway-1-19       LoadBalancer   10.56.15.36    34.145.163.61   15021:31936/TCP,80:30196/TCP,443:32286/TCP,15443:31851/TCP   45s
    
  6. Upgrade your apps’ Istio sidecars.

    1. For any namespace where you run Istio-managed apps, change the label to use the new revision. For example, you might update the bookinfo namespace for the canary revision 1-20.
      If you did not previously use revision labels for your apps, you can upgrade your application's sidecars by running ‘kubectl label ns bookinfo istio-injection-’ and ‘kubectl label ns bookinfo istio.io/rev=’.
      kubectl label ns bookinfo --overwrite istio.io/rev=1-20
      
      kubectl label ns bookinfo --overwrite istio.io/rev=1-20 --context $REMOTE_CONTEXT1
      kubectl label ns bookinfo --overwrite istio.io/rev=1-20 --context $REMOTE_CONTEXT2
      
    2. Update any Istio-managed apps by rolling out restarts. The Istio sidecars for each microservice are updated to use the new Istio version. Make sure that you only restart one microservice at a time. For example, in the following commands to update the Bookinfo microservices, 20 seconds elapse between each restart to ensure that the pods have time to start running.
      kubectl rollout restart deployment -n bookinfo details-v1
      sleep 20s
      kubectl rollout restart deployment -n bookinfo productpage-v1
      sleep 20s
      kubectl rollout restart deployment -n bookinfo reviews-v1
      sleep 20s
      kubectl rollout restart deployment -n bookinfo reviews-v2
      sleep 20s
      kubectl rollout restart deployment -n bookinfo reviews-v3
      sleep 20s
      kubectl rollout restart deployment -n bookinfo ratings-v1
      sleep 20s
      
      kubectl rollout restart deployment -n bookinfo details-v1 --context $REMOTE_CONTEXT1
      sleep 20s
      kubectl rollout restart deployment -n bookinfo ratings-v1 --context $REMOTE_CONTEXT1
      sleep 20s
      kubectl rollout restart deployment -n bookinfo productpage-v1 --context $REMOTE_CONTEXT1
      sleep 20s
      kubectl rollout restart deployment -n bookinfo reviews-v1 --context $REMOTE_CONTEXT1
      sleep 20s
      kubectl rollout restart deployment -n bookinfo reviews-v2 --context $REMOTE_CONTEXT1
      sleep 20s
      kubectl rollout restart deployment -n bookinfo reviews-v3 --context $REMOTE_CONTEXT2
      sleep 20s
      kubectl rollout restart deployment -n bookinfo ratings-v1 --context $REMOTE_CONTEXT2
      sleep 20s
      
    3. Verify that your workloads and new gateways point to the new revision.
      istioctl proxy-status
      
      istioctl proxy-status --context $REMOTE_CONTEXT1
      
      Example output:
      NAME                                                              CLUSTER     ...     ISTIOD                         VERSION
      details-v1-7b6df9d8c8-s6kg5.bookinfo                              cluster1    ...     istiod-1-20-7c8f6fd4c4-m9k9t     1.20.2-solo
      istio-eastwestgateway-1-20-bdc4fd65f-ftmz9.gloo-mesh-gateways     cluster1    ...     istiod-1-20-6495985689-rkwwd     1.20.2-solo
      productpage-v1-bb494b7d7-xbtxr.bookinfo                           cluster1    ...     istiod-1-20-7c8f6fd4c4-m9k9t     1.20.2-solo
      ratings-v1-55b478cfb6-wv2m5.bookinfo                              cluster1    ...     istiod-1-20-7c8f6fd4c4-m9k9t     1.20.2-solo
      reviews-v1-6dfcc9fc7d-7k6qh.bookinfo                              cluster1    ...     istiod-1-20-7c8f6fd4c4-m9k9t     1.20.2-solo
      reviews-v2-7dddd799b5-m5n2z.bookinfo                              cluster1    ...     istiod-1-20-7c8f6fd4c4-m9k9t     1.20.2-solo
      
  7. To uninstall the previous installations, or if you need to uninstall the canary installations, you can edit your Helm values file to remove the revision entries from the istioInstallations.controlPlane.installations and istioInstallations.northSouthGateways.installations lists. Then, upgrade your Gloo Mesh Helm release with your updated values file.

In-place upgrades

In an in-place upgrade, Gloo upgrades your existing control plane or gateway installations. Note that in production environments, canary upgrades are recommended for updating the minor version. However, you might want to use in-place upgrades for patch versions or changes within the same minor version. Be sure to test in-place upgrades in development or staging environments first.

In-place upgrades behave differently based on whether your installation is revisionless or revisioned.

Revisionless installations (testing only): If your testing-only installation is revisionless (your settings omit the revision and gatewayRevision fields), in-place upgrades are triggered when you apply changes to any field in the istioInstallations section.

Revisioned installations: If your installation is revisioned, in-place upgrades are triggered only when you apply changes to one of the following fields in the istioInstallations section. Otherwise, a canary upgrade is required.

To trigger an in-place upgrade:

  1. Follow the steps in this guide to perform a regular upgrade of your Gloo Mesh installation and include your Istio changes in your Helm values file. For example, in a single-cluster setup, you might edit your Helm values file to update the patch version of Istio in the istioInstallations.controlPlane.installations.istioOperatorSpec.tag and istioInstallations.northSouthGateways.installations.istioOperatorSpec.tag fields. After you apply the updates in your Helm upgrade of the gloo-platform chart, Gloo starts an in-place upgrade of the Istio control plane and gateways.

  2. After your Helm upgrade completes, restart your gateway pods in each workload cluster. For example, you might use the following command to rollout a restart of the istio-eatwestgateway-1-20 and istio-ingressgateway-1-20 deployments.

    kubectl rollout restart -n gloo-mesh-gateways deployment/istio-eastwestgateway-1-20 --context $REMOTE_CONTEXT1
    kubectl rollout restart -n gloo-mesh-gateways deployment/istio-ingressgateway-1-20 --context $REMOTE_CONTEXT1
    
    kubectl rollout restart -n gloo-mesh-gateways deployment/istio-eastwestgateway-1-20 --context $REMOTE_CONTEXT2
    kubectl rollout restart -n gloo-mesh-gateways deployment/istio-ingressgateway-1-20 --context $REMOTE_CONTEXT2
    
  3. Verify that your Istio resources are updated.

    kubectl get all -n gm-iop-1-20 --context $REMOTE_CONTEXT1
    kubectl get all -n istio-system --context $REMOTE_CONTEXT1
    kubectl get all -n gloo-mesh-gateways --context $REMOTE_CONTEXT1
    

Testing only: Manually replacing the GatewayLifecycleManager CR

If you manage Istio through your main Gloo Platform Helm chart in testing or demo setups, you can quickly upgrade your Istio service mesh and gateway configurations by manually deleting the IstioLifecycleManager and GatewayLifecycleManager CRs, and upgrading your Gloo Mesh installation with your updated gateway values in your Helm values file. Note that you can also use this method to clear your managed Istio configurations if a canary upgrade becomes stuck.

This method is supported only for testing scenarios, because your istiod control plane and gateways are temporarily removed in this process.

  1. Get the name of your IstioLifecycleManager resource. Typically, this resource is named gloo-platform.

    kubectl get IstioLifecycleManager -A --context $MGMT_CONTEXT
    
  2. Delete the resource.

    kubectl delete IstioLifecycleManager gloo-platform -n gloo-mesh --context $MGMT_CONTEXT
    
  3. Verify that your istiod control plane is removed.

    kubectl get all -n istio-system --context $REMOTE_CONTEXT1
    kubectl get all -n istio-system --context $REMOTE_CONTEXT2
    
  4. Optional: If you also need to make changes to your gateways, clear those configurations.

    1. Get the name of your GatewayLifecycleManager resource. Typically, this resource is named istio-eastwestgateway. You might also have an istio-ingressgateway resource, such as if you use Gloo Gateway.
      kubectl get GatewayLifecycleManager -A --context $MGMT_CONTEXT
      
    2. Delete the resource.
      kubectl delete GatewayLifecycleManager istio-eastwestgateway -n gloo-mesh --context $MGMT_CONTEXT
      
      kubectl delete GatewayLifecycleManager istio-ingressgateway -n gloo-mesh --context $MGMT_CONTEXT
      
    3. Verify that your gateway proxy is removed.
      kubectl get svc -n gloo-mesh-gateways --context $REMOTE_CONTEXT1
      kubectl get svc -n gloo-mesh-gateways --context $REMOTE_CONTEXT2
      
  5. Follow the steps in this guide to perform a regular upgrade of your Gloo Mesh installation and include your Istio changes in your Helm values file. After you apply the updates in your Helm upgrade of the gloo-platform chart, Gloo re-creates the istiod control plane, and if applicable, the Istio gateways.

  6. After your Helm upgrade completes, verify that your Istio resources are re-created.

    # Change the revision as needed
    kubectl get all -n gm-iop-1-20 --context $REMOTE_CONTEXT1
    kubectl get all -n istio-system --context $REMOTE_CONTEXT1
    kubectl get all -n gloo-mesh-gateways --context $REMOTE_CONTEXT1
    
    # Change the revision as needed
    kubectl get all -n gm-iop-1-20 --context $REMOTE_CONTEXT2
    kubectl get all -n istio-system --context $REMOTE_CONTEXT2
    kubectl get all -n gloo-mesh-gateways --context $REMOTE_CONTEXT2
    

Update your Gloo license

Before your Gloo license expires, you can update the license by patching the license key secret. If you use Gloo Mesh along with other Gloo products such as Gloo Gateway, you can also update those licenses.

For example, if you notice that your Gloo control plane deployments are in a crash loop, your Gloo license might be expired. You can check the status of your license with the meshctl license check command.

Example output for an expired license:

WARNING  Your gloo-mesh license expired on 2024-01-24 19:30:53 +0100 CET. To get a new license, contact Support.
ERROR  License is expired. For more info, see https://docs.solo.io/gloo-mesh-enterprise/latest/setup/prepare/licensing/#update-licenses

To update your license key in your Gloo installation:

  1. Get a new Gloo license key by contacting your account representative. If you use Gloo Mesh along with other Gloo products such as Gloo Gateway, make sure to ask for up-to-date license keys for all your products.

  2. Save the new license key as an environment variable.

    export GLOO_GATEWAY_LICENSE_KEY=<new-key-string>
    
    export GLOO_MESH_LICENSE_KEY=<new-key-string>
    
    export GLOO_NETWORK_LICENSE_KEY=<new-key-string>
    

  3. Update the license secret to use the new Gloo Gateway license key.

    kubectl -n gloo-mesh patch secret license-keys -p "stringData: { gloo-gateway-license-key: $GLOO_GATEWAY_LICENSE_KEY }"
    
    kubectl -n gloo-mesh patch secret license-keys -p "stringData: { gloo-mesh-license-key: $GLOO_MESH_LICENSE_KEY }"
    
    kubectl -n gloo-mesh patch secret license-keys -p "stringData: { gloo-network-license-key: $GLOO_NETWORK_LICENSE_KEY }"
    

  4. Optional: If your license expired and the management server pods are in a crash loop, restart the management server pods. If you updated the license before expiration, skip this step.

    kubectl rollout restart -n gloo-mesh deployment/gloo-mesh-mgmt-server --context ${MGMT_CONTEXT}
    
  5. Verify that your license check is now valid, and no errors are reported.

    • To pass in a license key directly, encode the key in base64 and pass it in the --key flag. For example, to check your Gloo Mesh Enterprise license key, you can run the following command:
      meshctl license check --key $(echo ${GLOO_MESH_LICENSE_KEY} | base64 -w0) --context ${MGMT_CONTEXT}
      
    • If you store your license keys in a Kubernetes secret, you can pass the secret YAML file in the --secrets-file flag instead.
      meshctl license check --secrets-file license-keys.yaml --context ${MGMT_CONTEXT}
      

    Example output:

    INFO  License key gloo-mesh-license-key for product gloo-mesh is valid. Expires at 08 Oct 24 12:31 CEST
    SUCCESS  Licenses are valid