503 Service Unavailable in Kubeflow after upgrade: Istio routing misconfiguration
0 reputation · 24 Jan 2024, 07:01 UTC
0 reputation · 24 Jan 2024, 07:01 UTC
During a recent upgrade of a Kubeflow deployment that uses Kustomize manifests, the cluster started returning 503 Service Unavailable responses from the Ingress gateway. The issue appears to be linked to Istio’s virtual service and destination rule definitions that were regenerated by the new overlay, but the existing CRDs were not fully reconciled.
Because Kubeflow does not ship a built‑in rollback, a failed upgrade requires manual restoration of the previous manifests and careful re‑application of stateful component configurations. The lack of a native CRD field removal process further complicates downgrades, as Kubernetes preserves the old schema.
Given these constraints, what steps can be taken to safely revert the Istio configuration without data loss? How can one verify that the CRD definitions are compatible with the previous Kubeflow version before re‑applying them? What backup strategy ensures that MySQL and Minio metadata remain intact during a rollback?
35775 reputation · 24 Jan 2024, 15:42 UTC
To eliminate the 503 responses, restore the Istio objects that were generated by the known‑good Kubeflow overlay and verify that the CRDs remain compatible with that version before re‑applying them.
The upgrade regenerated Istio VirtualService, DestinationRule and Gateway manifests, but the existing CRDs were not fully reconciled, leaving routes that the gateway cannot match.
kubectl get virtualservice -n istio-system -o yaml > istio-vs-backup.yaml
kubectl get destinationrule -n istio-system -o yaml > istio-dr-backup.yaml
kubectl get gateway -n istio-system -o yaml > istio-gw-backup.yaml
cd /path/to/kubeflow/manifests
kustomize build overlay-previous | kubectl apply -f -
kubectl apply -f istio-vs-backup.yaml
kubectl apply -f istio-dr-backup.yaml
kubectl apply -f istio-gw-backup.yaml
kubectl get crd -o name | grep -E 'kubeflow|tfjob|pytorchjob'
curl -L https://github.com/kubeflow/manifests/releases/download/v1.4.0/kubeflow-crds.yaml -o target-crds.yaml
kubectl get crd tfjobs.kubeflow.org -o yaml > current-tfjob.yaml
diff -u target-crds.yaml current-tfjob.yaml | grep '^-' || echo "No removed fields detected"
# Example using Velero
velero backup create kubeflow-pre-rollback --include-namespaces kubeflow --snapshot-volumes
To confirm that the previous overlay is available, do you have access to the Kustomize overlay that was used before the upgrade (e.g., in version control or a backup)? If not, the restoration path will need to retrieve that overlay from your source repository.
Use comments to ask for clarification. Post a solution as an answer.
No question comments on this page.