问题算是完美解决了,这里记录一下希望能帮助有需要的人。
问题产生的环境以及原因:virtualbox虚拟机,k8s: 1master 2worker,网络均使用host-only模式生成虚拟机节点IP,此IP不需要DHCP到宿主机的路由器,因此不会随着外部网络环境的变化而改变IP,但弊端是无法连接外部网络,于是楼主想到使用NAT模式来从虚拟机中访问外部网络环境。
因此理想的情况是:
集群内部网络 => 走 host-only网卡
外部网络 => 走 nat 网卡
在worker节点下执行 route -n
查看路由表,我发现service ip(10.96.0.0/12)并不在这个路由表里,最终导致走了最后的host-only网卡,我们知道host-only网卡是连不到外部网络的,因此执行下面的操作,回归正常:
# 如果目标IP不在路由表里,走这条路由(即外部网络,10.0.3.2 是nat的网关)
route add default gw 10.0.3.2 dev enp0s8
# 目标是k8s service ip网段走host-only网卡(即下面的enp0s3)
route add -net 10.96.0.0/12 dev enp0s3
简单测试一下:
curl https://10.96.0.1 --insecure -vvv
curl baidu.com -vvv
~~ 我发现service ip(10.96.0.0/12)并不在这个路由表里,最终导致走了最后的host-only网卡,我们知道host-only网卡是连不到外部网络的~~
抱歉这部分说反了,实际是service ip 走了nat模式到外网寻找网络10.96.0.0/12去了,显然这样是找不到的。
1
learningman 2020-12-06 12:56:07 +08:00
先自顶向下,然后去看文档吧
|
2
CallMeReznov 2020-12-06 17:16:54 +08:00 1
|
3
fasionchan 2020-12-06 18:36:26 +08:00 1
|
4
zhoudaiyu 2020-12-07 09:00:14 +08:00
iptables 不是 kube-proxy 自动生成的吗?为啥要配呢?
|
5
lvzhiqiang 2020-12-07 09:33:43 +08:00
用 VMware Workstation, 网络访问方式 用 nat, 组一个私网。 能上外网又不会出现你说的那些莫名的问题。 你这样做只会引入复杂性,不容易排错和定位问题。
|
6
JJstyle OP @lvzhiqiang 你说的这种应该就是 vb 里面的桥接模式吧,我刚开始也用这种,这个确实方便省事,但是有个缺陷就是 wifi 变了虚拟机 ip 也会变
|
7
JJstyle OP @lvzhiqiang VMware Workstation 的 nat 模式是可以的,找了篇文章分析两个虚拟机软件的网络的区别,看来这个 nat 模式区别有点大: https://blog.csdn.net/lyjshen/article/details/69367245
|
8
lvzhiqiang 2020-12-07 10:19:45 +08:00
@JJstyle nat 模式,不会变, 你只要配置 IP 为固定 IP 就可以了。 桥接模式也可以,IP 和你真实物理的局域网一个段,同样是配置固定 IP 就行。DHCP 只是自动获取 IP 而已。
|
9
JJstyle OP @zhoudaiyu 所以我一开始方向就错了,iptables 没问题,往上找了篇博客,我跟他有类似的问题,但是他是改 iptables 解决的,https://wilhelmguo.cn/blog/post/william/Kubernetes-%E8%B8%A9%E5%9D%91%E8%AE%B0%E4%B9%8B-%E9%9B%86%E7%BE%A4node%E6%97%A0%E6%B3%95%E8%AE%BF%E9%97%AEservice
|
10
JJstyle OP @lvzhiqiang virtualbox 的 nat 和 vmware 的 nat 有些区别,即 vb 里的 nat,虚拟机互相无法通信(可以看我上面发到链接),所以我不能用他搭建集群网络。
|
11
JJstyle OP @lvzhiqiang 固定 IP 这个我清楚,但是有时我在家,有时我在公司,网络不一样,所以 IP 无法固定
|
12
lvzhiqiang 2020-12-07 10:35:33 +08:00
@JJstyle vmware 用 nat 就可以了。 我都是用 nat,搞了很多次部署配置实验了。
|
13
lc7029 2020-12-07 15:55:19 +08:00
建议先系统学习 tcpip,吃透原理再来
|