From 127cc40495ee36774c87ebf478e23cf192e4389a Mon Sep 17 00:00:00 2001 From: elvilla Date: Mon, 6 Mar 2023 10:15:00 -0800 Subject: [PATCH 1/3] Delete service can through json exception if incompatible clien and server versions --- samples/managed-identity/.vscode/tasks.json | 13 ++++++++----- src/common/Kubernetes/KubernetesClient.cs | 15 ++++++++++++++- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/samples/managed-identity/.vscode/tasks.json b/samples/managed-identity/.vscode/tasks.json index d1335544..8ef4dc14 100644 --- a/samples/managed-identity/.vscode/tasks.json +++ b/samples/managed-identity/.vscode/tasks.json @@ -39,19 +39,22 @@ "problemMatcher": "$msCompile" }, { - "label": "bridge-to-kubernetes.service", - "type": "bridge-to-kubernetes.service", - "service": "mi-webapp-service", + "label": "bridge-to-kubernetes.resource", + "type": "bridge-to-kubernetes.resource", + "resource": "mi-webapp-service", + "resourceType": "service", "ports": [ 80 ], "targetCluster": "testing-scenarios", - "targetNamespace": "mi-webapp" + "targetNamespace": "mi-webapp2", + "useKubernetesServiceEnvironmentVariables": false, + "isolateAs": "elvilla-d987" }, { "label": "bridge-to-kubernetes.compound", "dependsOn": [ - "bridge-to-kubernetes.service", + "bridge-to-kubernetes.resource", "build" ], "dependsOrder": "sequence" diff --git a/src/common/Kubernetes/KubernetesClient.cs b/src/common/Kubernetes/KubernetesClient.cs index 4eab6283..703755dc 100644 --- a/src/common/Kubernetes/KubernetesClient.cs +++ b/src/common/Kubernetes/KubernetesClient.cs @@ -12,6 +12,7 @@ using System.Net.Sockets; using System.Net.WebSockets; using System.Text; +using System.Text.Json; using System.Threading; using System.Threading.Tasks; using k8s; @@ -398,8 +399,20 @@ await RestClient.CoreV1.ListServiceForAllNamespacesAsync(labelSelector: labelSel } catch (HttpOperationException e) when (e.Response.StatusCode == HttpStatusCode.Conflict) { - await RestClient.CoreV1.DeleteNamespacedServiceAsync(service.Metadata.Name, namespaceName); + try + { + await RestClient.CoreV1.DeleteNamespacedServiceAsync(service.Metadata.Name, namespaceName); + } + catch (JsonException ex) + { + // Delete service can through Json error when kubernetes server and client version are incompatible: + // 1.21 and 1.22 DeleteService returns v1.Status (6.0 client sdk) + // while in 1.23, DeleteService returns v1.Service (7.0+ client sdk) + // more details on this issue: https://github.com/kubernetes-client/csharp/issues/824 + _log.Exception(ex); + } return await RestClient.CoreV1.CreateNamespacedServiceAsync(service, namespaceName, cancellationToken: cancellationToken); + } }, nameof(CreateOrReplaceV1ServiceAsync), cancellationToken); } From 4c10c5fe24b52c64cb2f5d1682e74af46c7b78aa Mon Sep 17 00:00:00 2001 From: elvilla Date: Mon, 6 Mar 2023 12:37:35 -0800 Subject: [PATCH 2/3] Add catch around Delete Service invocation --- src/common/Kubernetes/KubernetesClient.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/common/Kubernetes/KubernetesClient.cs b/src/common/Kubernetes/KubernetesClient.cs index 703755dc..06eceaa7 100644 --- a/src/common/Kubernetes/KubernetesClient.cs +++ b/src/common/Kubernetes/KubernetesClient.cs @@ -401,6 +401,7 @@ await RestClient.CoreV1.ListServiceForAllNamespacesAsync(labelSelector: labelSel { try { + _log.Warning("Initial CreateNamespacedServiceAsync failed, deleting namespace"); await RestClient.CoreV1.DeleteNamespacedServiceAsync(service.Metadata.Name, namespaceName); } catch (JsonException ex) From d467cca6c1abd69d7a2040db0ee4ec943fd198c8 Mon Sep 17 00:00:00 2001 From: elvilla Date: Mon, 6 Mar 2023 12:43:35 -0800 Subject: [PATCH 3/3] remove changes to tasks.json --- samples/managed-identity/.vscode/tasks.json | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/samples/managed-identity/.vscode/tasks.json b/samples/managed-identity/.vscode/tasks.json index 8ef4dc14..d1335544 100644 --- a/samples/managed-identity/.vscode/tasks.json +++ b/samples/managed-identity/.vscode/tasks.json @@ -39,22 +39,19 @@ "problemMatcher": "$msCompile" }, { - "label": "bridge-to-kubernetes.resource", - "type": "bridge-to-kubernetes.resource", - "resource": "mi-webapp-service", - "resourceType": "service", + "label": "bridge-to-kubernetes.service", + "type": "bridge-to-kubernetes.service", + "service": "mi-webapp-service", "ports": [ 80 ], "targetCluster": "testing-scenarios", - "targetNamespace": "mi-webapp2", - "useKubernetesServiceEnvironmentVariables": false, - "isolateAs": "elvilla-d987" + "targetNamespace": "mi-webapp" }, { "label": "bridge-to-kubernetes.compound", "dependsOn": [ - "bridge-to-kubernetes.resource", + "bridge-to-kubernetes.service", "build" ], "dependsOrder": "sequence"