Skip to content

Commit

Permalink
refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
changluyi committed Jul 12, 2023
1 parent fc71cb5 commit dcfe86b
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 64 deletions.
42 changes: 42 additions & 0 deletions pkg/daemon/gateway.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package daemon
import (
"fmt"
"os/exec"
"sort"
"strings"

v1 "k8s.io/api/core/v1"
Expand Down Expand Up @@ -246,3 +247,44 @@ func (c *Controller) getEgressNatIpByNode(nodeName string) (map[string]string, e
}
return subnetsNatIp, nil
}

func (c *Controller) getTProxyConditionPod(needSort bool) ([]*v1.Pod, error) {

var filteredPods []*v1.Pod
pods, err := c.podsLister.List(labels.Everything())
if err != nil {
klog.Errorf("list pods failed, %v", err)
return nil, err
}

for _, pod := range pods {
if pod.Spec.NodeName != c.config.NodeName {
continue
}

subnetName, ok := pod.Annotations[fmt.Sprintf(util.LogicalSwitchAnnotationTemplate, util.OvnProvider)]
if !ok {
continue
}

subnet, err := c.subnetsLister.Get(subnetName)
if err != nil {
err = fmt.Errorf("failed to get subnet '%s', err: %v", subnetName, err)
return nil, err
}

if subnet.Spec.Vpc == c.config.ClusterRouter {
continue
}

filteredPods = append(filteredPods, pod)
}

if needSort {
sort.Slice(filteredPods, func(i, j int) bool {
return filteredPods[i].Namespace+"/"+filteredPods[i].Name < filteredPods[j].Namespace+"/"+filteredPods[j].Name
})
}

return filteredPods, nil
}
41 changes: 3 additions & 38 deletions pkg/daemon/gateway_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -775,50 +775,15 @@ func (c *Controller) reconcileTProxyIPTableRules(protocol string, isDual bool) e
ipt := c.iptables[protocol]
tproxyPreRoutingRules := make([]util.IPTableRule, 0)
tproxyOutputRules := make([]util.IPTableRule, 0)
var probePorts, podNames []string
var probePorts []string

pods, err := c.podsLister.List(labels.Everything())
pods, err := c.getTProxyConditionPod(true)
if err != nil {
klog.Errorf("list pods failed, %v", err)
return err
}

for _, pod := range pods {
podNames = append(podNames, pod.Namespace+"/"+pod.Name)
}

sort.Strings(podNames)

for _, podName := range podNames {
podIP := ""
items := strings.Split(podName, "/")
nsName := items[0]
name := items[1]
pod, err := c.podsLister.Pods(nsName).Get(name)
if err != nil {
klog.Errorf("get pod %s/%s failed, %v", nsName, name, err)
return err
}

if pod.Spec.NodeName != c.config.NodeName {
continue
}

subnetName, ok := pod.Annotations[fmt.Sprintf(util.LogicalSwitchAnnotationTemplate, util.OvnProvider)]
if !ok {
continue
}

subnet, err := c.subnetsLister.Get(subnetName)
if err != nil {
err = fmt.Errorf("failed to get subnet '%s', err: %v", subnetName, err)
return err
}

if subnet.Spec.Vpc == c.config.ClusterRouter {
continue
}

var podIP string
for _, ip := range pod.Status.PodIPs {
if util.CheckProtocol(ip.IP) == protocol {
podIP = ip.IP
Expand Down
28 changes: 2 additions & 26 deletions pkg/daemon/tproxy_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import (
"github.com/containernetworking/plugins/pkg/ns"
"github.com/vishvananda/netlink"
"golang.org/x/sys/unix"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/klog/v2"

kubeovnv1 "github.com/kubeovn/kube-ovn/pkg/apis/kubeovn/v1"
Expand Down Expand Up @@ -64,36 +63,13 @@ func (c *Controller) StartTProxyForwarding() {
func (c *Controller) StartTProxyTCPPortProbe() {

probePorts := map[string]interface{}{}
pods, err := c.podsLister.List(labels.Everything())
if err != nil {
klog.Errorf("failed to list pods: %v", err)
return
}

if len(pods) == 0 {
pods, err := c.getTProxyConditionPod(false)
if err != nil {
return
}

for _, pod := range pods {
if pod.Spec.NodeName != c.config.NodeName {
continue
}

subnetName, ok := pod.Annotations[fmt.Sprintf(util.LogicalSwitchAnnotationTemplate, util.OvnProvider)]
if !ok {
continue
}

subnet, err := c.subnetsLister.Get(subnetName)
if err != nil {
klog.Errorf("failed to get subnet '%s', err: %v", subnetName, err)
continue
}

if subnet.Spec.Vpc == c.config.ClusterRouter {
continue
}

iface := ovs.PodNameToPortName(pod.Name, pod.Namespace, util.OvnProvider)
nsName, err := ovs.GetInterfacePodNs(iface)
if err != nil || nsName == "" {
Expand Down

0 comments on commit dcfe86b

Please sign in to comment.