提示:以下配置都要确认calico的类型是“calico-ipam”

cat /etc/cni/net.d/10-calico.conflist"ipam": {"type": "calico-ipam"}, 

一、IPPool配置

全局配置不区分某一个namespace

apiVersion: projectcalico.org/v3
kind: IPPool
metadata:                                                                                                                                                                      name: zone-west-ippool2
spec:                                                                                                                                                                          cidr: 172.122.2.0/24             #填写创建集群时规划的cidr地址段                                                                                                                                                 ipipMode: Never                  #不使用IPIP模式相反为Always时代表使用IPIP模式                                                                                                                                           natOutgoing: true                #nat转发                                                                                                                                          nodeSelector: all()                                                                                                                                               allowedUses:                                                                                                                                                                - Workload                                                                                                                                                                  - Tunnel                                                                                                                                                                    blockSize: 26                                                                                                                                                                vxlanMode: CrossSubnet           #vxlanMode可以为Always或者是CrossSubnet当为CrossSubnet时calico可以智能的判断calico节点是否在一个二层网络如果在使用BGP,如果需要依赖三层网络则使用VXlan模式

二、根据拓扑分配不同段的IP地址

如果您在不同的区域、专区或机架中有工作负载,您可能希望它们从同一个 IP 池中获取 IP 地址。此策略可用于减少网络中所需的路由数量,或满足外部防火墙设备或策略强加的要求。Calico 使用带有节点标签和节点选择器的 IP 池资源可以轻松完成此操作。

在下面的示例中,我们创建了两个 IP 池,它只为标签为zone=west和zone=west2的节点分配 IP 地址

kind: IPPool
metadata:                                                                                                                                                                     name: zone-west-ippool1
spec:                                                                                                                                                                         cidr: 172.122.1.0/24                                                                                                                                                       ipipMode: Always                                                                                                                                                           natOutgoing: true                                                                                                                                                          nodeSelector: zone == "west"                                                                                                                                               ---                                                                                                                                                                           apiVersion: projectcalico.org/v3
kind: IPPool
metadata:                                                                                                                                                                     name: zone-west-ippool2
spec:                                                                                                                                                                         cidr: 172.122.2.0/24                                                                                                                                                       ipipMode: Always                                                                                                                                                           natOutgoing: true                                                                                                                                                          nodeSelector: zone == "west2"然后,我们用 zone=west 标记一个节点。例如:
kubectl label nodes node1 zone=west
kubectl label nodes node2 zone=west2
kubectl  label  node master1 zone=west
kubectl  label  node master2 zone=west2
kubectl  label  node master3 zone=west2[root@master1 install]# calicoctl get IPPOOL -o wide
NAME                CIDR             NAT    IPIPMODE   VXLANMODE   DISABLED   DISABLEBGPEXPORT   SELECTOR
zone-west-ippool1   172.122.1.0/24   true   Always     Never       false      false              zone == "west"
zone-west-ippool2   172.122.2.0/24   true   Always     Never       false      false              zone == "west2"可以看到我们为节点配置好不同的标签后,会根据标签的值来匹配到对应的IPPOOL,然后为POD分配对应网段的IP
[root@master1 install]# kubectl  get pod -o wide
NAME                     READY   STATUS    RESTARTS   AGE   IP              NODE      NOMINATED NODE   READINESS GATES
nginx-569bf69fb7-5669s   1/1     Running   0          12m   172.122.1.129   node1
nginx-569bf69fb7-8fjbm   1/1     Running   0          12m   172.122.1.64    master1
nginx-569bf69fb7-9jl5c   1/1     Running   0          12m   172.122.2.66    master3
nginx-569bf69fb7-dlmm9   1/1     Running   0          12m   172.122.2.2     node2
nginx-569bf69fb7-hlcl8   1/1     Running   0          12m   172.122.1.65    master1
nginx-569bf69fb7-hzzd8   1/1     Running   0          12m   172.122.2.128   master2
nginx-569bf69fb7-jxg2c   1/1     Running   0          12m   172.122.1.130   node1
nginx-569bf69fb7-k22x8   1/1     Running   0          12m   172.122.2.129   master2
nginx-569bf69fb7-vrppw   1/1     Running   0          12m   172.122.2.64    master3
nginx-569bf69fb7-zkmrn   1/1     Running   0          12m   172.122.2.65    master3

注意:如果节点没有这些标签的话,pod调度到这台机器上就会创建失败,如下图

三、Pod IP 从Pool迁移到另一个Pool

