首页 > 其他分享 >网络隔离的最小配置

网络隔离的最小配置

时间:2024-04-25 10:12:43浏览次数:29  
标签:隔离 IP 网络 最小 访问 白名单 pod

作者:任云康,青云科技研发工程师

前言

对于项目下的网络隔离,有用户提出了以下疑问:

  • 网络隔离是针对 Pod 的吗?
  • 网络隔离的最小配置是什么?
    • 配置后,哪些是可以访问的,哪些是不可以访问的?
    • 通过 Ingress 暴露、LB 类型的 Service 暴露、NodePort 类型的 Service 暴露的流量的具体链路是什么样的?

KubeSphere 网络策略的实现思路

KubeSphere 对于 NetworkPolicy 的集成中主要包含:

  • 集群网络策略管理:主要提供一个原生的 NetworkPolicy 资源的管理,当 KubeSphere 租户网络隔离无法满足用户的全部需求时,可以在此通过 yaml 管理原生的 NetworkPolicy。

  • 租户网络隔离管理:分为企业空间网络隔离和项目空间的网络隔离。

    • 当开启企业空间网络隔离时,会自动为该企业空间的所有项目创建一条只允许本企业空间访问的入站规则的网络策略,默认不限制出站流量;
    • 当开启项目网络隔离时,会自动为该项目创建一条只允许项目访问的入站规则的网络策略;
    • 项目网络隔离下可以配置白名单列表,内部白名单允许当前项目中的容器组与当前企业空间其他项目中的服务进行通信,外部白名单允许当前项目中的容器组与企业空间外部的特定网段和端口进行通信;
    • 默认不限制出站流量;如果配置出站白名单,那只会放行白名单上的出站项。

出站:即对本项目下的 pod 是否可以访问本项目外的 pod/ip/port 的限制。
入站:即对本项目外的 pod/ip 是否可以访问本项目下的 pod 所提供的服务的限制。
注意:NetworkPolicy 是由具体的 CNI 来实现,KubeSphere 做了 UI 化的管理,同时封装了一个项目级别的 NetworkPolicy,用作项目空间的网络隔离。

因此,对前文的问题,我们有了答案:

  1. 网络隔离是针对与 pod 的,而项目网络隔离会匹配本项目下的所有 pod;也可以认为此处的网络隔离是针对项目的;
  2. 服务通过 Ingress、NodePort、LoadBalancer 暴露,表明 service 要给集群外提供服务,如果使用 KubeSphere 项目网络隔离进行管理的话,需要配置外部白名单。

配置

当我们通过 NodePort、LoadBalancer 暴露 Kubernetes 的 service 时,kube-proxy 会创建相应的 ipvs 或 iptables 规则来转发流量。然而,当外部流量进入集群并根据这些规则被转发时,如果目标 pod 不在本地节点上,就会进行一次源网络地址转换(SNAT),这将导致 TCP 包中的源 IP 地址被替换为节点 IP 或 overlay 封装接口的 IP,从而丢失了客户端的原始 IP。如果目标 pod 在本地节点上,可能会直接转发到本机 pod,此时会保留客户端 IP。

这里以 Calico 举例,如果使用的非 ipip/vxlan 模式,我们需要找到 node 上的 eth0 网口上的 IP;如果使用的是 ipip/vxlan 模式,需要找到 node 上的用于封装网卡的 IP,然后添加到外部白名单中放行。同时也要把客户端 IP 也添加到外部白名单中放行。

为了总是保留客户端的原始 IP,可以将 service 的外部访问策略设置为 Local。但是当流量进入没有目标 pod 的节点上时,流量不再进行转发导致请求失败。

配置 NodePort 暴露

当配置 service 为 NodePort 且配置外部访问策略为 Cluster 时,流量访问如下:

当配置 service 为 NodePort 且配置外部访问策略为 Local 时,流量访问如下:

开启项目网络隔离后,

  • 当外部访问策略为 Cluster ,需要在外部白名单中放行集群的所有节点 IP 或 overlay 封装接口的 IP、客户端 IP,缺点是可能会丢失客户端 IP,且由于 SNAT 的缘故无法拦截指定的 IP;
  • 当外部访问策略为 Local ,需要在外部白名单中放行可以访问该服务的客户端 IP,缺点需要确保使用运行了 pod 的节点 IP:NodePort 来访问 service,否则数据包会被丢弃,从而导致请求失败。

配置 LoadBalancer 暴露

当 service 设置为 LoadBalancer 时,你需要支持配置外部负载均衡器的环境,不同的环境技术实现也会有所不同,下面以 OpenELB 为例说明。

当配置 service 为 LoadBalancer 且配置外部访问策略为 Cluster 时,流量访问如下:

当配置 service 为 LoadBalancer 且配置外部访问策略为 Local 时,流量访问如下:

