1. Tunnel-Agent简介
tunnel-agent是通过daemonset部署在每个worker节点,通过grpc协议与云端的tunnel-server建立连接。以下分析tunnel-agent的源码逻辑。
常用的启动参数:
1 | - args: |
2. NewYurttunnelAgentCommand
NewYurttunnelAgentCommand还是常用命令代码三板斧,此处不做展开,直接分析Run函数。
1 | // NewYurttunnelAgentCommand creates a new yurttunnel-agent command |
3. Run
Run函数即启动一个agent服务,主要包含以下几个步骤:
-
先获取配置项tunnelserver-addr中的地址,如果地址不存在,则获取x-tunnel-server-svc的service 地址。(说明:一般情况下,tunnel-server跟agent不在同一个网络域,因此网络会不通,所以一般需要配置独立且可连通的地址,可以通过Nginx转发)
-
agent通过host的网络模式运行在宿主机上,启动证书manager。并等待证书生成。
-
生成连接tunnel-server的证书。
-
启动 yurttunnel-agent。
-
启动meta server。
1 | // Run starts the yurttunel-agent |
4. TunnelAgent
TunnelAgent与tunnel-server建立tunnel,接收server的请求,并转发给kubelet。
1 | // TunnelAgent sets up tunnel to TunnelServer, receive requests |
5. anpTunnelAgent.Run
anpTunnelAgent使用apiserver-network-proxy包来实现tunnel逻辑。项目具体参考:https://github.com/kubernetes-sigs/apiserver-network-proxy)
1 | // RunAgent runs the yurttunnel-agent which will try to connect yurttunnel-server |
以下是apiserver-network-proxy的源码分析,待补充。
参考:
赞赏一下