mirror of
https://github.com/kubenetworks/kubevpn.git
synced 2025-12-24 11:51:13 +08:00
optimize code
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
37
util/util.go
37
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]
|
||||
|
||||
Reference in New Issue
Block a user