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

作者:李佶澳  更新时间:

  项目    kubernetes  calico    刷新

目录

现象说明

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: [email protected]: <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)

参考

关注加微信,一般不闲聊(直接说事)

Copyright @2011-2019 All rights reserved. 转载请添加原文连接,合作请加微信lijiaocn或者发送邮件: [email protected],备注网站合作

友情链接:  微信公众号精选文章  发现知识星球