IP 池和集群 CIDR

Calico 支持在集群中使用多个不相交的 IP 池 CIDR。但是,Kubernetes 期望所有 pod 的地址都在同一个集群 CIDR 中。这意味着虽然在集群 CIDR 之外创建 IP 池在技术上是可行的,但我们不建议这样做。在 Kubernetes 集群 CIDR 之外分配地址的 Pod 将失去网络连接。

  • IPv4:20-32(含)
  • IPv6:116-128(含)
  1. 添加新 IP 池

    我们添加了一个新的IPPool,其 CIDR 范围为10.0.0.0/16

    kind: IPPool
    metadata:                                                                                                                                                                      name: new-pool
    spec:                                                                                                                                                                          cidr: 10.0.0.0/16                                                                                                                                                            ipipMode: Always                                                                                                                                                             natOutgoing: true [root@master1 install]# kubectl apply -f new-ippool.yaml
    [root@master1 install]# calicoctl get ippool -o wide
    NAME                CIDR             NAT    IPIPMODE   VXLANMODE     DISABLED   DISABLEBGPEXPORT   SELECTOR
    new-pool            10.0.0.0/16      true   Always     Never         false       false              all()
    zone-west-ippool1   172.122.1.0/24   true   Never      CrossSubnet   false      false              zone == "west"
    zone-west-ippool2   172.122.2.0/24   true   Never      CrossSubnet   false      false              zone == "west2" 
  2. 禁用旧的IP池

    [root@master1 install]# kubectl  edit  IPPOOL zone-west-ippool1
    在spec下修改或增加以下配置,之后wq保存退出
    disabled: true
    查看zone-west-ippool1 DISABLED已经变为了true
    [root@master1 install]# calicoctl get ippool -o wide
    NAME                CIDR             NAT    IPIPMODE   VXLANMODE     DISABLED   DISABLEBGPEXPORT   SELECTOR
    new-pool            10.0.0.0/16      true   Always     Never         false      false              all()
    zone-west-ippool1   172.122.1.0/24   true   Never      CrossSubnet   true       false              zone == "west"
    zone-west-ippool2   172.122.2.0/24   true   Never      CrossSubnet   false      false              zone == "west2"  
  3. 删除之前使用172.122.1.0/24 网段的pod

    [root@master1 install]# kubectl  get pod -o wide | grep 172.122.1 | awk '{print $1}' | xargs  kubectl  delete  pod
    pod "nginx-569bf69fb7-5669s" deleted
    pod "nginx-569bf69fb7-8fjbm" deleted
    pod "nginx-569bf69fb7-hlcl8" deleted
    pod "nginx-569bf69fb7-jxg2c" deleted 查看更新的pod及IP网段,可以看到已经从172.122.1.0 变为了10.0网段
    [root@master1 install]# kubectl  get pod -o wide
    NAME                     READY   STATUS    RESTARTS   AGE    IP              NODE      NOMINATED NODE   READINESS GATES
    nginx-569bf69fb7-2js4g   1/1     Running   0          17s    10.0.137.130    master1
    nginx-569bf69fb7-5z2w2   1/1     Running   0          16s    10.0.180.1      master2
    nginx-569bf69fb7-9jl5c   1/1     Running   0          112m   172.122.2.66    master3
    nginx-569bf69fb7-dlmm9   1/1     Running   0          112m   172.122.2.2     node2
    nginx-569bf69fb7-jbs2v   1/1     Running   0          16s    10.0.166.129    node1
    nginx-569bf69fb7-jvwtl   1/1     Running   0          17m    172.122.2.131   master2
    nginx-569bf69fb7-k46hr   1/1     Running   0          17m    172.122.2.132   master2
    nginx-569bf69fb7-qp9ht   1/1     Running   0          16s    10.0.137.131    master1
    nginx-569bf69fb7-vrppw   1/1     Running   0          112m   172.122.2.64    master3
    nginx-569bf69fb7-zkmrn   1/1     Running   0          112m   172.122.2.65    master3                

四、更改IP池块blockSize

默认情况下,Calico 使用 64 个地址的 IPAM 块大小 - /26 用于 IPv4,/122 用于 IPv6。但是,可以根据 IP 池地址系列更改块大小。

  • IPv4:20-32(含)
  • IPv6:116-128(含)

在安装清单中,每个协议只能有一个默认 IP 池。在此示例中,有一个用于 IPv4 (/26) 的 IP 池和一个用于 IPv6 (/122) 的 IP 池.

