hotfix: use pod label to match service selector for finding service by pod

This commit is contained in:
fengcaiwen
2025-01-18 16:23:08 +08:00
parent 7d028fc950
commit c6f59e46c9
2 changed files with 19 additions and 11 deletions

View File

@@ -9,7 +9,6 @@ import (
apierrors "k8s.io/apimachinery/pkg/api/errors" apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"
pkgresource "k8s.io/cli-runtime/pkg/resource" pkgresource "k8s.io/cli-runtime/pkg/resource"
@@ -138,6 +137,6 @@ func removeInjectContainer(ctx context.Context, factory cmdutil.Factory, clients
portmap[port.ContainerPort] = port.ContainerPort portmap[port.ContainerPort] = port.ContainerPort
} }
} }
err = inject.ModifyServiceTargetPort(ctx, clientset, namespace, labels.SelectorFromSet(templateSpec.Labels).String(), portmap) err = inject.ModifyServiceTargetPort(ctx, clientset, namespace, templateSpec.Labels, portmap)
return err return err
} }

View File

@@ -4,6 +4,7 @@ import (
"context" "context"
"fmt" "fmt"
"net/netip" "net/netip"
"reflect"
"strings" "strings"
"time" "time"
@@ -11,7 +12,6 @@ import (
v1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/intstr"
k8sjson "k8s.io/apimachinery/pkg/util/json" k8sjson "k8s.io/apimachinery/pkg/util/json"
@@ -92,25 +92,34 @@ func InjectEnvoySidecar(ctx context.Context, f cmdutil.Factory, clientset *kuber
} }
// 2) modify service containerPort to envoy listener port // 2) modify service containerPort to envoy listener port
err = ModifyServiceTargetPort(ctx, clientset, namespace, labels.SelectorFromSet(templateSpec.Labels).String(), containerPort2EnvoyListenerPort) err = ModifyServiceTargetPort(ctx, clientset, namespace, templateSpec.Labels, containerPort2EnvoyListenerPort)
if err != nil { if err != nil {
return err return err
} }
return nil return nil
} }
func ModifyServiceTargetPort(ctx context.Context, clientset *kubernetes.Clientset, namespace string, labels string, m map[int32]int32) error { func ModifyServiceTargetPort(ctx context.Context, clientset *kubernetes.Clientset, namespace string, podLabels map[string]string, m map[int32]int32) error {
list, err := clientset.CoreV1().Services(namespace).List(ctx, metav1.ListOptions{LabelSelector: labels}) // service selector == pod labels
list, err := clientset.CoreV1().Services(namespace).List(ctx, metav1.ListOptions{})
if err != nil { if err != nil {
return err return err
} }
if len(list.Items) == 0 {
return fmt.Errorf("can not found service with label: %v", labels) var svc *v1.Service
for _, item := range list.Items {
if reflect.DeepEqual(item.Spec.Selector, podLabels) {
svc = &item
break
}
} }
for i := range len(list.Items[0].Spec.Ports) { if svc == nil {
list.Items[0].Spec.Ports[i].TargetPort = intstr.FromInt32(m[list.Items[0].Spec.Ports[i].Port]) return fmt.Errorf("can not found service with selector: %v", podLabels)
} }
_, err = clientset.CoreV1().Services(namespace).Update(ctx, &list.Items[0], metav1.UpdateOptions{}) for i := range len(svc.Spec.Ports) {
svc.Spec.Ports[i].TargetPort = intstr.FromInt32(m[svc.Spec.Ports[i].Port])
}
_, err = clientset.CoreV1().Services(namespace).Update(ctx, svc, metav1.UpdateOptions{})
return err return err
} }