您现在的位置是:首页 > 文章详情

Antrea v1.15.0 发布:新增支持 NodeNetworkPolicy,Egress 支持多子网模式

日期:2024-02-14点击:59

Antrea项目是一个基于Open vSwitch(OVS)的开源Kubernetes CNI网络解决方案,旨在为Kubernetes集群提供更高效、更安全的跨平台网络和安全策略。

Antrea 版本 v1.15.0 版本现已发布,此次更新带来了很多强大的功能和改进:

  • 首先,引入了NodeNetworkPolicy功能,允许用户将ClusterNetworkPolicy应用于Kubernetes节点,为Pod和节点之间提供一致的安全特性。
  • 其次,Egress新增支持使用与默认节点子网不同的子网中的IP,特别适用于用户希望使用VLAN将出口流量与集群内流量分开的场景。
  • 第三,Antrea新增CNI迁移工具,简化了从特定的CNI迁移到Antrea的流程,确保用户在其已建立的集群上能够顺畅切换来获得Antrea的丰富功能。
  • 第四,Antrea现在支持第7层网络流导出,为用户提供了针对应用程序流量模式更全面观测能力。
  • 最后,Antrea在多个维度上提高了可用性和兼容性:为Agent和Controller提供了单独的容器镜像,以最小化镜像大小并加快部署新Antrea版本的速度;Flexible IPAM现在支持多播流量; 同时Antrea可以用作Talos集群的CNI;在AKS中也已验证encap模式,欢迎用户在AWS体验尝试。

以下是本版本更新的详细内容:

