所有文章

KubeEdge源码分析

本文以1.2.1版本为例,项目结构说明:kubeedge

边缘端模块

EdgeHub

模块位置:edge/pkg/edgehub
该模块用于与CloudHub通信,目前支持两种方式与CloudHub建立连接:QUIC协议和WebSocket协议,无论使用哪种方式都会使用TLS加密。

使用QUIC方式

关键代码quicclient.go:75

func (qcc *QuicClient) Init() error {
    // ... 省略多行 ...
    client := qclient.NewQuicClient(option, exOpts)
    // ... 省略多行 ...
}

上面的NewQuicClient()函数其实是调用第三方包(quic-go)建立多路复用的UDP连接与CloudHub端通信client.go:86

func DialAddrContext(ctx context.Context, addr string, tlsConf *tls.Config, config *Config,) (Session, error) {
    // ... 省略多行 ...
    udpConn, err := net.ListenUDP("udp", &net.UDPAddr{IP: net.IPv4zero, Port: 0})
    return dialContext(ctx, udpConn, udpAddr, addr, tlsConf, config, true)
}

使用WebSocket方式

关键代码websocket.go:75

func (qcc *QuicClient) Init() error {
    // ... 省略多行 ...
    client := &wsclient.Client{Options: option, ExOpts: exOpts}
    // ... 省略多行 ...
}

编写日期:2020-03-27