calico IPPOOL
提示:以下配置都要确认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(含)
添加新 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"
禁用旧的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"
删除之前使用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相关推荐
- docker集群运行在calico网络上
2019独角兽企业重金招聘Python工程师标准>>> ##网络及版本信息 docker1 centos7 192.168.75.200 docker2 centos7 192.16 ...
- Kubernetes学习笔记之Calico Startup源码解析
女主宣言 我们目前生产k8s和calico使用ansible二进制部署在私有机房,没有使用官方的calico/node容器部署,并且因为没有使用network policy只部署了confd/bird ...
- 【云原生】Kubernetes(k8s)Calico 客户端工具 calicoctl
文章目录 一.概述 二.calicoctl 安装 三.calicoctl 简单使用 1)认证信息配置 2)查看 IP 资源池 3)配置 IP 池 4)IP 资源池示例演示 5)固定 IP 示例演示 6 ...
- Calico on Kubernetes 从入门到精通
第一部分 How about Calico About Calico Calico为容器和虚拟机工作负载提供一个安全的网络连接. Calico可以创建并管理一个3层平面网络,为每个工作负载分配一个完全 ...
- Kubernetes网络插件flannel和calico
网络插件flannel 跨主机通信的一个解决方案是Flannel,由CoreOS推出,支持3种实现:UDP.VXLAN.host-gw udp模式:使用设备flannel.0进行封包解包,不是内核原生 ...
- k8s中将flannel网络切换calico网络
注意事项: 1.kubelet 配置必须增加 --network-plugin=cni 选项 2.kubec-proxy 组件不能采用 --masquerade-all 启动,因为会与 Calico ...
- Kubernetes(k8s)CNI(Calico)网络模型原理
文章目录 一.概述 二.Calico 架构和核心组件 三.什么是BGP? 三.Calico 两种网络模式 1)IPIP 模式 2)BGP 模式 四.安装Calico插件 1)通过helm安装Calic ...
- CNI 网络分析 4.1 Calico 介绍与原理(一)
文章目录 Calico 介绍与原理(一) 介绍 安装 Calico-node 初始化 Calico-node 服务 Felix confd allocate-tunnel-addrs monitor- ...
- Kubernetes 高性能网络组件 Calico 入门教程
公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 1.Calico概述 Calico 是 Kubernetes 生态系统中另一种流行的网络选择.虽然 Flannel ...
最新文章
- AAAI2020 | SNERL:抛开mention级别的监督,实体链接、关系抽取我都行
- huge page 能给MySQL 带来性能提升吗?
- 最高效的回文数(C语言实现)
- 超级全面的权限系统设计方案
- 现任明教教主CCNP Security SecureV1.0 第一天.2
- 黄聪:HBuilder左侧项目管理器如何不与标签页一起自动切换
- 大数据之Linux早课9.11
- tomcat可以直接起jar吗_天津买房可以直接落户吗
- PPT 2013 提升演讲逼格 视频教程
- JDK正式免费、Log4j2爆核弹级漏洞、LayUI下线,2021的10 件大事
- 编写一个fun函数,该函数地功能是:统计一行字符串中单词的个数,并作为函数值返回。字符串在主函数中输入,规定所有的单词由小写字母组成,单词之间有若干个空格隔开,一行的开始没有空格!
- 使用LODOP设计打印模板
- js在赛码网中的输入/输出问题
- 身高预测和体脂判断,选择结构练习,C语言
- 基于S3C2440的电子鹰眼监控系统设计
- sketch插件开发_适用于Web开发人员的10个免费Sketch插件
- 清理yarn、npm缓存包
- 方舟怎么查看服务器信息,方舟怎么查看登录过的服务器 | 手游网游页游攻略大全...
- sublime插件崩溃
- 0基础极速入门!深度学习高层API最强官方课程
热门文章
- AI 绘画(2):Ai模型训练,Embedding模型,实现“人物模型“自由
- 全球手机芯片产业格局
- setTimeout()方法总结
- vue3的新特性custom renderer
- getBoundingClientRect offsetWidth offsetHeight
- 详解Unity中的预制体
- 华为ER3208G3 端口映射
- java实现种子填充算法,Java编写图形学的种子填充算法
- 物流知识:世界物流企业50强
- 小学生英汉互译c语言编程,用C语言编辑的简单的英汉互译词典