通过路由表让集群外直连k8s集群的Pod

0 实验环境

  • 172.20.6.10、172.20.6.14、172.20.6.17 三台机器组成k8s集群
  • 使用腾讯云,将上述机器放到子网bj6:172.20.6.0/24下
  • 使用flanel(vxlan)网络插件
  • Pod的cidr是10.6.0.0/16
  • 创建一个Pod,被调度到n3上,IP是10.6.2.2

1 从集群外另一台机器访问

  • 创建另一个子网bj7:172.20.7.0/24,并创建一台新机器172.20.7.13
  • 直接访问10.6.2.2是不通的

2 给子网bj7添加路由表,如下:

 

绑定到bj7后,再次从172.20.7.13上访问10.6.2.2,成功!

curl "10.6.2.2"
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

3 后记

当你可以操纵路由表时,这种方式时非常方便的,比ingress强太多。

但只有部分网络插件是支持这种打通方式。

可以从任意集群的物理机访问Pod的网络插件,都是可以的,如:

  • flanel(vxlan)
  • Weave(默认cidr10.32.0.0/12)

其他则不可以的:

  • flanel(host-gw)

 

Leave a Reply

Your email address will not be published. Required fields are marked *