开启项目网络隔离后,

  • 当外部访问策略为 Cluster ,需要在外部白名单中放行集群的所有节点 IP 或 overlay 封装接口的 IP、客户端 IP,缺点是可能会丢失客户端 IP,且由于 SNAT 的缘故无法拦截指定的 IP;
  • 当外部访问策略为 Local ,需要在外部白名单中放行可以访问该服务的客户端 IP,OpenELB 只会将访问 LoadBalancer serviceip 的流量转发到已经运行了 pod 的节点上。

配置 Ingress 暴露

当配置 Ingress 访问时,集群内部不同的 service 需要注册相应的应用路由,同时 Ingress svc 依旧需要通过 LoadBalancer 或者 NodePort 对外暴露,访问流量如下图:

对于 LoadBalancer 或者 NodePort 对外暴露可见我们上述探讨。

更多技术原理可参考 kubernetes networkpolicy:

本文由博客一文多发平台 OpenWrite 发布!

标签:隔离,IP,网络,最小,访问,白名单,pod
From: https://www.cnblogs.com/kubesphere/p/18156970

相关文章

  • 【pytorch学习】之线性神经网络-实现线性回归
    线性回归的从零开始实现在了解线性回归的关键思想之后,我们可以开始通过代码来动手实现线性回归了。我们将从零开始实现整个方法,包括数据流水线、模型、损失函数和小批量随机梯度下降优化器。虽然现代的深度学习框架几乎可以自动化地进行所有这些工作,但从零开始实现可以确保我们......
  • 【pytorch学习】之线性神经网络-线性回归
    线性神经网络【摘要】在介绍深度神经网络之前,我们需要了解神经网络训练的基础知识。我们将介绍神经网络的整个训练过程,包括:定义简单的神经网络架构、数据处理、指定损失函数和如何训练模型。为了更容易学习,我们将从经典算法————线性神经网络开始,介绍神经网络的基础知识。经典......
  • netsvcs -p 是一个 Windows 系统服务组的标识符,其中包含了多个系统服务。这些服务通常
    netsvcs-p是一个Windows系统服务组的标识符,其中包含了多个系统服务。这些服务通常与网络和其他基础系统功能相关。例如,服务组中的服务可能包括自动更新服务、加密服务、时间同步服务等。这些服务的工作确保了系统的正常运行和与网络的连通性。关于这个命令的使用:netsv......
  • linux网络配置
    网络配置命令ifconfigifconfig命令通常用于查看、配置和管理网络接口的信息,其通常用法如下:查看所有网络接口信息:可以直接运行ifconfig命令来查看系统上所有网络接口的信息,包括接口名、IP地址、MAC地址等。查看特定网卡信息:可以指定网卡名来查看特定网卡的详细信息。......
  • 性能监控之网络监控
    1、网络监控命令:iftopiftop(全称应该是interfacetop)是查看网络实时流量的工具1.1centos7安转:yuminstall-yiftop1.2运行数据说明<>:代表了网络流量的流转方向。TX:表示发送的总流量。RX:表示接收的总流量。TOTAL:表示总流量。peak:表示每秒流量的峰值。rates:......
  • 网络为什么要三次握手四次挥手?
    三次握手和四次挥手是TCP协议中建立和终止连接时的标准流程,其设计的目的是确保数据的可靠传输和连接的安全关闭。三次握手(Three-wayHandshake)客户端发送SYN:客户端向服务器发送一个SYN(同步)包,表示请求建立连接,并指定初始序列号(SequenceNumber)。服务器发......
  • 创新的FPGA:LAV-AT-E70-1CSG841C、LAV-AT-E70-2CSG841C、LAV-AT-E70-3CSG841C旨在实现
    Avant-E专为网络边缘处理而生Avant™-E系列中端FPGA是基于16nmFinFET工艺Avant平台推出的首款产品。该平台经过优化可提供同类FPGA产品中领先的低功耗、小尺寸和高性能。Avant-EFPGA旨在实现低延迟的网络边缘设备,非常适合有着明确时序要求的应用,包括工业环境中的机器视觉、机器......
  • XMU《计算机网络与通信》第三次实验报告
    一、个人信息学号:**************姓名:###二、实验目的理解TCP和UDP协议主要特点掌握socket的基本概念和工作原理,编程实现socket通信三、实验任务与结果任务1前置任务开启两个终端窗口,分别编译、运行server_example.c和client_example.c,观察它们实现的功能。......
  • JTCR-网络-21
    InetAddressInetAddress类用于封装IP地址或者域名,支持IPv4和IPv6。创建InetAddress对象需要使用工厂方法,因为没有提供显式构造器。工厂方法如下staticInetAddressgetLocalhost();staticInetAddressgetByName(StringhostName);//一个域名对应多个IP地址时,返回......
  • Docker(十四)-Docker四种网络模式
    Docker安装时会自动在host上创建三个网络,我们可用 dockernetworkls 命令查看:none模式,使用--net=none指定,该模式关闭了容器的网络功能。host模式,使用--net=host指定,容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。bridge模式,使用--net=bridge指定......