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}
// ... 省略多行 ...
}