Calico网络组件本地部署支持IPv6(Kubernetes)

news2025/2/19 7:28:02

知其然

问题背景

因项目现场的网络正逐步从IPv4向IPv6迁移,这几年现场服务器基本上都配置了双栈;但随着IPv6铺开,出现了很多纯IPv6的服务器,并且要求通信优先使用IPv6。

在项目建设之初,其实就考虑了上述情况,所以在部署Kubernetes集群的时候,就将集群配置为了支持IPv4和IPv6双栈。正因如此,前几天用户要求完全切换到IPv6,Pod内部服务连接外网IPv6的时候,发现竟然无法连通。

问题定位

1、问题表现:(1)IPv4在本地局域网(单个L2网络)和跨网均正常;(2)IPv6在本地局域网(单个L2网络)正常和跨网通信异常;

2、开始以为是现场IPv6网络策略导致的不通,用户协助定位发现,目标主机抓包报文(来自Pod内服务请求)头部中的源IP地址竟然是Pod内的虚拟IPv6,并未进行NAT转换。

3、那么,显然就是Kubernetes集群使用的网络组件的问题了;我们使用的是Calico,查看了Calico的启动配置YAML文件(超级多内容)一时也未发现问题在哪。但是,想来应该跟overlay网络配置有关系。

4、既然无法在已有配置中直接发现问题,那么,不如直接在网上直接搜索:Calico IPv6支持。没准能发现蛛丝马迹。最后证明这个思路是对的。

问题解决和验证

上面查找到的蛛丝马迹就是:CALICO_IPV6POOL_VXLAN、CALICO_IPV6POOL_NAT_OUTGOING;

1、查看Calico IP池的信息

~]# kubectl get ippools
NAME                  AGE
default-ipv4-ippool   15h
default-ipv6-ippool   15h

2、查看跟IPv6相关的地址池配置信息

~]# kubectl get ippools default-ipv6-ippool -o yaml 
apiVersion: crd.projectcalico.org/v1
kind: IPPool
metadata:
……
spec:
  allowedUses:
  - Workload
  - Tunnel
  blockSize: 122
  cidr: fa00:cafe:42::/56
  ipipMode: Never
  nodeSelector: all()
  vxlanMode: Never

ipipMode和vxlanMode均为Never,并且也没有natOutgoing(默认为false)相关配置。

3、如下图修改Calico启动配置文件,增加红色部分配置(通过命令kubectl edit ds -n kube-system calico-node,在线编辑增加配置,calico-node重启后并没有生效,ippools中的vxlanMode仍然为Never,也无natOutgoing)

4、重新部署Calico

kubectl delete  -f calico.yaml

kubectl apply -f calico.yaml

5、验证是否生效

~]# kubectl get ippools default-ipv6-ippool -o yaml 
apiVersion: crd.projectcalico.org/v1
kind: IPPool
metadata:
……
spec:
……
  natOutgoing: true
  vxlanMode: CrossSubnet

~]# ip6tables-save -t nat|grep -i cali
:cali-PREROUTING - [0:0]
:cali-fip-dnat - [0:0]
:cali-POSTROUTING - [0:0]
:cali-fip-snat - [0:0]
:cali-nat-outgoing - [0:0]
:cali-OUTPUT - [0:0]
-A PREROUTING -m comment --comment "cali:6gwbT8clXdHdC1b1" -j cali-PREROUTING
-A POSTROUTING -m comment --comment "cali:O3lYWMrLQYEMJtB5" -j cali-POSTROUTING
-A OUTPUT -m comment --comment "cali:tVnHkvAo15HuiPy0" -j cali-OUTPUT
-A cali-PREROUTING -m comment --comment "cali:r6XmIziWUJsdOK6Z" -j cali-fip-dnat
-A cali-POSTROUTING -m comment --comment "cali:Z-c7XtVd2Bq7s_hA" -j cali-fip-snat
-A cali-POSTROUTING -m comment --comment "cali:nYKhEzDlr11Jccal" -j cali-nat-outgoing
-A cali-POSTROUTING -o vxlan-v6.calico -m comment --comment "cali:MtS-9OgAQy-fAM-w" -m addrtype ! --src-type LOCAL --limit-iface-out -m addrtype --src-type LOCAL -j MASQUERADE --random-fully
-A cali-nat-outgoing -m comment --comment "cali:Ir_z2t1P6-CxTDof" -m set --match-set cali60masq-ipam-pools src -m set ! --match-set cali60all-ipam-pools dst -j MASQUERADE --random-fully
-A cali-OUTPUT -m comment --comment "cali:GBTAv2p5CwevEyJm" -j cali-fip-dnat

6、进入到Pod内部测试,问题解决。

