mirror of
https://github.com/kubenetworks/kubevpn.git
synced 2025-10-25 16:30:34 +08:00
hotfix: use pod label to match service selector for finding service by pod
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user