diff --git a/core/chain.go b/core/chain.go index f1b758a0..2be47c8c 100644 --- a/core/chain.go +++ b/core/chain.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "math" "net" ) @@ -36,12 +37,7 @@ func (c *Chain) IsEmpty() bool { // DialContext connects to the address on the named network using the provided context. func (c *Chain) DialContext(ctx context.Context, network, address string) (conn net.Conn, err error) { - retries := 1 - if c != nil && c.Retries > 0 { - retries = c.Retries - } - - for i := 0; i < retries; i++ { + for i := 0; i < int(math.Max(float64(1), float64(c.Retries))); i++ { conn, err = c.dial(ctx, network, address) if err == nil { break @@ -67,7 +63,7 @@ func (c *Chain) dial(ctx context.Context, network, address string) (net.Conn, er cc, err := c.Node().Client.ConnectContext(ctx, conn, network, ipAddr) if err != nil { - conn.Close() + _ = conn.Close() return nil, err } return cc, nil @@ -82,35 +78,10 @@ func (*Chain) resolve(addr string) string { return addr } -// Conn obtains a handshaked connection to the last node of the chain. -func (c *Chain) Conn() (conn net.Conn, err error) { - ctx := context.Background() - - retries := 1 - if c != nil && c.Retries > 0 { - retries = c.Retries - } - - for i := 0; i < retries; i++ { - conn, err = c.getConn(ctx) - if err == nil { - break - } - } - return -} - // getConn obtains a connection to the last node of the chain. -func (c *Chain) getConn(_ context.Context) (conn net.Conn, err error) { +func (c *Chain) getConn(_ context.Context) (net.Conn, error) { if c.IsEmpty() { - err = ErrorEmptyChain - return + return nil, ErrorEmptyChain } - cc, err := c.Node().Client.Dial(c.Node().Addr) - if err != nil { - return - } - - conn = cc - return + return c.Node().Client.Dial(c.Node().Addr) } diff --git a/core/tcpserver.go b/core/tcpserver.go index 270f3b3b..738d6810 100644 --- a/core/tcpserver.go +++ b/core/tcpserver.go @@ -36,10 +36,7 @@ type fakeUdpHandler struct { // TCPHandler creates a server Handler func TCPHandler() Handler { - h := &fakeUdpHandler{} - //h.Init() - - return h + return &fakeUdpHandler{} } func (h *fakeUdpHandler) Init(...HandlerOption) { @@ -54,10 +51,8 @@ func (h *fakeUdpHandler) Handle(conn net.Conn) { } func (h *fakeUdpHandler) transportUDP(relay, peer net.PacketConn) (err error) { - errc := make(chan error, 2) - + errChan := make(chan error, 2) var clientAddr net.Addr - go func() { b := util.MPool.Get().([]byte) defer util.MPool.Put(b) @@ -65,7 +60,7 @@ func (h *fakeUdpHandler) transportUDP(relay, peer net.PacketConn) (err error) { for { n, laddr, err := relay.ReadFrom(b) if err != nil { - errc <- err + errChan <- err return } if clientAddr == nil { @@ -74,7 +69,7 @@ func (h *fakeUdpHandler) transportUDP(relay, peer net.PacketConn) (err error) { dgram, err := ReadDatagramPacket(bytes.NewReader(b[:n])) if err != nil { log.Errorln(err) - errc <- err + errChan <- err return } @@ -84,7 +79,7 @@ func (h *fakeUdpHandler) transportUDP(relay, peer net.PacketConn) (err error) { continue // drop silently } if _, err := peer.WriteTo(dgram.Data, raddr); err != nil { - errc <- err + errChan <- err return } if util.Debug { @@ -100,7 +95,7 @@ func (h *fakeUdpHandler) transportUDP(relay, peer net.PacketConn) (err error) { for { n, raddr, err := peer.ReadFrom(b) if err != nil { - errc <- err + errChan <- err return } if clientAddr == nil { @@ -110,7 +105,7 @@ func (h *fakeUdpHandler) transportUDP(relay, peer net.PacketConn) (err error) { dgram := NewDatagramPacket(raddr, b[:n]) _ = dgram.Write(&buf) if _, err := relay.WriteTo(buf.Bytes(), clientAddr); err != nil { - errc <- err + errChan <- err return } if util.Debug { @@ -119,7 +114,7 @@ func (h *fakeUdpHandler) transportUDP(relay, peer net.PacketConn) (err error) { } }() - return <-errc + return <-errChan } func (h *fakeUdpHandler) handleUDPTunnel(conn net.Conn) { @@ -141,7 +136,7 @@ func (h *fakeUdpHandler) handleUDPTunnel(conn net.Conn) { } func (h *fakeUdpHandler) tunnelServerUDP(cc net.Conn, pc net.PacketConn) (err error) { - errc := make(chan error, 2) + errChan := make(chan error, 2) go func() { b := util.MPool.Get().([]byte) @@ -151,7 +146,7 @@ func (h *fakeUdpHandler) tunnelServerUDP(cc net.Conn, pc net.PacketConn) (err er n, addr, err := pc.ReadFrom(b) if err != nil { log.Debugf("[udp-tun] %s : %s", cc.RemoteAddr(), err) - errc <- err + errChan <- err return } @@ -159,7 +154,7 @@ func (h *fakeUdpHandler) tunnelServerUDP(cc net.Conn, pc net.PacketConn) (err er dgram := NewDatagramPacket(addr, b[:n]) if err := dgram.Write(cc); err != nil { log.Debugf("[tcpserver] udp-tun %s <- %s : %s", cc.RemoteAddr(), dgram.Addr(), err) - errc <- err + errChan <- err return } if util.Debug { @@ -173,7 +168,7 @@ func (h *fakeUdpHandler) tunnelServerUDP(cc net.Conn, pc net.PacketConn) (err er dgram, err := ReadDatagramPacket(cc) if err != nil { log.Debugf("[udp-tun] %s -> 0 : %v", cc.RemoteAddr(), err) - errc <- err + errChan <- err return } @@ -185,7 +180,7 @@ func (h *fakeUdpHandler) tunnelServerUDP(cc net.Conn, pc net.PacketConn) (err er } if _, err := pc.WriteTo(dgram.Data, addr); err != nil { log.Debugf("[tcpserver] udp-tun %s -> %s : %s", cc.RemoteAddr(), addr, err) - errc <- err + errChan <- err return } if util.Debug { @@ -194,7 +189,7 @@ func (h *fakeUdpHandler) tunnelServerUDP(cc net.Conn, pc net.PacketConn) (err er } }() - return <-errc + return <-errChan } // fake udp connect over tcp diff --git a/core/tunhandler.go b/core/tunhandler.go index 16811ff4..2284e6d4 100644 --- a/core/tunhandler.go +++ b/core/tunhandler.go @@ -17,9 +17,9 @@ import ( "golang.org/x/net/ipv6" ) -type tunRouteKey [16]byte +type key [16]byte -func ipToTunRouteKey(ip net.IP) (key tunRouteKey) { +func ipToTunRouteKey(ip net.IP) (key key) { copy(key[:], ip.To16()) return } @@ -39,7 +39,6 @@ func TunHandler(opts ...HandlerOption) Handler { for _, opt := range opts { opt(h.options) } - return h } @@ -138,7 +137,7 @@ func (h *tunHandler) findRouteFor(dst net.IP) net.Addr { } func (h *tunHandler) transportTun(tun net.Conn, conn net.PacketConn, raddr net.Addr) error { - errc := make(chan error, 2) + errChan := make(chan error, 2) defer conn.Close() ctx, cancelFunc := context.WithCancel(context.Background()) remote.CancelFunctions = append(remote.CancelFunctions, cancelFunc) @@ -205,7 +204,7 @@ func (h *tunHandler) transportTun(tun net.Conn, conn net.PacketConn, raddr net.A }() if err != nil { - errc <- err + errChan <- err return } } @@ -283,7 +282,7 @@ func (h *tunHandler) transportTun(tun net.Conn, conn net.PacketConn, raddr net.A }() if err != nil { - errc <- err + errChan <- err cancelFunc() return } @@ -291,7 +290,7 @@ func (h *tunHandler) transportTun(tun net.Conn, conn net.PacketConn, raddr net.A }() select { - case err := <-errc: + case err := <-errChan: return err case <-ctx.Done(): return nil diff --git a/dns/dns.go b/dns/dns.go index bebfc544..f30aadd6 100644 --- a/dns/dns.go +++ b/dns/dns.go @@ -5,7 +5,6 @@ import ( "context" miekgdns "github.com/miekg/dns" "github.com/pkg/errors" - "github.com/sirupsen/logrus" "github.com/wencaiwulue/kubevpn/util" v12 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -19,7 +18,7 @@ func GetDNSServiceIPFromPod(clientset *kubernetes.Clientset, restclient *rest.RE if ips, err := getDNSIPFromDnsPod(clientset); err == nil && len(ips) != 0 { ipp = ips } - if ip, err := util.Shell(clientset, restclient, config, util.TrafficManager, namespace, "cat /etc/resolv.conf"); err == nil { + if ip, err := util.Shell(clientset, restclient, config, podName, namespace, "cat /etc/resolv.conf"); err == nil { if resolvConf, err := miekgdns.ClientConfigFromReader(bytes.NewBufferString(ip)); err == nil { if len(ipp) != 0 { resolvConf.Servers = append(resolvConf.Servers, make([]string, len(ipp))...) @@ -35,7 +34,6 @@ func GetDNSServiceIPFromPod(clientset *kubernetes.Clientset, restclient *rest.RE } else { return nil, err } - logrus.Fatal("this should not happened") return nil, errors.New("this should not happened") } diff --git a/remote/remote_test.go b/remote/remote_test.go index 910c882b..c14a3c20 100644 --- a/remote/remote_test.go +++ b/remote/remote_test.go @@ -6,7 +6,6 @@ import ( "encoding/json" "fmt" log "github.com/sirupsen/logrus" - "github.com/wencaiwulue/kubevpn/pkg" "github.com/wencaiwulue/kubevpn/util" v1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" @@ -25,32 +24,32 @@ import ( "time" ) -func TestCreateServer(t *testing.T) { - clientConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig( - &clientcmd.ClientConfigLoadingRules{ExplicitPath: clientcmd.RecommendedHomeFile}, nil, - ) - config, err := clientConfig.ClientConfig() - if err != nil { - log.Fatal(err) - } - clientset, err := kubernetes.NewForConfig(config) - if err != nil { - log.Fatal(err) - } - - i := &net.IPNet{ - IP: net.ParseIP("192.168.254.100"), - Mask: net.IPv4Mask(255, 255, 255, 0), - } - - j := &net.IPNet{ - IP: net.ParseIP("172.20.0.0"), - Mask: net.IPv4Mask(255, 255, 0, 0), - } - - server, err := pkg.CreateOutboundRouterPod(clientset, "test", i, []*net.IPNet{j}) - fmt.Println(server) -} +//func TestCreateServer(t *testing.T) { +// clientConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig( +// &clientcmd.ClientConfigLoadingRules{ExplicitPath: clientcmd.RecommendedHomeFile}, nil, +// ) +// config, err := clientConfig.ClientConfig() +// if err != nil { +// log.Fatal(err) +// } +// clientset, err := kubernetes.NewForConfig(config) +// if err != nil { +// log.Fatal(err) +// } +// +// i := &net.IPNet{ +// IP: net.ParseIP("192.168.254.100"), +// Mask: net.IPv4Mask(255, 255, 255, 0), +// } +// +// j := &net.IPNet{ +// IP: net.ParseIP("172.20.0.0"), +// Mask: net.IPv4Mask(255, 255, 0, 0), +// } +// +// server, err := pkg.CreateOutboundRouterPod(clientset, "test", i, []*net.IPNet{j}) +// fmt.Println(server) +//} func TestGetIp(t *testing.T) { ip := &net.IPNet{ @@ -203,7 +202,7 @@ func TestGetTopController(t *testing.T) { configFlags.KubeConfig = &clientcmd.RecommendedHomeFile factory := cmdutil.NewFactory(cmdutil.NewMatchVersionFlags(configFlags)) clientset, _ := factory.KubernetesClientSet() - controller := util.GetTopController(factory, clientset, "test", "pods/tomcat-7449544d95-n72zb") + controller := util.GetTopController(factory, clientset, "default", "pods/productpage-69cf486c4f-z8hb9") fmt.Println(controller.Resource) fmt.Println(controller.Name) fmt.Println(controller.Scale) diff --git a/util/util.go b/util/util.go index aa7a1e77..55dbf3ac 100644 --- a/util/util.go +++ b/util/util.go @@ -179,7 +179,6 @@ func GetTopController(factory cmdutil.Factory, clientset *kubernetes.Clientset, } controller.Resource = strings.ToLower(of.Kind) + "s" controller.Name = of.Name - controller.Scale = GetScale(object.Object) of = GetOwnerReferences(object.Object) } return @@ -301,27 +300,8 @@ func GetUnstructuredObject(f cmdutil.Factory, namespace string, workloads string } func GetLabelSelector(object k8sruntime.Object) *metav1.LabelSelector { - defer func() { - if err := recover(); err != nil { - log.Errorln(err) - } - }() - l := &metav1.LabelSelector{} - printer, _ := printers.NewJSONPathPrinter("{.spec.selector}") - buf := bytes.NewBuffer([]byte{}) - if err := printer.PrintObj(object, buf); err != nil { - pathPrinter, _ := printers.NewJSONPathPrinter("{.metadata.labels}") - _ = pathPrinter.PrintObj(object, buf) - } - err := json2.Unmarshal([]byte(buf.String()), l) - if err != nil || len(l.MatchLabels) == 0 { - m := map[string]string{} - _ = json2.Unmarshal([]byte(buf.String()), &m) - if len(m) != 0 { - l = &metav1.LabelSelector{MatchLabels: m} - } - } - return l + labels := object.(metav1.Object).GetLabels() + return &metav1.LabelSelector{MatchLabels: labels} } func GetPorts(object k8sruntime.Object) []v1.ContainerPort { @@ -357,18 +337,7 @@ func GetPorts(object k8sruntime.Object) []v1.ContainerPort { } func GetOwnerReferences(object k8sruntime.Object) *metav1.OwnerReference { - defer func() { - if err := recover(); err != nil { - log.Errorln(err) - } - }() - printer, _ := printers.NewJSONPathPrinter("{.metadata.ownerReferences}") - buf := bytes.NewBuffer([]byte{}) - if err := printer.PrintObj(object, buf); err != nil { - return nil - } - var refs []metav1.OwnerReference - _ = json2.Unmarshal([]byte(buf.String()), &refs) + refs := object.(metav1.Object).GetOwnerReferences() for i := range refs { if refs[i].Controller != nil && *refs[i].Controller { return &refs[i]