Skip to content

Commit 7916c68

Browse files
authored
refactor label selector (#5442)
Signed-off-by: zhangzujian <zhangzujian.7@gmail.com>
1 parent 06d9117 commit 7916c68

13 files changed

Lines changed: 124 additions & 101 deletions

File tree

pkg/controller/endpoint_slice.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ func (c *Controller) handleUpdateEndpointSlice(key string) error {
6565
defer func() { _ = c.epKeyMutex.UnlockKey(key) }()
6666
klog.Infof("handle update endpointSlice for service %s", key)
6767

68-
endpointSlices, err := c.endpointSlicesLister.EndpointSlices(namespace).List(labels.Set(map[string]string{discoveryv1.LabelServiceName: name}).AsSelector())
68+
endpointSlices, err := c.endpointSlicesLister.EndpointSlices(namespace).List(labels.Set{discoveryv1.LabelServiceName: name}.AsSelector())
6969
if err != nil {
7070
if errors.IsNotFound(err) {
7171
return nil

pkg/controller/external_gw.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111

1212
k8serrors "k8s.io/apimachinery/pkg/api/errors"
1313
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
14+
"k8s.io/apimachinery/pkg/labels"
1415
"k8s.io/apimachinery/pkg/types"
1516
"k8s.io/klog/v2"
1617

@@ -21,6 +22,8 @@ import (
2122
var (
2223
exGwEnabled = "unknown"
2324
lastExGwCM map[string]string
25+
26+
externalGatewayNodeSelector = labels.Set{util.ExGatewayLabel: "true"}.AsSelector()
2427
)
2528

2629
func (c *Controller) resyncExternalGateway() {
@@ -90,8 +93,7 @@ func (c *Controller) resyncExternalGateway() {
9093
}
9194

9295
func (c *Controller) removeExternalGateway() error {
93-
sel, _ := metav1.LabelSelectorAsSelector(&metav1.LabelSelector{MatchLabels: map[string]string{util.ExGatewayLabel: "true"}})
94-
nodes, err := c.nodesLister.List(sel)
96+
nodes, err := c.nodesLister.List(externalGatewayNodeSelector)
9597
if err != nil {
9698
klog.Errorf("failed to list external gw nodes, %v", err)
9799
return err
@@ -220,8 +222,7 @@ func (c *Controller) createDefaultVpcLrpEip() (string, string, error) {
220222

221223
func (c *Controller) getGatewayChassis(config map[string]string) ([]string, error) {
222224
chassises := []string{}
223-
sel, _ := metav1.LabelSelectorAsSelector(&metav1.LabelSelector{MatchLabels: map[string]string{util.ExGatewayLabel: "true"}})
224-
nodes, err := c.nodesLister.List(sel)
225+
nodes, err := c.nodesLister.List(externalGatewayNodeSelector)
225226
if err != nil {
226227
klog.Errorf("failed to list external gw nodes, %v", err)
227228
return nil, err

pkg/controller/gc.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,8 @@ func (c *Controller) gcVpcNatGateway() error {
106106
gwStsNames = append(gwStsNames, util.GenNatGwName(gw.Name))
107107
}
108108

109-
sel, _ := metav1.LabelSelectorAsSelector(&metav1.LabelSelector{MatchLabels: map[string]string{util.VpcNatGatewayLabel: "true"}})
110109
stss, err := c.config.KubeClient.AppsV1().StatefulSets(c.config.PodNamespace).List(context.Background(), metav1.ListOptions{
111-
LabelSelector: sel.String(),
110+
LabelSelector: labels.Set{util.VpcNatGatewayLabel: "true"}.AsSelector().String(),
112111
})
113112
if err != nil {
114113
klog.Errorf("failed to list vpc nat gateway statefulset, %v", err)
@@ -1102,10 +1101,9 @@ func (c *Controller) gcVPCDNS() error {
11021101
return err
11031102
}
11041103

1105-
sel, _ := metav1.LabelSelectorAsSelector(&metav1.LabelSelector{MatchLabels: map[string]string{util.VpcDNSNameLabel: "true"}})
1106-
1104+
labelSelector := labels.Set{util.VpcDNSNameLabel: "true"}.AsSelector()
11071105
deps, err := c.config.KubeClient.AppsV1().Deployments(c.config.PodNamespace).List(context.Background(), metav1.ListOptions{
1108-
LabelSelector: sel.String(),
1106+
LabelSelector: labelSelector.String(),
11091107
})
11101108
if err != nil {
11111109
klog.Errorf("failed to list vpc-dns deployment, %s", err)
@@ -1131,7 +1129,7 @@ func (c *Controller) gcVPCDNS() error {
11311129
}
11321130
}
11331131

1134-
slrs, err := c.switchLBRuleLister.List(sel)
1132+
slrs, err := c.switchLBRuleLister.List(labelSelector)
11351133
if err != nil {
11361134
klog.Errorf("failed to list vpc-dns SwitchLBRules, %s", err)
11371135
return err

pkg/controller/network_policy.go

Lines changed: 10 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -603,11 +603,7 @@ func svcMatchPods(svcs []*corev1.Service, pod *corev1.Pod, protocol string) ([]s
603603
matchSvcs := []string{}
604604
// find svc ip by pod's info
605605
for _, svc := range svcs {
606-
isMatch, err := isSvcMatchPod(svc, pod)
607-
if err != nil {
608-
return nil, err
609-
}
610-
if isMatch {
606+
if isSvcMatchPod(svc, pod) {
611607
clusterIPs := util.ServiceClusterIPs(*svc)
612608
protocolClusterIPs := getProtocolSvcIP(clusterIPs, protocol)
613609
if len(protocolClusterIPs) != 0 {
@@ -628,19 +624,8 @@ func getProtocolSvcIP(clusterIPs []string, protocol string) []string {
628624
return protocolClusterIPs
629625
}
630626

631-
func isSvcMatchPod(svc *corev1.Service, pod *corev1.Pod) (bool, error) {
632-
ss := metav1.SetAsLabelSelector(svc.Spec.Selector)
633-
sel, err := metav1.LabelSelectorAsSelector(ss)
634-
if err != nil {
635-
return false, fmt.Errorf("error fetch label selector, %w", err)
636-
}
637-
if pod.Labels == nil {
638-
return false, nil
639-
}
640-
if sel.Matches(labels.Set(pod.Labels)) {
641-
return true, nil
642-
}
643-
return false, nil
627+
func isSvcMatchPod(svc *corev1.Service, pod *corev1.Pod) bool {
628+
return labels.Set(svc.Spec.Selector).AsSelector().Matches(labels.Set(pod.Labels))
644629
}
645630

646631
func (c *Controller) podMatchNetworkPolicies(pod *corev1.Pod) []string {
@@ -660,7 +645,7 @@ func (c *Controller) podMatchNetworkPolicies(pod *corev1.Pod) []string {
660645

661646
match := []string{}
662647
for _, np := range nps {
663-
if isPodMatchNetworkPolicy(pod, *podNs, np, np.Namespace) {
648+
if isPodMatchNetworkPolicy(pod, podNs, np, np.Namespace) {
664649
match = append(match, cache.MetaObjectToName(np).String())
665650
}
666651
}
@@ -688,7 +673,7 @@ func (c *Controller) svcMatchNetworkPolicies(svc *corev1.Service) ([]string, err
688673
if match.Has(key) {
689674
continue
690675
}
691-
if isPodMatchNetworkPolicy(pod, *ns, np, np.Namespace) {
676+
if isPodMatchNetworkPolicy(pod, ns, np, np.Namespace) {
692677
match.Insert(key)
693678
klog.V(3).Infof("svc %s/%s match np %s", svc.Namespace, svc.Name, key)
694679
}
@@ -697,11 +682,8 @@ func (c *Controller) svcMatchNetworkPolicies(svc *corev1.Service) ([]string, err
697682
return match.UnsortedList(), nil
698683
}
699684

700-
func isPodMatchNetworkPolicy(pod *corev1.Pod, podNs corev1.Namespace, policy *netv1.NetworkPolicy, policyNs string) bool {
685+
func isPodMatchNetworkPolicy(pod *corev1.Pod, podNs *corev1.Namespace, policy *netv1.NetworkPolicy, policyNs string) bool {
701686
sel, _ := metav1.LabelSelectorAsSelector(&policy.Spec.PodSelector)
702-
if pod.Labels == nil {
703-
pod.Labels = map[string]string{}
704-
}
705687
if podNs.Name == policyNs && sel.Matches(labels.Set(pod.Labels)) {
706688
return true
707689
}
@@ -722,33 +704,19 @@ func isPodMatchNetworkPolicy(pod *corev1.Pod, podNs corev1.Namespace, policy *ne
722704
return false
723705
}
724706

725-
func isPodMatchPolicyPeer(pod *corev1.Pod, podNs corev1.Namespace, policyPeer netv1.NetworkPolicyPeer, policyNs string) bool {
707+
func isPodMatchPolicyPeer(pod *corev1.Pod, podNs *corev1.Namespace, policyPeer netv1.NetworkPolicyPeer, policyNs string) bool {
726708
if policyPeer.IPBlock != nil {
727709
return false
728710
}
729711
if policyPeer.NamespaceSelector == nil {
730712
if policyNs != podNs.Name {
731713
return false
732714
}
733-
} else {
734-
nsSel, _ := metav1.LabelSelectorAsSelector(policyPeer.NamespaceSelector)
735-
if podNs.Labels == nil {
736-
podNs.Labels = map[string]string{}
737-
}
738-
if !nsSel.Matches(labels.Set(podNs.Labels)) {
739-
return false
740-
}
741-
}
742-
743-
if policyPeer.PodSelector == nil {
744-
return true
715+
} else if !util.ObjectMatchesLabelSelector(podNs, policyPeer.NamespaceSelector) {
716+
return false
745717
}
746718

747-
sel, _ := metav1.LabelSelectorAsSelector(policyPeer.PodSelector)
748-
if pod.Labels == nil {
749-
pod.Labels = map[string]string{}
750-
}
751-
return sel.Matches(labels.Set(pod.Labels))
719+
return policyPeer.PodSelector == nil || util.ObjectMatchesLabelSelector(pod, policyPeer.PodSelector)
752720
}
753721

754722
func (c *Controller) namespaceMatchNetworkPolicies(ns *corev1.Namespace) []string {

pkg/controller/service_lb.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
k8serrors "k8s.io/apimachinery/pkg/api/errors"
1616
"k8s.io/apimachinery/pkg/api/resource"
1717
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
18+
"k8s.io/apimachinery/pkg/labels"
1819
"k8s.io/klog/v2"
1920
"k8s.io/utils/ptr"
2021

@@ -199,11 +200,8 @@ func (c *Controller) createLbSvcPod(svc *corev1.Service, nad *nadv1.NetworkAttac
199200
}
200201

201202
func (c *Controller) getLbSvcPod(svcName, svcNamespace string) (*corev1.Pod, error) {
202-
sel, _ := metav1.LabelSelectorAsSelector(&metav1.LabelSelector{
203-
MatchLabels: map[string]string{"app": genLbSvcDpName(svcName), "namespace": svcNamespace},
204-
})
205-
206-
pods, err := c.podsLister.Pods(svcNamespace).List(sel)
203+
selector := labels.Set{"app": genLbSvcDpName(svcName), "namespace": svcNamespace}.AsSelector()
204+
pods, err := c.podsLister.Pods(svcNamespace).List(selector)
207205
switch {
208206
case err != nil:
209207
klog.Error(err)

pkg/controller/vip.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -273,16 +273,20 @@ func (c *Controller) handleUpdateVirtualParents(key string) error {
273273
}
274274

275275
// vip cloud use selector to select pods as its virtual parents
276-
selectors := make(map[string]string)
276+
matchLabels := make(map[string]string)
277277
for _, v := range cachedVip.Spec.Selector {
278278
parts := strings.Split(strings.TrimSpace(v), ":")
279279
if len(parts) != 2 {
280280
continue
281281
}
282-
selectors[strings.TrimSpace(parts[0])] = strings.TrimSpace(parts[1])
282+
matchLabels[strings.TrimSpace(parts[0])] = strings.TrimSpace(parts[1])
283283
}
284-
sel, _ := metav1.LabelSelectorAsSelector(&metav1.LabelSelector{MatchLabels: selectors})
285-
pods, err := c.podsLister.Pods(cachedVip.Spec.Namespace).List(sel)
284+
selector, err := metav1.LabelSelectorAsSelector(&metav1.LabelSelector{MatchLabels: matchLabels})
285+
if err != nil {
286+
klog.Errorf("failed to convert label selector %v: %v", matchLabels, err)
287+
return err
288+
}
289+
pods, err := c.podsLister.Pods(cachedVip.Spec.Namespace).List(selector)
286290
if err != nil {
287291
klog.Errorf("failed to list pods that meet selector requirements, %v", err)
288292
return err

pkg/controller/vpc.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1328,8 +1328,7 @@ func (c *Controller) handleAddVpcExternalSubnet(key, subnet string) error {
13281328
}
13291329
// init lrp gw chassis group
13301330
chassises := []string{}
1331-
sel, _ := metav1.LabelSelectorAsSelector(&metav1.LabelSelector{MatchLabels: map[string]string{util.ExGatewayLabel: "true"}})
1332-
gwNodes, err := c.nodesLister.List(sel)
1331+
gwNodes, err := c.nodesLister.List(externalGatewayNodeSelector)
13331332
if err != nil {
13341333
klog.Errorf("failed to list external gw nodes, %v", err)
13351334
return err

pkg/controller/vpc_egress_gateway.go

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1025,28 +1025,13 @@ func (c *Controller) handlePodEventForVpcEgressGateway(pod *corev1.Pod) error {
10251025
}
10261026

10271027
for _, selector := range veg.Spec.Selectors {
1028-
sel := labels.Everything()
1029-
if selector.NamespaceSelector != nil {
1030-
if sel, err = metav1.LabelSelectorAsSelector(selector.NamespaceSelector); err != nil {
1031-
klog.Errorf("failed to create label selector for namespace selector %#v: %v", selector.NamespaceSelector, err)
1032-
utilruntime.HandleError(err)
1033-
continue
1034-
}
1035-
}
1036-
if !sel.Matches(labels.Set(ns.Labels)) {
1028+
if selector.NamespaceSelector != nil && !util.ObjectMatchesLabelSelector(ns, selector.NamespaceSelector) {
10371029
continue
10381030
}
1039-
sel = labels.Everything()
1040-
if selector.PodSelector != nil {
1041-
if sel, err = metav1.LabelSelectorAsSelector(selector.PodSelector); err != nil {
1042-
klog.Errorf("failed to create label selector for pod selector %#v: %v", selector.PodSelector, err)
1043-
utilruntime.HandleError(err)
1044-
continue
1045-
}
1046-
}
1047-
if sel.Matches(labels.Set(pod.Labels)) {
1048-
c.addOrUpdateVpcEgressGatewayQueue.Add(cache.MetaObjectToName(veg).String())
1031+
if selector.PodSelector != nil && !util.ObjectMatchesLabelSelector(pod, selector.PodSelector) {
1032+
continue
10491033
}
1034+
c.addOrUpdateVpcEgressGatewayQueue.Add(cache.MetaObjectToName(veg).String())
10501035
}
10511036
}
10521037
return nil

pkg/controller/vpc_nat_gateway.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -919,11 +919,8 @@ func (c *Controller) cleanUpVpcNatGw() error {
919919
}
920920

921921
func (c *Controller) getNatGwPod(name string) (*corev1.Pod, error) {
922-
sel, _ := metav1.LabelSelectorAsSelector(&metav1.LabelSelector{
923-
MatchLabels: map[string]string{"app": util.GenNatGwName(name), util.VpcNatGatewayLabel: "true"},
924-
})
925-
926-
pods, err := c.podsLister.Pods(c.config.PodNamespace).List(sel)
922+
selector := labels.Set{"app": util.GenNatGwName(name), util.VpcNatGatewayLabel: "true"}.AsSelector()
923+
pods, err := c.podsLister.Pods(c.config.PodNamespace).List(selector)
927924

928925
switch {
929926
case err != nil:

pkg/ovn_ic_controller/ovn_ic_controller.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -230,8 +230,8 @@ func (c *Controller) resyncInterConnection() {
230230
}
231231

232232
func (c *Controller) removeInterConnection(azName string) error {
233-
sel, _ := metav1.LabelSelectorAsSelector(&metav1.LabelSelector{MatchLabels: map[string]string{util.ICGatewayLabel: "true"}})
234-
nodes, err := c.nodesLister.List(sel)
233+
selector := labels.Set{util.ICGatewayLabel: "true"}.AsSelector()
234+
nodes, err := c.nodesLister.List(selector)
235235
if err != nil {
236236
klog.Errorf("failed to list nodes, %v", err)
237237
return err

0 commit comments

Comments
 (0)