Migrate to Istio Ambient Mesh¶
This guide describes how to migrate Charmed Kubeflow (CKF) from Istio Sidecar Mode to Istio Ambient Mesh.
Istio Ambient Mesh is a data plane mode that provides secure communication between services without injecting sidecar proxies into application pods.
Note
Istio Ambient Mesh support is currently available only in the 1.11/edge channel. The guide will be updated once the stable release is available. This guide uses the edge risk for the migration.
Warning
This migration process involves removing and redeploying several critical components. Ensure you have a backup of your deployment before proceeding. See Back up for more details.
Warning
During the migration, your Kubeflow deployment will experience downtime as components are removed and redeployed. Plan the migration during a maintenance window.
Requirements¶
A running CKF 1.11/stable deployment with sidecar-based Istio. If you are on an older version, first upgrade to 1.11/stable before proceeding with the migration. See Upgrade from 1.10 to 1.11 for upgrade instructions.
Admin access to the Kubernetes (K8s) cluster where CKF is deployed.
Juju admin access to the
kubeflowmodel.kubectlCLI tool installed and configured.
Migration process¶
Configure Cilium (Canonical Kubernetes only)¶
If you are running on Canonical Kubernetes, configure Cilium to work with Charmed Istio in ambient mode. For more information, see the Cilium documentation.
kubectl -n kube-system patch configmap cilium-config --type merge --patch '{"data":{"bpf-lb-sock-hostns-only":"true"}}'
kubectl -n kube-system patch configmap cilium-config --type merge --patch '{"data":{"cni-exclusive":"false"}}'
kubectl -n kube-system rollout restart daemonset cilium
Remove legacy Istio components¶
Remove the existing sidecar-based Istio installation:
juju remove-application --no-prompt istio-ingressgateway
juju remove-application --no-prompt istio-pilot
Remove Knative components¶
Remove Knative components, as serverless deployment is not supported with Ambient Mesh:
juju remove-application --no-prompt knative-serving
juju remove-application --no-prompt knative-eventing
juju remove-application --no-prompt knative-operator
Warning
Ambient Mesh does not support serverless deployments. This is why Knative must be removed and KServe will be configured to use raw deployment mode instead.
Deploy new Istio charms¶
Deploy the new Istio charms that support Ambient Mesh.
Deploy istio-k8s with the appropriate platform value for your Kubernetes substrate:
For MicroK8s (default): Use
platform=microk8sor omit the config (defaults tomicrok8s)juju deploy istio-k8s --trust --channel 2/edge --config platform=microk8s
For Canonical Kubernetes: Use
platform=""(empty string)juju deploy istio-k8s --trust --channel 2/edge --config platform=""
For other platforms: Refer to the Istio platform prerequisites for the appropriate value
juju deploy istio-k8s --trust --channel 2/edge --config platform=<appropriate-value>
Deploy the remaining Istio components and integrate:
juju deploy istio-beacon-k8s --trust --channel 2/edge
juju deploy istio-ingress-k8s --trust --channel 2/edge
juju integrate istio-ingress-k8s istio-k8s
Migrate admission webhook¶
Upgrade the admission webhook to the latest version and integrate it with the Ambient Mesh:
juju refresh admission-webhook --channel 2.0/edge
juju integrate admission-webhook:service-mesh istio-beacon-k8s:service-mesh
Migrate Katib components¶
Upgrade the Katib controller and UI, and integrate them with the service mesh:
juju refresh katib-controller --channel 0.19/edge
juju integrate katib-controller:service-mesh istio-beacon-k8s:service-mesh
juju refresh katib-ui --channel 0.19/edge
juju integrate katib-ui:service-mesh istio-beacon-k8s:service-mesh
juju integrate katib-ui:istio-ingress-route istio-ingress-k8s:istio-ingress-route
Migrate training operator¶
Upgrade the training operator, and integrate with the service mesh:
juju refresh training-operator --channel 1.9/edge
juju integrate training-operator:service-mesh istio-beacon-k8s:service-mesh
Migrate KServe controller¶
Upgrade KServe, configure it for raw deployment mode, and integrate with both the service mesh and the ingress gateway:
juju refresh kserve-controller --channel 0.15/edge
juju config kserve-controller deployment-mode=rawdeployment
juju integrate kserve-controller:service-mesh istio-beacon-k8s:service-mesh
juju integrate kserve-controller:gateway-metadata istio-ingress-k8s:gateway-metadata
Note
With Ambient Mesh, KServe only supports rawdeployment mode.
Serverless deployment mode is not supported, which is why Knative was removed earlier in the migration process.
Migrate authentication components¶
Upgrade Dex and OIDC Gatekeeper to work with the new Istio ingress:
juju refresh dex-auth --channel 2.41/edge
juju refresh oidc-gatekeeper --channel ckf-1.10/edge
juju integrate dex-auth:service-mesh istio-beacon-k8s:service-mesh
juju integrate dex-auth:istio-ingress-route-unauthenticated istio-ingress-k8s:istio-ingress-route-unauthenticated
juju integrate oidc-gatekeeper:service-mesh istio-beacon-k8s:service-mesh
juju integrate oidc-gatekeeper:forward-auth istio-ingress-k8s:forward-auth
juju integrate oidc-gatekeeper:istio-ingress-route-unauthenticated istio-ingress-k8s:istio-ingress-route-unauthenticated
Migrate Envoy¶
Upgrade the Envoy proxy and integrate with the service mesh:
juju refresh envoy --channel 2.4/edge
juju integrate envoy:service-mesh istio-beacon-k8s
juju integrate envoy:istio-ingress-route istio-ingress-k8s:istio-ingress-route
Migrate Jupyter components¶
Upgrade the Jupyter UI and controller, integrating both with the service mesh:
juju refresh jupyter-controller --channel 1.11/edge
juju integrate jupyter-controller:service-mesh istio-beacon-k8s:service-mesh
juju integrate jupyter-controller:gateway-metadata istio-ingress-k8s:gateway-metadata
juju refresh jupyter-ui --channel 1.11/edge
juju integrate jupyter-ui:service-mesh istio-beacon-k8s:service-mesh
juju integrate jupyter-ui:istio-ingress-route istio-ingress-k8s:istio-ingress-route
Migrate Kubeflow Pipelines components¶
Upgrade all KFP components, add new relations, and integrate them with the service mesh:
juju refresh kfp-api --channel 2.15/edge
juju integrate kfp-api:service-mesh istio-beacon-k8s:service-mesh
juju refresh kfp-persistence --channel 2.15/edge
juju integrate kfp-persistence:service-mesh istio-beacon-k8s:service-mesh
juju refresh kfp-profile-controller --channel 2.15/edge
juju integrate kfp-profile-controller:service-mesh istio-beacon-k8s:service-mesh
juju refresh kfp-schedwf --channel 2.15/edge
juju integrate kfp-schedwf:service-mesh istio-beacon-k8s:service-mesh
juju refresh kfp-ui --channel 2.15/edge
juju integrate kfp-ui:service-mesh istio-beacon-k8s:service-mesh
juju integrate kfp-ui:istio-ingress-route istio-ingress-k8s:istio-ingress-route
juju refresh kfp-viz --channel 2.15/edge
juju integrate kfp-viz:service-mesh istio-beacon-k8s:service-mesh
juju integrate kfp-api:kfp-api-grpc kfp-persistence:kfp-api-grpc
juju integrate kfp-api:kfp-api-grpc kfp-schedwf:kfp-api-grpc
Migrate MinIO¶
Upgrade MinIO and integrate it with the service mesh:
juju refresh minio --trust --channel 1.10/edge
juju integrate minio:service-mesh istio-beacon-k8s:service-mesh
Migrate Kubeflow Dashboard¶
Upgrade the central dashboard and integrate with the ingress:
juju refresh kubeflow-dashboard --channel 2.0/edge
juju integrate kubeflow-dashboard:service-mesh istio-beacon-k8s:service-mesh
juju integrate kubeflow-dashboard:istio-ingress-route istio-ingress-k8s:istio-ingress-route
Migrate Kubeflow Profiles¶
Upgrade the profiles controller with Ambient Mesh configuration:
juju refresh kubeflow-profiles --channel 2.0/edge
juju integrate kubeflow-profiles:service-mesh istio-beacon-k8s:service-mesh
juju config kubeflow-profiles service-mesh-mode=istio-ambient
juju config kubeflow-profiles istio-gateway-service-account=istio-ingress-k8s-istio
Note
The service-mesh-mode configuration is critical for Ambient Mesh support.
The istio-gateway-service-account must match the service account used by the Istio ingress gateway.
Migrate Kubeflow Volumes¶
Upgrade the volumes web app and integrate with the service mesh:
juju refresh kubeflow-volumes --channel 1.11/edge
juju integrate kubeflow-volumes:service-mesh istio-beacon-k8s:service-mesh
juju integrate kubeflow-volumes:istio-ingress-route istio-ingress-k8s:istio-ingress-route
Migrate PVC Viewer¶
Upgrade the PVC Viewer operator and integrate with the service mesh:
juju refresh pvcviewer-operator --channel 1.11/edge
juju integrate pvcviewer-operator:service-mesh istio-beacon-k8s:service-mesh
Migrate Tensorboard components¶
Upgrade both the Tensorboard controller and web app:
juju refresh tensorboard-controller --channel 1.11/edge
juju integrate tensorboard-controller:service-mesh istio-beacon-k8s:service-mesh
juju integrate tensorboard-controller:gateway-metadata istio-ingress-k8s:gateway-metadata
juju refresh tensorboards-web-app --channel 1.11/edge
juju integrate tensorboards-web-app:service-mesh istio-beacon-k8s:service-mesh
juju integrate tensorboards-web-app:istio-ingress-route istio-ingress-k8s:istio-ingress-route
Migrate Metacontroller¶
Upgrade the Metacontroller operator and integrate with the service mesh:
juju refresh metacontroller-operator --channel 4.11/edge
juju integrate metacontroller-operator:service-mesh istio-beacon-k8s:service-mesh
Remove sidecar containers from user namespaces¶
After migrating to Ambient Mesh, delete the ML Pipeline pods from existing user namespaces to remove the old sidecar containers. The pods will be automatically recreated by their deployments without sidecars:
kubectl delete pod -l app=ml-pipeline-ui-artifact -n <user-namespace>
kubectl delete pod -l app=ml-pipeline-visualizationserver -n <user-namespace>
Replace <user-namespace> with the actual user namespace name (for example, admin).
Verify the migration¶
After completing the migration, verify that all components are operational:
Check that all applications are in the
activestate:
juju status
Verify that the Kubeflow Dashboard is accessible, meaning that the ingress gateway allows for traffic.
Test core functionality, for example:
User authentication through Dex
Creating and accessing Jupyter notebooks
Running Kubeflow Pipelines
Deploying models with KServe