使用calico的ipip模式解决k8s的跨网段通信

作者: 李佶澳   转载请保留:原文地址   发布时间:2017/09/25 15:41:31

现象说明

kubernetes集群使用的网络方案是calico(v2.0.0)node mesh的方式。

新增加的node与原先的node不属于同一个网段,发现新的node中pod无法与原先的node中的pod通信。

不能通信的原因调查

node10.39.0.110上的pod的地址为192.168.70.42,node10.39.3.75上的pod的地址为192.168.169.196。

从node10.39.0.110上无法ping通192.168.169.196,查看10.39.0.110上的路由:

# ip route
default via 10.39.0.1 dev eth0  proto static  metric 100
192.168.169.192/26 via 10.39.0.1 dev eth0  proto bird
...

从路由表中发现到192.168.169.196的路由是通过网关10.39.0.1送出。

在本文使用的kubernetes集群中,calico没有网关进行路由交换,网关10.39.0.1并不知道192.168.169.192的存在。

暂时不能操作网关,考虑通过ipip的方式联通不同的网段。

开启ipip模式

执行calicoctl get ippool -o json >pool.json,得到json文件。

[
  {
    "kind": "ipPool",
    "apiVersion": "v1",
    "metadata": {
      "cidr": "192.168.0.0/16"
    },
    "spec": {
      "ipip":{
        "enabled": true
      },
      "nat-outgoing": true
    }
  }
]

将ipip设置为enable之后,通过calicoctl apply -f pool.json更新ippool。

开支ipip模式后的路由变化

node10.39.0.110上的路由表变更为:

# ip route
default via 10.39.0.1 dev eth0  proto static  metric 100
192.168.169.192/26 via 10.39.3.75 dev tunl0  proto bird onlink
...

发送到192.168.169.196上的报文将直接通过tunl0发送到目标pod所在的node上。

node10.39.0.110上的tunl0设备:

91: tunl0@NONE: <NOARP,UP,LOWER_UP> mtu 1440 qdisc noqueue state UNKNOWN qlen 1
	link/ipip 0.0.0.0 brd 0.0.0.0
	inet 192.168.70.57/32 scope global tunl0
	   valid_lft forever preferred_lft forever

从192.168.70.42 ping 192.168.169.196的时候,在node10.39.0.110上抓取报文可以看到:

# tcpdump -n -i eth0 host 10.39.3.75
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
16:41:06.884185 IP 10.39.0.110 > 10.39.3.75: IP 192.168.70.42 > 192.168.169.196: ICMP echo request, id 20142, seq 12, length 64 (ipip-proto-4)
16:41:07.884165 IP 10.39.0.110 > 10.39.3.75: IP 192.168.70.42 > 192.168.169.196: ICMP echo request, id 20142, seq 13, length 64 (ipip-proto-4)
16:41:08.884128 IP 10.39.0.110 > 10.39.3.75: IP 192.168.70.42 > 192.168.169.196: ICMP echo request, id 20142, seq 14, length 64 (ipip-proto-4)

参考

欢迎加微信,最好备注姓名和方向

QQ交流群

区块链实践互助QQ群:576555864

Kubernetes实践互助QQ群:947371129

Prometheus实践互助QQ群:952461804

API网关Kong实践互助QQ群:952503851

Ansible实践互助QQ群:955105412

Copyright @2011-2018 All rights reserved. 转载请添加原文连接,合作请加微信lijiaocn或者发送邮件: lijiaocn@foxmail.com,备注网站合作 友情链接: lijiaocn github.com