知其所以然

Calico 3.x版本常用命令

  1. kubectl get networkpolicies:列出所有的网络策略。
  2. kubectl get ipamblocks:列出所有的IP地址块。
  3. kubectl get ipamhandles:列出所有的IP地址分配。
  4. kubectl get felixconfigurations:列出所有的Felix配置。
  5. kubectl get ippools:列出所有的IP地址池配置。
  6. kubectl -n kube-system logs -l k8s-app=calico-node:Calico 日志查看
  7. kubectl delete pod -n kube-system -l k8s-app=calico-node:重启 Calico Felix 容器以应用更改
  8. kubectl get pods -n kube-system -l k8s-app=calico-node -o wide:查看已经安装并启用了 Calico
  9. kubectl get configmap calico-config -n kube-system -o yaml:获取Calico配置的ConfigMap配置
  10. kubectl describe configmap calico-config -n kube-system:获取 calico-config ConfigMap 的详细信息
  11. kubectl get felixconfiguration default -n kube-system -o yaml:获取 Calico 的默认配置信息

Calico 网络组件介绍

Calico 是一个开源的网络和网络安全解决方案,专为容器、虚拟机和裸机工作负载设计。它使用 BGP(边界网关协议)来路由流量,支持多种网络模式,包括纯三层模式和覆盖网络模式。

Calico 的主要组件包括:

  • calico-node:运行在每个节点上,负责设置路由、管理 IP 地址,并通过 Felix 实现网络策略的执行。

  • BGP Daemon (Bird):负责节点之间的路由传播,以实现不同节点 Pod 之间的流量路由。

  • Felix:作为 Calico 的主代理,负责监控 etcd 中存储的网络策略并将其应用于节点的网络接口,同时负责设置 IP 路由、管理 ACLs 以确保流量符合策略。

  • Typha:当节点数较多时,可以通过 Typha 组件来减少 etcd 的访问负载。它会将 etcd 中的策略变化缓存起来,并同步给每个节点的 Felix 代理。

  • etcd:Calico 使用 etcd 作为存储后端,用于存储网络策略、IP 池等配置。也可以使用 Kubernetes 的 API Server 作为存储后端,便于集成。

Calico的backend类型

calico_backend:Calico的后端,默认为bird。