apiVersion: operator.tigera.io/v1
kind: Installation
metadata:name: defaultpec:# Configures Calico networking.calicoNetwork:# Note: The ipPools section cannot be modified post-install.ipPools:- blockSize: 26cidr: 10.48.0.0/21encapsulation: IPIPnatOutgoing: EnablednodeSelector: all()- blockSize: 122cidr: 2001::00/64 encapsulation: None natOutgoing: Enabled nodeSelector: all()

扩大或缩小 IP 池块大小

默认情况下,IP 池的 Calico IPAM 块大小为 /26。要从默认大小 /26 扩展,请降低blockSize(例如,/24)。要从默认 /26 缩大blockSize,请提高数字(例如,/28)

注意:扩容BlockSize时需要将集群内所有原网段以分配的pod杀死,使用临时的IPPOOL的IP。生产环境一定要三思而后行。

1. 创建临时 IP 池

我们添加了一个 CIDR 范围为 10.0.0.0/16 的新 IPPool。

创建一个temporary-pool.yaml

apiVersion: projectcalico.org/v3
kind: IPPool
metadata:name: temporary-pool
spec:cidr: 10.0.0.0/16ipipMode: AlwaysnatOutgoing: true[root@master1 ~]# calicoctl get ippool -o wide
NAME                  CIDR             NAT    IPIPMODE   DISABLED
default-ipv4-ippool   172.112.0.0/16   true   Always     false
temporary-pool        10.0.0.0/16      true   Always     false禁用现有 IP 池
[root@master1 ~]# calicoctl patch ippool default-ipv4-ippool -p '{"spec": {"disabled": true}}'
[root@master1 ~]# calicoctl get ippool -o wide
NAME                  CIDR             NAT    IPIPMODE   DISABLED
default-ipv4-ippool   192.168.0.0/16   true   Always     true
temporary-pool        10.0.0.0/16      true   Always     false
注意:扩容BlockSize时需要将集群内所有原网段以分配的pod杀死,使用临时的IPPOOL的IP。生产环境一定要三思而后行
只需一个命令即可重新启动所有 pod。
[root@master1 ~]# $kubectl delete pod -A --all    三思而行现在您已验证 pod 正在从新范围获取 IP,您可以安全地删除现有池。
[root@master1 ~]# calicoctl delete ippool default-ipv4-ippool

2. 创建具有所需块大小的新 IP 池

在这一步中,我们使用 (/28) 的新块大小更新 IPPool。

apiVersion: projectcalico.org/v3
kind: IPPool
metadata:                                                                                                                                                                      name: default-ipv4-ippool
spec:                                                                                                                                                                          blockSize: 28                                                                                                                                                                cidr: 172.122.0.0/16                                                                                                                                                         ipipMode: Always                                                                                                                                                             natOutgoing: true
calicoctl apply -f pool.yaml
禁用临时 IP 池
[root@master1 ~]# calicoctl patch ippool temporary-pool -p '{"spec": {"disabled": true}}'
[root@master1 ~]# $kubectl delete pod -A --all    三思而行
通过运行以下命令验证您的 pod 和块大小是否正确:
[root@master1 ~]# kubectl get pods --all-namespaces -o wide
[root@master1 ~]# calicoctl ipam show --show-blocks
+----------+--------------------+-----------+------------+--------------+
| GROUPING |        CIDR        | IPS TOTAL | IPS IN USE |   IPS FREE   |
+----------+--------------------+-----------+------------+--------------+
| IP Pool  | 172.122.0.0/16     |     65536 | 33 (0%)    | 65503 (100%) |
| Block    | 172.122.101.80/28  |        16 | 16 (100%)  | 0 (0%)       |
| Block    | 172.122.101.96/28  |        16 | 4 (25%)    | 12 (75%)     |
| Block    | 172.122.180.112/28 |        16 | 3 (19%)    | 13 (81%)     |
| Block    | 172.122.74.16/28   |        16 | 2 (12%)    | 14 (88%)     |
| Block    | 172.122.75.96/28   |        16 | 5 (31%)    | 11 (69%)     |
| Block    | 172.122.90.32/28   |        16 | 3 (19%)    | 13 (81%)     |
+----------+--------------------+-----------+------------+--------------+
删除临时 IP 池
[root@master1 ~]# calicoctl delete pool temporary-pool[root@master1 install]# calicoctl get IPPOOL  -o wide
NAME                  CIDR             NAT    IPIPMODE   VXLANMODE   DISABLED   DISABLEBGPEXPORT   SELECTOR
default-ipv4-ippool   172.122.0.0/16   true   Always     Never       false      false              all()   

