Non-revisioned to Revisioned
Starting from TSB 1.12.0, IsolationBoundary
is a required feature that cannot be disabled. This guide provides a walkthrough for enabling Istio isolation boundary feature on your existing pre-1.12.0 TSB control plane and migrate your workloads from non-revisioned to revisioned before upgrading to the latest TSB version.
Before you continue, make sure you are familiar with Istio Isolation Boundaries feature.
Important Notes Before Upgrade
- Only migration to the
global
boundary withdefault
revision is supported for rollback. Rollback with multiple revisions is not supported as it is unclear which revision to roll back to. - Before proceeding with the upgrade:
- Backup your Helm values files.
- Verify all workloads are healthy and connected to Istiod.
- Ensure you have necessary image pull secrets configured.
Enabling Isolation Boundary
Upgrading from a non-revisioned to revisioned control plane setup involves enabling the Istio isolation boundary feature. Once enabled, a revision can be configured within the isolation boundary to which the control plane must upgrade to.
To enable Istio isolation boundary feature, you need to set the ISTIO_ISOLATION_BOUNDARIES
environment variable to true
in the TSB control plane operator. Following is an example of how to set the environment variable in the TSB control plane Helm values file.
operator:
deployment:
env:
- name: ISTIO_ISOLATION_BOUNDARIES
value: "true"
By default TSB installs global
boundary and default
revision in the controlplane clusters, this allows non-revisioned workloads to connect to a default
revisioned istio control plane.
If you manage the TSB control plane via GitOps by maintaining the ControlPlane
CR YAML in a Git repository, we recommend including the following IsolationBoundary
configuration in your control plane YAML:
spec:
...
components:
xcp:
isolationBoundaries:
- name: global
revisions:
name: default
Control Plane Effects
Once isolation boundaries are enabled:
- A revisioned control plane will be set up in the istio-system namespace. The names of the Istio control plane components remain unchanged.
- Multi-cluster connectivity and traffic distribution are maintained:
- Workloads in non-revisioned clusters can discover workloads in clusters upgraded with the
global
boundary - Existing service discovery continues to work without changes
- Workloads in non-revisioned clusters can discover workloads in clusters upgraded with the
- Using revision name
default
allows existing workload namespaces to keep theiristio-injection=enabled
label - The
global
boundary name is required when configuring a single isolation boundary - Consider adding a
canary
revision during initial setup for future revisioned-to-revisioned upgrades
Data Plane Operator Effects
When isolation boundaries are enabled, several changes occur in the data plane operator:
- The TSB data plane operator components in
istio-gateway
namespace are automatically scaled down:tsb-operator-data-plane
deployment is scaled down- TSB webhooks in the
istio-gateway
namespace are removed
- Gateway management changes:
- Ownership of gateway reconciliation transfers from TSB operator to XCP Edge operator
- Existing gateways are automatically upgraded to use the default revision
- Gateway deployments use RollingUpdate strategy to ensure minimal downtime
- The
istio-gateway
namespace:- Is marked for deletion after operator components are scaled down
- May require manual cleanup of finalizers if deletion is blocked
- Contains stale IOP resources that should be cleaned up during post-upgrade steps
During the transition, gateway management is handled gracefully with no traffic disruption. Gateways continue serving traffic while being upgraded to use the new revisioned control plane.
Workload Upgrade
Gateway upgrade
All the existing Gateways are automatically upgraded to have the default
revision configured in the spec.revision
, once ISTIO_ISOLATION_BOUNDARIES
is enabled, and the ControlPlane CR is configured as shown above.
As part of this, the ownership of data plane reconciliation is also handed over to the XCP Edge Operator
, which reconciles the new/upgraded data plane Gateways. TSB by default configures the Gateway install resources with a RollingUpdate
strategy that ensures minimal downtime during the upgrade.
Application upgrade
Since the configured revision is set to default
in the ControlPlane CR, there is no need to update the workload namespace labels, and the existing label istio-injection=enabled
can remain as is.
Although, setting the workload namespace labels to istio.io/rev=default
will also have the same effect.
Restart application workloads so they connect to the new revisioned Istio control plane. A rolling update is preferred to avoid traffic disruptions.
kubectl rollout restart deployment -n workload-ns
VM workload upgrade
To upgrade VM workload, download latest Istio sidecar from your onboarding plane using revisioned link then reinstall Istio sidecar on the VM.
Update onboarding-agent
configuration with revision
value then restart onboarding-agent
. Istio sidecar will connect to revisioned Istio control plane.
Post Upgrade Cleanup
Once all sidecars have moved to the revisioned proxy and all application gateways have revisioned gateways running, and a healthy upgrade is ensured, we can proceed to cleanup the old non-revisioned resources from the cluster which are now stale.
-
Cleanup the stale IOP resources that are present in the
istio-gateway
namespace. This will automatically trigger the deletion of theistio-gateway
namespace.kubectl get iop -n istio-gateway -o name | xargs -I % kubectl patch % -n istio-gateway -p '{"metadata":{"finalizers":null}}' --type=merge;
-
Delete
IstioOperator
resource namedtsb-istiocontrolplane
from the namespaceistio-system
usingkubectl
.kubectl delete iop tsb-istiocontrolplane -n istio-system; \
kubectl patch iop tsb-istiocontrolplane -n istio-system -p '{"metadata":{"finalizers":null}}' --type=merge; -
Delete stale webhook created by
IstioOperator
kubectl delete validatingwebhookconfigurations.admissionregistration.k8s.io istiod-default-validator
Rollback to Non-revisioned Setup
If you need to roll back from isolation boundary to non-revisioned setup, follow these steps:
-
First, reinstall the data plane operator in the istio-gateway namespace:
kubectl create ns istio-gateway
helm install tsb-dp tetrate-tsb-helm/dataplane \
--version <your-tsb-version> \
--namespace istio-gateway \
--create-namespace \
--values <your-dp-values.yaml> \
--set image.registry=<your-registry> -
Roll back the control plane using Helm:
Check Helm revision history
helm history tsb-cp -n istio-system
Roll back to the previous revision (before IB was enabled)
helm rollback tsb-cp <previous-revision-number> -n istio-system
-
After rollback completes:
- The control plane components will restart
- Workloads will automatically reconnect to the rolled-back Istiod
- Gateway ownership will return to TSB operator
-
Clean up any remaining XCP-managed IOPs:
kubectl delete iop xcpgw-ingress-<uuid> -n istio-system
kubectl patch iop xcpgw-ingress-<uuid> -n istio-system -p '{"metadata":{"finalizers":null}}' --type=merge
- Only rollback to
global
boundary withdefault
revision is supported - Ensure you have backups of your Helm values before attempting rollback
- Monitor application traffic during rollback to ensure no disruption
- Verify all workloads successfully reconnect to the rolled-back control plane
Istio overlays
If you are using overlays to customize the Istio behavior, you would need to update the overlays by moving overlays from the spec.components.istio
to spec.components.xcp.isolationBoundaries
section under the correct revision. If you have multiple revisions, you would need to add the overlays for each revision.
For example, if you have an overlay to customize the Istio logging level, you would need to update the overlay from following
spec:
components:
istio:
kubeSpec:
overlays:
- apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
name: tsb-istiocontrolplane
patches:
- path: spec.values.global.proxy.logLevel
value: warn
- path: spec.values.global.logging.level
value: default:warn
to following
spec:
components:
xcp:
centralAuthMode: JWT
centralProvidedCaCert: true
configProtection: {}
isolationBoundaries:
- name: global
revisions:
- name: default
istio:
kubeSpec:
overlays:
- apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
name: xcp-iop-default
patches:
- path: spec.values.global.proxy.logLevel
value: warn
- path: spec.values.global.logging.level
value: default:warn
- name: canary
istio:
kubeSpec:
overlays:
- apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
name: xcp-iop-canary
patches:
- path: spec.values.global.proxy.logLevel
value: info
- path: spec.values.global.logging.level
value: default:info