环境 cilium(wireguard) + kubeedge,云主机为 Master, 家里的主机为 Edge Node。
问题: 就是创建个 busybox ds, 云上的 pod 与本地主机中的 pod ping 不通。
正常话的,先从本地主机 pod 云 ping 云上的应该是 Ok 的,再反过来也是行的。
cilium version: v1.15.3
注意下面出现的日志可能不一致,因为做了很多尝试,没保留。
问题日志
主要先是看到上面的日志中,wireguard 配置没成功,应该成功的话会,两端的 transfer 中的 received bytes 不会是 0。
然后想到怎么 debug wireguard,看 wireguard 相关的日志。
Debug WireGuard Linux kernel module · GitHub
发现 local 这端一直说没有 allowed 云上的 External IP。
后面尝试下手动给 allowed ip 加上 113.44.78.147
然后 local 和云主机就建立连接成功了,云上的 wireguard peer endpoint 也变成 local 的出口地址了 180.172.97.88。
local
k8s@k8s-109:~$ sudo wg
interface: cilium_wg0
public key: Izy5W1viHwkkCL1gRuTO5iINCeFcujXg+lgALIpBWR4=
private key: (hidden)
listening port: 51871
fwmark: 0x1e00
peer: eKl8SvbgtutrlszzcM0wvXj9e2xm0eibPw9Pzo3xVjg=
endpoint: 192.168.10.106:51871
allowed ips: 192.168.10.106/32, 10.0.0.230/32, 10.0.0.15/32, 10.0.0.35/32, 10.0.0.126/32, 113.44.78.147/32
latest handshake: 4 seconds ago
transfer: 92 B received, 292 B sent
云
root@hcss-ecs-0616:~# sudo wg
interface: cilium_wg0
public key: eKl8SvbgtutrlszzcM0wvXj9e2xm0eibPw9Pzo3xVjg=
private key: (hidden)
listening port: 51871
fwmark: 0x1e00
peer: Izy5W1viHwkkCL1gRuTO5iINCeFcujXg+lgALIpBWR4=
endpoint: 180.172.97.88:51871
allowed ips: 192.168.10.105/32, 10.0.1.231/32, 10.0.1.34/32
latest handshake: 10 seconds ago
transfer: 292 B received, 124 B sent
好景不长,手动设置,一会儿会被立刻更新掉配置。想了下可以改下代码,自己编译个 cilium 版本,提并到 dockerhub 上,然后部署的时候改 cilium 的 image 地址。
找到 cilium 代码中的 wireguard 配置逻辑,
pkg/wireguard/agent.go
更新逻辑再这
build 失败发现网络问题,没有设置代理。
Makefile.docker:98
my-build.sh
sh ./my-build.sh
docker push xmchx/cilium:latest
至此修改过后的版本搞好了。
不久前刚好把 docker hub 给封了,用不了。
想了下在云上还是直接手动的上传 image 然后 import。
配置 cilium 的 image 地址
恩,wireguard 目测配置 ok,虽然但是,依然 Ping 不通,野路子放弃。
也一通流量分析过
先研究下整体结构是咋样的,最找的版本有讲this,然后对比看当前配置发现不致,估计整个配置方式改变了,底层也不懂啊,就用了老版本试试。
设置 l7Proxy=false 的原因
恩 ping 通了,成功了!!!
甚至 endpoin 的都没变
待续。。。
提 issue Cilium (enable Wireguard): pod connectivity fail
云上的LOG
Local的LOG