calico IPPOOL相关推荐

  1. docker集群运行在calico网络上

    2019独角兽企业重金招聘Python工程师标准>>> ##网络及版本信息 docker1 centos7 192.168.75.200 docker2 centos7 192.16 ...

  2. Kubernetes学习笔记之Calico Startup源码解析

    女主宣言 我们目前生产k8s和calico使用ansible二进制部署在私有机房,没有使用官方的calico/node容器部署,并且因为没有使用network policy只部署了confd/bird ...

  3. 【云原生】Kubernetes(k8s)Calico 客户端工具 calicoctl

    文章目录 一.概述 二.calicoctl 安装 三.calicoctl 简单使用 1)认证信息配置 2)查看 IP 资源池 3)配置 IP 池 4)IP 资源池示例演示 5)固定 IP 示例演示 6 ...

  4. Calico on Kubernetes 从入门到精通

    第一部分 How about Calico About Calico Calico为容器和虚拟机工作负载提供一个安全的网络连接. Calico可以创建并管理一个3层平面网络,为每个工作负载分配一个完全 ...

  5. Kubernetes网络插件flannel和calico

    网络插件flannel 跨主机通信的一个解决方案是Flannel,由CoreOS推出,支持3种实现:UDP.VXLAN.host-gw udp模式:使用设备flannel.0进行封包解包,不是内核原生 ...

  6. k8s中将flannel网络切换calico网络

    注意事项: 1.kubelet 配置必须增加 --network-plugin=cni 选项 2.kubec-proxy 组件不能采用 --masquerade-all 启动,因为会与 Calico ...

  7. Kubernetes(k8s)CNI(Calico)网络模型原理

    文章目录 一.概述 二.Calico 架构和核心组件 三.什么是BGP? 三.Calico 两种网络模式 1)IPIP 模式 2)BGP 模式 四.安装Calico插件 1)通过helm安装Calic ...

  8. CNI 网络分析 4.1 Calico 介绍与原理(一)

    文章目录 Calico 介绍与原理(一) 介绍 安装 Calico-node 初始化 Calico-node 服务 Felix confd allocate-tunnel-addrs monitor- ...

  9. Kubernetes 高性能网络组件 Calico 入门教程

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 1.Calico概述 Calico 是 Kubernetes 生态系统中另一种流行的网络选择.虽然 Flannel ...

最新文章

  1. AAAI2020 | SNERL:抛开mention级别的监督,实体链接、关系抽取我都行
  2. huge page 能给MySQL 带来性能提升吗?
  3. 最高效的回文数(C语言实现)
  4. 超级全面的权限系统设计方案
  5. 现任明教教主CCNP Security SecureV1.0 第一天.2
  6. 黄聪:HBuilder左侧项目管理器如何不与标签页一起自动切换
  7. 大数据之Linux早课9.11
  8. tomcat可以直接起jar吗_天津买房可以直接落户吗
  9. PPT 2013 提升演讲逼格 视频教程
  10. JDK正式免费、Log4j2爆核弹级漏洞、LayUI下线,2021的10 件大事
  11. 编写一个fun函数,该函数地功能是:统计一行字符串中单词的个数,并作为函数值返回。字符串在主函数中输入,规定所有的单词由小写字母组成,单词之间有若干个空格隔开,一行的开始没有空格!
  12. 使用LODOP设计打印模板
  13. js在赛码网中的输入/输出问题
  14. 身高预测和体脂判断,选择结构练习,C语言
  15. 基于S3C2440的电子鹰眼监控系统设计
  16. sketch插件开发_适用于Web开发人员的10个免费Sketch插件
  17. 清理yarn、npm缓存包
  18. 方舟怎么查看服务器信息,方舟怎么查看登录过的服务器 | 手游网游页游攻略大全...
  19. sublime插件崩溃
  20. 0基础极速入门!深度学习高层API最强官方课程

热门文章

  1. AI 绘画(2):Ai模型训练,Embedding模型,实现“人物模型“自由
  2. 全球手机芯片产业格局
  3. setTimeout()方法总结
  4. vue3的新特性custom renderer
  5. getBoundingClientRect offsetWidth offsetHeight
  6. 详解Unity中的预制体
  7. 华为ER3208G3 端口映射
  8. java实现种子填充算法,Java编写图形学的种子填充算法
  9. 物流知识:世界物流企业50强
  10. 小学生英汉互译c语言编程,用C语言编辑的简单的英汉互译词典