【Kubernetes Pod间通信-第2篇】使用BGP实现Pod到Pod的通信

发布于:2025-02-10 ⋅ 阅读:(43) ⋅ 点赞:(0)

Kubernetes中Pod间的通信

本系列文章共3篇:

简介

在本系列文章的第1、2篇,我们将了解在使用Calico作为容器网络接口(CNI)时,Kubernetes中Pod间的通信在不同场景下是如何路由的。
在本系列文章的第3篇,我们将探讨在集群中Pod与服务之间的通信是如何管理的。

为此,我们将使用TCPDUMP、Wireshark以及如traceroute这样的Linux命令来观察数据包。在第一部分,我们将查看位于同一子网内不同节点上的两个容器/Pod之间的流量。在第二部分,我们将使用由路由器分隔且使用BGP的不同子网中的节点,包括使用和不使用虚拟可扩展局域网(VXLAN)的情况。

本部分研究两种通信场景:

  • 场景4:不使用VXLAN的BGP
  • 场景5:使用BGP和VXLAN进行隧道传输

场景4:不使用VXLAN的BGP

我们在之前的场景中了解到,Pod之间的流量无需网络地址转换(NAT)即可直接路由。因此,即使这个新场景更为复杂,但并没有太大差异,依旧是路由,而源地址和目的地址保持不变。

在这里插入图片描述

  1. 重新配置kubeadm2

由于在这个新场景中,kubeadm2将与kubeadm1不在同一子网,首先要将其从集群中移除,然后更改其IP地址和网关。此时,kubeadm2无法访问kubeadm1,因为这两个节点之间的路由无效。

kubectl delete node kubeadm2
# 在kubeadm2上执行
sudo kubeadm reset
  1. 创建骨干网络

我们在集群节点之间添加了两个路由器。BGP(边界网关协议)将用于Pod之间的流量路由。Calico中包含了Bird,我们在路由器上也安装了相同的Bird软件。请注意,我们也可以使用不同的软件,甚至是一些物理路由器。

  1. router1配置

以下是基于Ubuntu 24.04 LTS的网络和Bird的配置文件:

# /etc/netplan/50-cloud-init.yaml
network:
    ethernets:
        lo:  
          addresses:
          - 10.0.0.1/32 # 我们将用它作为路由器ID
        ens33: # 此接口用于连接互联网,你的可能不同
            addresses:
            - 192.168.8.10/24
            routes:
            - to: default
              via: 192.168.8.2
            nameservers:
              addresses:
              - 8.8.8.8
              - 0.0.0.0
        ens37: # 此接口用于连接本地节点
            addresses:
            - 192.168.16.1/24
        ens38: # 此接口用于连接另一侧的节点
            addresses:
            - 192.168.18.1/24
    version: 2
# /etc/bird/bird.conf
log syslog all;
router id 10.0.0.1; # 环回地址
protocol device {
   
}
protocol direct {
   
  interface "lo", "ens37", "ens38";
}
protocol kernel {
   
    export all;
}
protocol static {
   
}
protocol bgp router2 {
   
  local 192.168.18.1 as 64513;
  neighbor  192.168.18.2 as 64513;
  next hop self;
  import all;
  export all;
}
protocol bgp kubeadm1 {
   
  local 192.168.16.1 as 64513;
  neighbor  192.168.16.101 as 64512;
  import all;
  

网站公告

今日签到

点亮在社区的每一天
去签到