Kubernetes中Pod间的通信
本系列文章共3篇:
- 【Kubernetes Pod间通信-第1篇】在单个子网中使用underlay网络实现Pod到Pod的通信(本文介绍)
- 【Kubernetes Pod间通信-第2篇】使用BGP实现Pod到Pod的通信
- 【Kubernetes Pod间通信-第3篇】Kubernetes中Pod与ClusterIP服务之间的通信
第一部分:单个子网内的通信
1. 简介
在本系列文章的第1、2篇,我们将了解在使用Calico作为容器网络接口(CNI)时,Kubernetes中Pod间的通信在不同场景下是如何路由的。
在本系列文章的第3篇,我们将探讨在集群中Pod与服务之间的通信是如何管理的。
为此,我们将使用TCPDUMP、Wireshark以及如traceroute这样的Linux命令来观察数据包。在第一部分,我们将查看位于同一子网内不同节点上的两个容器/Pod之间的流量。在第二部分,我们将使用由路由器分隔且使用BGP的不同子网中的节点,包括使用和不使用虚拟可扩展局域网(VXLAN)的情况。
本部分研究三种通信场景:
- 场景1:同一Pod中的两个容器。
- 场景2:同一节点上运行的两个不同Pod中的两个容器。
- 场景3:两个不同节点上运行的两个不同Pod中的两个容器。
2. Kubernetes集群与Calico安装
我们不会在本文中详细解释这部分内容。我随后会写文章介绍这部分内容。
在本部分,我在初始化集群时使用了 pod-network-cidr=10.245.0.0/16
和 service-cidr=10.97.0.0/23
。
sudo kubeadm init --pod-network-cidr=10.245.0.0/16 --service-cidr 10.97.0.0/23
在使用operator安装Calico期间,我仅在 custom-resources.yaml
中修改了 cidr ipPools
。
# 当集群使用10.244.0.0/24作为Pod的CIDR进行初始化时,更改cidr ipPools
sudo sed -i's+192.168.0.0/16+10.245.0.0/24+' custom-resources.yaml
封装值保持为“VXLANCrossSubnet”不变。由于所有Pod都将位于同一子网中,不会发生封装,如果你愿意,也可以将其更改为None。
因为在这三种场景中我们都不会使用BGP,所以最好在集群中停止该进程。
kubectl patch installation default --type=merge -p