kubectl get configmap calico-config -n kube-system -o yaml
apiVersion: v1
data:
  calico_backend: bird
  cni_network_config: |-
    {

……

类型说明
birdBIRD是一种路由守护进程,Calico使用BIRD来实现路由功能。BIRD支持多种路由协议,包括BGP,可以用于在Calico节点之间分发路由信息。
vxlanVXLAN(Virtual Extensible LAN)是一种网络虚拟化技术,用于在不同子网之间封装数据包。Calico支持VXLAN封装方式,适用于云环境受限场景。ipip模式转vxlan:将calico_backend参数由bird设置为vxlan,因为vxlan部署不使用bgp。
ipipIP-in-IP是一种封装协议,用于在不同子网之间封装数据包。Calico支持IP-in-IP封装方式,适用于跨子网的场景。

Calico doesn't support tunneling for the IPv6, so "vxlan" and "ipip" backend wouldn't work.  If you need to have cross-pod connectivity, you need to use "bird" as a backend mode.  In any other mode the pods would be able to reach only pods on the same node.

Calico不支持IPv6隧道,所以“vxlan”和“ipip”后端不能工作。如果您需要跨pod连接,则需要使用“bird”作为后端模式。在任何其他模式下,pod都只能到达同一节点上的pod。

                                                ----引用自《IPv4/IPv6 Dual-Stack Networking - Documentation》

根据 Calico 的官方文档,Calico 的 IPIP 模式目前只支持 IPv4,不支持 IPv6。如果你的环境需要 IPv6 的隧道封装,建议使用 Calico 提供的 VXLAN 模式。

                                                ----来自于ChatGPT的回答

BGP

BGP(边界网关协议)是用于跨网络共享路由的基于标准的网络协议。它是互联网的基本组成部分之一,具有出色的扩展特性。

Calico内置了对BGP的支持。在本地部署中,这使Calico可以与物理网络(通常连接到Top或Rack路由器)建立对等关系以交换路由,从而形成一个none-overlay网络,其中Pod IP地址可以在更广泛的网络中路由,就像附加的任何其他工作负载一样到网络。

Overlay网络模式

Calico可以提供VXLAN或IP-in-IP网络,包括cross-subnet模式。

Non-overlay网络模式

Calico可以提供在任何基础L2网络之上运行的non-overlay网络,或者是具有适当的云提供商集成的公共云网络或支持BGP的L3网络(通常是具有标准Top-of-Rack路由器)。

Calico本地部署

Calico本地部署最常见的网络设置是non-overlay模式,该模式使用BGP与物理网络(通常是机架路由器的顶部)对等,以使Pod IP可在集群外部路由。(当然,可以根据需要配置其余的本地部署网络,以限制群集外的Pod IP路由的范围。)此设置提供了丰富的Calico高级功能,包括公告Kubernetes serviceIP的能力(cluster IPs or external IPs),以及在Pod,名称空间或节点级别控制IP地址管理的能力,以支持与现有企业网络和安全要求集成的各种可能性。

注:在这种模式下,物理路由器需要进行相应的配置,以便与 Calico 节点建立 BGP 对等关系。具体来说,物理路由器需要配置 BGP 对等体,指向 Calico 节点的 IP 地址,并设置相应的自治系统号(AS 号)。这样,物理路由器就可以接收来自 Calico 节点的 BGP 路由信息,并将这些路由信息传播到整个物理网络中

PolicyIPAMCNIOverlayRouting
CalicoCalicoCalicoNoBGP

如果不能将BGP对等连接到物理网络,并且群集在单个L2网络中,则还可以运行non-overlay模式,而Calico只能在群集中的节点之间对等BGP。即使这不是严格的overlay网络,也无法在集群外部路由Pod IP,因为基础网络没有Pod IP的路由。

PolicyIPAMCNIOverlayRouting
CalicoCalicoCalicoNoBGP

或者,可以在VXLAN或IP-in-IP模式下运行Calico,并使用cross-subnet模式来优化每个L2子网内的性能。

推荐方案:

PolicyIPAMCNIOverlayRouting
CalicoCalicoCalicoVXLANCalico

替代方案:

PolicyIPAMCNIOverlayRouting
CalicoCalicoCalicoIPIPBGP

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2299055.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【广州大学主办,发表有保障 | IEEE出版,稳定EI检索,往届见刊后快至1个月检索】第二届电气技术与自动化工程国际学术会议 (ETAE 2025)

第二届电气技术与自动化工程国际学术会议 (ETAE 2025) The 2nd International Conference on Electrical Technology and Automation Engineering 大会官网:http://www.icetae.com/【更多详情】 会议时间:2025年4月25-27日 会议地点&#xff1a…

Python项目31:待办事项列表应用1.0(命令行界面+Json+类+初学者必做)

------------★Python练手项目源码★------------ Python项目27:用Tkinter写日志管理系统(中下等难度) Python项目26:设计学生成绩管理系统(简易版) Python项目25:带滚动效果的商场抽奖系统&…

Redis 01 02章——入门概述与安装配置

一、入门概述 (1)是什么 Redis:REmote Dictionary Server(远程字典服务器)官网解释:Remote Dictionary Server(远程字典服务)是完全开源的,使用ANSIC语言编写遵守BSD协议,是一个高…

Large Language Model Distilling Medication Recommendation Model

摘要:药物推荐是智能医疗系统的一个重要方面,因为它涉及根据患者的特定健康需求开具最合适的药物。不幸的是,目前使用的许多复杂模型往往忽视医疗数据的细微语义,而仅仅严重依赖于标识信息。此外,这些模型在处理首次就…

2025最新版Node.js下载安装~保姆级教程

1. node中文官网地址:http://nodejs.cn/download/ 2.打开node官网下载压缩包: 根据操作系统不同选择不同版本(win7系统建议安装v12.x) 我这里选择最新版win 64位 3.安装node ①点击对话框中的“Next”,勾选同意后点…

springboot如何将lib和jar分离

遇到一个问题&#xff0c;就是每次maven package或者maven install后target中的jar很大&#xff0c;少的50几MB&#xff0c;大的100多兆 优化前&#xff1a; 优化后&#xff1a; 优化前 优化后压缩率77.2MB4.65MB93% 具体方案&#xff1a; pom.xml中 <build><…

RocketMQ和Kafka如何实现顺序写入和顺序消费?

0 前言 先说明kafka&#xff0c;顺序写入和消费是Kafka的重要特性&#xff0c;但需要正确的配置和使用方式才能保证。本文需要解释清楚Kafka如何通过分区来实现顺序性&#xff0c;以及生产者和消费者应该如何配合。   首先&#xff0c;顺序写入。Kafka的消息是按分区追加写入…

Node.js技术原理分析系列——Node.js调试能力分析

本文由体验技术团队屈金雄原创。 Node.js 是一个开源的、跨平台的 JavaScript 运行时环境&#xff0c;它允许开发者在服务器端运行 JavaScript 代码。Node.js 是基于 Chrome V8引擎构建的&#xff0c;专为高性能、高并发的网络应用而设计&#xff0c;广泛应用于构建服务器端应…

从技术债务到架构升级,滴滴国际化外卖的变革

背 景 商家营销简述 在外卖平台的运营中&#xff0c;我们致力于通过灵活的补贴策略激励商家&#xff0c;与商家共同打造良好的合作关系&#xff0c;也会提供多样化的营销活动&#xff0c;帮助商家吸引更多用户下单。通过这些活动&#xff0c;不仅能够提高商家的销量&#xff0c…

SQL Query美化

推荐一个可以美化Query的网站&#xff01; 名称&#xff1a;SQL formatter | Online free SQL Beautifier 地址&#xff1a;https://sqlformatter.org/# 在处理 SQL 查询语句时&#xff0c;可读性是至关重要的。 杂乱无章的 SQL代码不仅难以理解&#xff0c;还会给后续的维…

2025 docker可视化管理面板DPanel的安装

1.什么是 DPanel &#xff1f; DPanel 是一款 Docker 可视化管理面板&#xff0c;旨在简化 Docker 容器、镜像和文件的管理。它提供了一系列功能&#xff0c;使用户能够更轻松地管理和部署 Docker 环境。 软件特点&#xff1a; 可视化管理&#xff1a;提供直观的用户界面&#…

mapbox V3 新特性,添加下雪效果

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;mapbox 从入门到精通 文章目录 一、&#x1f340;前言1.1 ☘️mapboxgl.Map 地图对象…

【STM32】H743的以太网MAC控制器的一个特殊功能

调试743的MAC&#xff0c;翻阅手册的时候&#xff0c;发现了一个有意思的功能 混杂模式 H743的MAC控制器&#xff0c;可以设置为混杂模式&#xff0c;这就意味着它可以做一些网络监控的应用&#xff0c;譬如连接具备端口镜像功能的交换机&#xff0c;然后直接代替PC实现网络数据…

WEB攻防-第60天:PHP反序列化POP链构造魔术方法流程漏洞触发条件属性修改

目录 一、序列化与反序列化基础 1.1 什么是序列化与反序列化 二、魔术方法的生命周期 2.1 常见的魔术方法 2.2 模式方法的生命周期触发调用 2.2.1 __construct() 2.2.2 __destruct() 2.2.3 __sleep() 2.2.4 __wakeup() 2.2.5 __invoke() 2.2.6 __toS…

二、交换机的vlan子设备接入

一、交换机的vlan设置-CSDN博客 二、交换机的vlan子设备接入-CSDN博客 接上篇的文章&#xff0c;本文接入了子设备 网络结构如下&#xff1a; 用路由器A和POE交换机B代替第一篇中的笔记本电脑&#xff0c;路由器A和交换机B都关闭DHCP服务&#xff0c;并分别接入一个IPC&#…

Spring IoC的实现机制是什么?

大家好&#xff0c;我是锋哥。今天分享关于【Spring IoC的实现机制是什么&#xff1f;】面试题。希望对大家有帮助&#xff1b; Spring IoC的实现机制是什么&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring IoC&#xff08;Inversion of Control…

配置mysql8.0使用PXC实现高可用。

准备好下面三台服务器 cat >> /etc/hosts << EOF 192.168.1.11 pxc1 192.168.1.12 pxc2 192.168.1.13 pxc3 EOF 三台服务器同时进行&#xff0c;下载安装包 [rootlocalhost ~]#yum module disable mysql [rootlocalhost ~]#yum ins…

对openharmony HDF驱动框架的C/S设计模式和单例类的说明

在分析openharmony的HDF驱动框架时我们会发现用了很多面向对象的思想&#xff0c;例如类继承、接口、单例类等&#xff0c;本来应该是好事情&#xff0c;**但使用时对象之间的关系交错复杂&#xff0c;不太符合linux内核分层分模块的思路&#xff0c;导致整体理解起来比较困难&…

vue学习10

1.GPT和Copilot Copilot Tab接受 删除键&#xff0c;不接受 ctrlenter更多方案 更适合的是修改方向 const submitForm async () > {//等待校验结果await formRef.value.validate()//提交修改await userUpdateInfoService(form.value)//通知user模块&#xff0c;进行数据更…

如何正确安装Stable Diffusion Web UI以及对应的xFormers

本文是我总结的步骤&#xff0c;验证了几次保证是对的。因为正确的安装 Stable Diffusion Web UI 以及对应的 xFormers 实在是太麻烦了&#xff0c;官方和网上的步骤都是残缺和分散的&#xff0c;加上国内网络速度不理想&#xff0c;所以需要一些额外步骤&#xff0c;之前研究出…