无状态Kubernetes使用IPv6覆盖网络

2021-02-21 07:36:03

Kubernetes网络模型通常由覆盖网络实现,该覆盖网络允许Pod具有与底层结构分离的IP地址。有数十种不同的覆盖网络实现,这些实现将有状态IPv4地址分配器与VXLAN作为传输层相结合。 IPv4覆盖网络具有许多有据可查的缺点,这助长了Kubernetes。由于无法在小型集群(约10,000台计算机)上运行而难以操作。

本页描述了基于无状态IPv6隧道的覆盖网络,该网络比有状态IPv4覆盖具有更好的可靠性和可伸缩性。它使用Linux内核本身支持的IETF协议,并且由于它独立于Kubernetes本身,因此可以支持容器内部和外部进程之间的通信。

6to4(RFC 3056)是用于在IPv4网络上路由IPv6流量的标准。它最初是作为IPv6迁移策略的一部分设计的,允许隔离的仅IPv6的网络使用现有的Internet基础结构。该协议非常简单–使用协议号41将IPv6数据包视为IPv4有效负载。

Teredo(RFC 4380)通过添加UDP封装层扩展了6to4,这可以提高与中间网络设备的兼容性,这些中间网络设备与非TCP / UDP协议存在兼容性问题。该页面假定使用Teredo,但如果基础网络允许6to4(协议41),则可以关闭UDP封装以节省每个数据包8个字节。

Linux内核具有内置支持,可在站点驱动程序中创建6to4隧道。通过启用UDP上的Foo(FOU)模式,此类隧道可以选择使用Teredo协议,该模式是Linux隧道驱动程序的一种设置,用于将数据包封装在UDP中。 FOU基于封装的分组的连接元组计算出站分组的综合源端口,从而允许中间路由器区分底层流(例如用于链路聚合或流控制)。