主要功能

  • Egress功能现在支持使用与默认节点子网不同的子网中的IP。(#5799, @tnqn)

默认情况下,假定从ExternalIPPool分配的IP与节点IP在同一子网中。从Antrea v1.15开始, 可以从与节点IP不同的子网中分配IP。

为此新增了subnetInfo字段,可以在该字段中定义特定ExternalIPPool的子网属性。 注意在使用不同子网时:

  1. 必须设置gateway和prefixLength。当目的地址和Egress IP不在同一子网中时, Antrea将通过指定的网关路由Egress流量,否则直接路由到目的地。
  2. 作为可选项,如果底层网络需要,可以指定vlan字段。 一旦设置该值,Antrea将标记离开Egress节点的Egress流量,添加指定的VLAN ID。相应地, Egress节点收到的目的地址为EgressIP的回复流量也应被标记为指定的VLAN ID。

使用非默认子网的ExternalIPPool的示例如下:

 apiVersion: crd.antrea.io/v1beta1kind: ExternalIPPoolmetadata: name: prod-external-ip-poolspec: ipRanges: - start: 10.10.0.2 end: 10.10.0.10 subnetInfo: gateway: 10.10.0.1 prefixLength: 24 vlan: 10 nodeSelector: matchLabels: network-role: egress-gateway
  • 添加迁移工具,以支持从其他CNI迁移到Antrea。(#5677, @hjiajing)

迁移过程分为三个步骤:

  • 清理旧的CNI。
  • 在集群中安装Antrea。
  • 部署Antrea迁移工具。
 kubectl apply -f https://raw.githubusercontent.com/antrea-io/antrea/main/build/yamls/antrea-migrator.yml

该迁移工具作为DaemonSet在集群中运行,将原地重启集群中所有非hostNetwork的Pod, 并执行必要的网络资源清理。

  • 在Antrea中添加L7网络流量导出支持,可导出具有L7协议信息的网络流量。(#5218, @tushartathgur)

要导出Pod或Namespace的7层流量,用户需要为Pod或Namespace添加Annotation visibility.antrea.io/l7-export, 并将其值设置为流量方向,例如ingress、egress或both。

例如,要在default Namespace中启用ingress方向上的7层流量导出,可以使用:

 kubectl annotate pod test-pod visibility.antrea.io/l7-export=ingress

根据注释,流量导出器将使用字段appProtocolName和httpVals将7层流量数据导出到Flow Aggregator 或配置的IPFIX收集器。

    • appProtocolName字段用于指示应用层协议名称(例如http),如果未导出应用层数据,则为空。

    • httpVals存储了一个序列化的JSON字典,其中每个HTTP请求都映射到唯一的ID。 此格式使我们能够将与同一连接相关的所有HTTP流量分组到相同的导出记录中。

    例如: 

  •  
 "{\"0\":{\"hostname\":\"10.10.0.1\",\"url\":\"/public/\",\"http_user_agent\":\"curl/7.74.0\",\"http_content_type\":\"text/html\",\"http_method\":\"GET\",\"protocol\":\"HTTP/1.1\",\"status\":200,\"length\":153}}"

    目前该特性只支持Linux节点,且只支持HTTP1.1协议流量的导出。 有关此功能的更多信息,请参阅相关文档[5]

  • 新增NodeNetworkPolicy功能,允许用户将ClusterNetworkPolicy应用于Kubernetes节点。(#5658 #5716, @hongliangl @Atish-iaf)

    NodeNetworkPolicy在本次版本更新中作为 Alpha 功能引入。 如下所示,在ConfigMap antrea-config中,必须启用一个名为NodeNetworkPolicy的功能开关。

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
 apiVersion: v1kind: ConfigMapmetadata: name: antrea-config namespace: kube-systemdata: antrea-agent.conf: | featureGates: NodeNetworkPolicy: true

    也可以使用以下helm安装命令来启用功能开关:

  •  
 helm install antrea antrea/antrea --namespace kube-system --set featureGates.NodeNetworkPolicy=true

    NodeNetworkPolicy是Antrea ClusterNetworkPolicy(ACNP)的扩展。通过指定NetworkPolicy spec的appliedTo为nodeSelector字段, 将ACNP应用于nodeSelector所选的Kubernetes节点。

    例如,如下ClusterNetworkPolicy可以控制节点到Pod的流量,在集群中定义该ClusterNetworkPolicy并应用, 标有app=client的Pod发往标有kubernetes.io/hostname: k8s-node-control-plane的节点的入口流量将被阻止:

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
 apiVersion: crd.antrea.io/v1beta1kind: ClusterNetworkPolicymetadata: name: restrict-http-to-nodespec: priority: 5 tier: application appliedTo: - nodeSelector: matchLabels: kubernetes.io/hostname: k8s-node-control-plane ingress: - name: allow-cidr action: Allow from: - ipBlock: cidr: 10.10.0.0/16 ports: - protocol: TCP port: 80 - name: drop-other action: Drop ports: - protocol: TCP port: 80

    也可以控制节点到节点或者IP段的网络流量,以下示例是阻止带有标签kubernetes.io/hostname: k8s-node-control-plane的节点上的流量发往带有标签kubernetes.io/hostname: k8s-node-worker-1和某些IP块的节点:

    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
     apiVersion: crd.antrea.io/v1beta1kind: ClusterNetworkPolicymetadata: name: egress-drop-node-to-nodespec: priority: 5 tier: application appliedTo: - nodeSelector: matchLabels: kubernetes.io/hostname: k8s-node-control-plane egress: - name: drop-22 action: Drop to: - nodeSelector: matchLabels: kubernetes.io/hostname: k8s-node-worker-1 - ipBlock: cidr: 192.168.77.0/24 - ipBlock: cidr: 10.10.0.0/24 ports: - protocol: TCP port: 22

    有关此功能的更多信息,请参阅相关文档[6] 。

  • 为Antrea Multicast功能添加Flexible IPAM支持。(#4922, @ceclinux)

  • 支持Talos集群运行Antrea作为CNI,并将Talos添加到K8s安装程序文档中。(#5718 #5766, @antoninbas)

  • 在NetworkAttachmentDefinition的网络配置不包括IPAM配置时,支持Secondary Network。(#5762, @jianjuns)

  • 添加在AKS中以encap模式安装Antrea的说明。(#5901, @antoninbas)

其他变更

  • 将Secondary NetworkPod控制器更改为订阅CNIServer事件,以支持bridging和VLAN网络。(#5767, @jianjuns)
  • 为Secondary Network支持使用Antrea IPAM。(#5427, @jianjuns)
  • 为antrea-agent和antrea-controller创建不同的镜像,以减小总的镜像大小,加快antrea-agent和antrea-controller的启动速度。(#5856 #5902 #5903, @jainpulkit22)
  • 在使用Wireguard加密模式时不创建隧道接口(antrea-tun0)。(#5885 #5909, @antoninbas)
  • 在Egress IP分配更改时记录事件,以便更好地进行故障诊断。(#5765, @jainpulkit22)
  • 更新Windows文档,完善安装指南和说明。(#5789, @antoninbas)
  • 根据需要自动启用IPv4/IPv6转发,不再需要用户操作或依赖其他组件。(#5833, @tnqn)
  • 在antrea-agent中添加跳过加载内核模块的能力,以支持一些特定的发行版(例如:Talos)。(#5754, @antoninbas)
  • 新增支持在Traceflow观测结果中添加NetworkPolicy规则名称。(#5667, @Atish-iaf)
  • 在"antctl traceflow"工具中使用Traceflow API v1beta1而不是弃用的API版本。(#5689, @Atish-iaf)
  • 在FlowExporter中用netip.Addr替换net.IP,以优化内存使用并提高FlowExporter的性能。(#5532, @antoninbas)
  • 更新antrea-agent-simulator中kubemark的镜像版本,从v1.18.4升级到v1.29.0。(#5820, @luolanzone)
  • 将CNI插件升级到v1.4.0。(#5747 #5813, @antoninbas @luolanzone)
  • 更新Egress功能选项和如何在AWS上使用的文档。(#5436, @tnqn)
  • 在antrea-ipam.md文档中添加Flexible IPAM的详细设计信息。(#5339, @gran-vmv)

问题修复

  • 修复WireGuard加密模式和GRE隧道模式下MTU配置不正确的问题。(#5880 #5926, @hjiajing @tnqn)
  • 在TrafficControl控制器中优先处理L7 NetworkPolicy流,避免Pod同时也被TrafficControl CR影响,从而可能绕过L7引擎的情况。(#5768, @hongliangl)
  • 在释放Pod IP之前删除OVS端口和流规则。(#5788, @tnqn)
  • 将NetworkPolicy存储在文件系统中作为备用数据源,以便让antre-agent在启动时无法连接到antrea-controller时回退到使用文件。(#5739, @tnqn)
  • 确保应用初始NetworkPolicies后才启动Pod网络转发,避免在antrea-agent重新启动时Pod的出入口流量绕过NetworkPolicy。(#5777, @tnqn)
  • [Windows]修复Prepare-AntreaAgent.ps1中为容器化OVS的Clean-AntreaNetwork.ps1调用。(#5859, @antoninbas)
  • [Windows]在Prepare-Node.ps1中添加kubelet启动参数中缺失的空格,修复kubelet不能启动的问题。(#5858, @antoninbas)
  • 修复由缺少参数引起的antctl trace-packet命令调用失败的问题。(#5838, @luolanzone)
  • 当启用Antrea proxyAll模式时,为具有ExternalIPs的Services支持Local ExternalTrafficPolicy。 (#5795, @tnqn)
  • 将net.ipv4.conf.antrea-gw0.arp_announce设置为1,以修复当Node或hostNetwork Pod访问本地Pod并启用AntreaIPAM时的ARP请求泄漏问题。(#5657, @gran-vmv)
  • 跳过对hairpinned Service流量(Pod通过Service访问自身)的入口NetworkPolicies规则的执行。(#5687 #5705, @GraysonWu)
  • 添加host-local IPAM GC,以避免在antrea-agent重新启动时可能的IP泄漏问题。(#5660, @antoninbas)
  • 修复使用基于UBI的镜像时的CrashLookBackOff问题。(#5723, @antoninbas)
  • 删除fillPodInfo/fillServiceInfo中的冗余日志以修复日志泛滥问题,并更新deny连接的DestinationServiceAddress。(#5592 #5704, @yuntanghsu)
  • [Windows]增强在Windows上的HNS网络初始化,以避免一些极端情况下可能出现的问题。(#5841, @XinShuYang)
  • 改善故障排除,优化端点查询规则索引响应。(#5783, @qiyueyao)
  • 优化FQDN控制器的处理逻辑,过滤掉一些不必要的规则处理。(#5893, @Dyanngg)
  • [Windows]更新Windows OVS下载链接,移除无效证书,以防止安装未签名的OVS驱动。(#5839, @XinShuYang)
  • 修复StatefulSets上Antrea FlexibleIPAM的IP注释不起作用的问题。(#5715, @gran-vmv)
  • 在PrepareHNSNetwork中添加DHCP IP重试以修复可能的IP获取失败的问题。(#5819, @XinShuYang)
  • 修改"antctl mc deploy"以支持Antrea多集群部署在manifest更改时的更新。(#5257, @luolanzone)
原文链接:https://www.oschina.net/news/278645
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章