Kubernetes_容器网络_Calico_01_Calico作为CNI插件如何为Pod生成虚拟IP

一、前言

Kubernetes中,除了daemonSet和运行在主节点的静态Pod(例如 apiserver controller-manager scheduler etcd),直接使用宿主机IP作为Pod之外,其他的,deployment statefulset job/cronjob replicaSet 控制器管理的Pod,都是需要使用虚拟IP的。这些Pod运行所需要的虚拟IP,都是cni网络插件生成的,如果使用的cni网络插件是Calico的,这些虚拟IP是一个crd自定义的 kind: IPPool 的资源生成的。

这篇文章就来看一下Calico中这个IPPool是怎样为Pod生成虚拟IP的。

本文把握两个知识点
第一,学会查看 ippool 整个yaml文件中,各个属性什么意思;(本文第二部分)
第二,对于各种业务需求,如果使用 IPPool 来完成。(本文第三部分)

二、学会查看 ippool 整个yaml文件中,各个属性什么意思

Pod一般不建议设置静态IP地址,若想要实现设置静态IP,可以参考下面的方法。像亚马逊、阿里云等厂家是支持静态IP的,但如果是自己的私有云,可以参考下面的方法。这里使用的是calico网络方案,其他的网络方案,好像并不支持,更详细的操作,可以看看calico的官方文档。

2.1 ippool整个yaml文件属性解释

IP Pool资源定义
IPPool资源yaml定义

apiVersion: crd.projectcalico.org/v1
kind: IPPool
metadata:  
   name: default-ipv4-ippool
spec:  
   blockSize: 26  
   cidr: 192.168.0.0/16  
   ipipMode: Always  
   natOutgoing: true  
   nodeSelector: all()  
   vxlanMode: Never  
   disabled: false

如果使用calicoctl定义,则将apiVersion更改为apiVersion: projectcalico.org/v3

字段说明

metadata:

在这里插入图片描述
spec:

在这里插入图片描述

要想看每个属性的默认值,就查看集群那个ippool

apiVersion: crd.projectcalico.org/v1
kind: IPPool
metadata:
  annotations:
    projectcalico.org/metadata: '{"uid":"7a74f733-5d33-47f9-8b13-5a379f6e290f","creationTimestamp":"2023-03-08T16:15:22Z"}'
  creationTimestamp: "2023-03-08T16:15:22Z"
  generation: 1
  name: default-ipv4-ippool
  resourceVersion: "737"
  uid: 21d4daf2-82a3-4c06-bbba-ea99c674005a
spec:
  blockSize: 26
  cidr: 192.168.0.0/16
  ipipMode: Always
  natOutgoing: true
  nodeSelector: all()
  vxlanMode: Never

blockSize 业务含义就是 块大小,默认的块大小是 64 。
32位的默认是 26位,32-26=6 位 ,2的6次方就是64,就是块大小

分块的目的是为了分机器node,每个机器node就分配一个块,证明如下:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.2 calico底层网络通信(相同Node和不同Node)

IPv4 26和IPv6 122的默认块大小为64个地址的块。这允许将地址按组分配给在同一主机上运行的工作负载。通过对地址进行分组,主机之间以及与其他BGP对等方之间交换的路由更少。如果主机在一个块中分配所有地址,则将为其分配一个附加块。如果没有更多可用的块,则主机可以从分配给其他主机的块中获取地址。为借用的地址添加了特定的路由,这会影响路由表的大小。

情况一:将 myapp-pod 部署在主机 m 上,查看路由解释全过程(优先匹配长的,而不是匹配在前面的)

步骤1:对于具体IP,子网掩码长度24, 在机器m上,192.168.159.8/24、192.168.159.9/24、192.168.159.10/24、192.168.159.11/24、192.168.159.13/24、192.168.159.21/24、192.168.159.22/24、192.168.159.23/24 ,直接使用 calicoXxx 网卡,0.0.0.0 表示在 m 机器上自行处理
步骤2:当访问 192.168.55.64/26、192.168.159.0/26 的时候,m节点可以直接机器上处理(Gatway列为0.0.0.0),w1节点需要通过 tunl0 网卡跳转到 155 机器(Gateway列指出)
步骤3:当访问 192.168.190.64/26 的时候,w1节点可以直接机器上处理(Gatway列为0.0.0.0),m节点需要通过 tunl0 网卡跳转到 151 机器(Gateway列指出)
步骤4:当访问 192.168.100/24 的时候,两个机器都可以通过自己的 ens33 网卡,本机器 0.0.0.0 上处理 (因为这个 192.168.100/24 是通过 ipaddr+mask 配置指定的)
步骤5:当访问 172.17/16 的时候,两个机器都可以通过自己的 docker0 网卡,本机器 0.0.0.0 上处理
步骤6:当访问 0.0.0.0/0 任意地址 的时候,两个机器都可以通过自己的 ens33 网卡,本机器 0.0.0.0 上处理(因为这是通过 linux gateway 配置指定的)

[root@m ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.100.2   0.0.0.0         UG    100    0        0 ens33
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.55.64   0.0.0.0         255.255.255.192 U     0      0        0 *
192.168.100.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.159.0   0.0.0.0         255.255.255.192 U     0      0        0 *
192.168.159.8   0.0.0.0         255.255.255.255 UH    0      0        0 cali396dfe27aad
192.168.159.9   0.0.0.0         255.255.255.255 UH    0      0        0 calic32badc86da
192.168.159.10  0.0.0.0         255.255.255.255 UH    0      0        0 cali48e10e29d97
192.168.159.11  0.0.0.0         255.255.255.255 UH    0      0        0 cali0054af02df5
192.168.159.13  0.0.0.0         255.255.255.255 UH    0      0        0 cali22552fba529
192.168.159.21  0.0.0.0         255.255.255.255 UH    0      0        0 cali6ab633ce8cf
192.168.159.22  0.0.0.0         255.255.255.255 UH    0      0        0 cali505bb5c3e0a
192.168.159.23  0.0.0.0         255.255.255.255 UH    0      0        0 cali0027cc35f35
192.168.190.64  192.168.100.151 255.255.255.192 UG    0      0        0 tunl0
[root@w1 ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gateway         0.0.0.0         UG    100    0        0 ens33
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

祖母绿宝石

打赏一下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值