k8s隔离pod访问? k8s访问控制?
内网k8s机群pod如何上网
1、内网K8s机群中的POD上网可以通过配置kubernetes的Service和Endpoints、使用Hostnetwork、nodePort或ExternalIPs等方式实现。
2、考虑到Pod网络实现技术众多,为了简化集成,K8S支持CNI(容器网络接口)这样一个标准。不同的网络技术可以通过CNI以插件的形式和K8S进行集成。K8S中的kubelet通过CNI接口去操作PoD网络(如删除或添加网络接口),从而无需关心Pod网络的底层具体实现细节。
3、若办公网络至交换机间有多个网关,需在这些网关上设置合适的路由。至此,基本打通了外部直接访问Pod IP的能力。然而,Cluster IP访问存在限制,通常Calico并未广播service IP。可通过检查交换机接收到的IP段确认。解决方案是打开相关设置。为了在无需记忆IP的情况下访问服务,将K8s内部dns暴露出来。
4、NodePort:每个Node分配静态端口,外部流量可通过访问任意Node的该端口访问Service,但需注意安全风险。LoadBalancer:使用云厂商提供的负载均衡器分发外部流量,但需注意成本问题。Ingress:Ingress控制器负责将外部HTTP(S)流量路由到集群内的Service。
K8S网络之Pod网络
K8S网络之Pod网络 K8S(Kubernetes)网络中的Pod网络是保证K8S集群中所有Pod能够相互进行IP寻址和通信的关键部分。Pod是K8S基本的调度单位,相当于K8S云平台所提供的虚拟机。Pod网络构建于节点网络之上,又是上层Service网络的基础。
内网K8s机群中的Pod上网可以通过配置Kubernetes的Service和Endpoints、使用HostNetwork、NodePort或ExternalIPs等方式实现。配置Kubernetes的Service和Endpoints 通过将外部服务抽象为Kubernetes Service,并手动指定Endpoints(如果外部服务的IP地址是固定的),Pod可以像访问集群内部服务一样访问外部服务。
基于k8s multuscni插件实现灵活指定Pod网络类型的实践如下:单独Calico网络配置:部署Calico:使用Calico v8版本,并遵循官方部署指南进行安装。安装multuscni:基于v2版本进行安装。修改配置文件:确保/etc/cni/net.d/00multus.conf中netcalico网络配置正确。
K8s网络组件-Calico
Calico后端(calico_backend)默认配置:bird说明:Calico使用bird构建BGP mesh的全连接网络。Bird是Linux提供的一个BGP客户端工具,负责读取路由信息,并与其他节点的bird一起构建BGP网络。
Calico 的核心组件包括:Felix:运行在每个节点的代理程序,负责网络接口监听、路由信息管理、ARP 信息管理、ACL 规则管理、上报节点网络状态以及创建 Calico 虚拟网络设备(如 tunl0、vxlan.calico)。
Calico 提出将主机视为互联网中的路由器,使用 BGP 同步路由,并结合 iptables 安全访问策略,设计出了一种新的方案。Calico 适用场景:在 k8s 环境中,pod 之间需要隔离。设计思想:Calico 不采用隧道或 NAT 来实现转发,而是将所有二三层流量转换为三层流量,并通过主机上的路由配置完成跨主机转发。
Calico是一种高效的容器网络方案,专为k8s等容器化平台设计,旨在实现容器间的高效互通与隔离控制。设计思想与优势: 三层路由转发:Calico不采用隧道或NAT技术,而是将所有二三层流量转换为三层流量,通过主机上的路由配置完成跨主机转发,从而避免了二层广播带来的复杂性和资源开销。
// calico有两种模式:ipip(默认)、bgp,bgp效率更高。如果宿主机在同一个网段,可以使用ipip模式;如果宿主机不在同一个网段,pod通过BGP的hostGW是不可能互相通讯的,此时需要使用ipip模式(如果仍想使用bgp模式,除非你在中间路由器上手动添加路由)。
从攻击者角度谈谈--K8S的攻击
1、在针对Kubernetes(K8S)集群的攻击中,攻击者通常会采取一系列策略来渗透、提升权限、窃取凭证,并最终实现对整个集群的控制。
2、年 11 月 8 日故障:当日 16:30 - 17:30 左右,用阿里云 ECS 搭建的 k8s 集群,因 2 台 32 核 64G 的高配抢占式实例同时释放造成全站故障。16:33 收到阿里云短信通知,这两台服务器将在 5 分钟内释放。
3、常见的容器集群管理方式是通过登录Master节点或运维跳板机,然后再通过kubectl命令工具来控制k8s。
4、BAS(入侵与攻击模拟系统)是一款以攻击模拟技术为核心的安全测试工具。它通过模拟人工的红蓝对抗,从攻击者的角度出发,提供覆盖完整杀伤链的安全场景,包括但不限于钓鱼邮件场景、邮件网关场景、威胁情报场景、WAF场景、威胁防护场景、终端安全场景以及数据保护场景等。
5、WPS文档中心及文档中台远程命令执行漏洞是一个严重的安全问题。该漏洞允许攻击者未授权访问特定接口,获取AK/SK密钥,进而利用该密钥修改K8s配置文件,添加kubelet路由映射,最终可以向内部POD接口发起命令执行。
浅谈k8s网络之flannel网络
Flannel是CoreOS团队为Kubernetes设计的网络规划服务,其核心功能是为集群中的Docker容器分配全集群唯一的虚拟IP地址,解决不同节点容器可能获得相同内外IP地址的问题。
Flannel 是 Kubernetes 的一个 CNI(CONTAINER Network Interface)网络插件,它主要用于解决 Kubernetes 集群中 Pod 之间的网络通信问题。Flannel 通过在集群节点之间创建一个覆盖网络(Overlay Network),使得不同节点上的 Pod 能够通过虚拟 IP 地址进行通信。
在Kubernetes集群中使用Flannel插件配置VXLAN网络,以实现节点之间的通信。Flannel是Kubernetes的网络插件,本文通过kubeadm工具安装Kubernetes版本19,网络模式设定为VXLAN。Flannel通过下载并配置`flannel.yml`文件进行安装,之后通过检查安装结果来确认配置成功。
VXLAN模式下的运作原理 依赖协议:VXLAN模式下的flannel依赖于VXLAN协议,实现跨主机Pod间的通信。组件工作流程:flannelcni:作为CNI规范下的二进制文件,负责生成配置文件并调用其它CNI插件,实现主机到主机的网络互通。
Flanneld是flannel在每个主机上的agent,负责从集群网络地址空间获取小的子网subnet,为所在主机内所有容器分配IP地址,并监听K8s集群数据库,为flannel.1设备提供封装数据时所需的mac、ip等网络数据信息。当不同节点上的pod通信时,测试集群定义的flannel网络(POD CIDR)为170.0/16。
k8s离线启动时flannel异常的可能原因和解决方案如下:原因:主机路由表问题:主机路由表可能缺少对0.0.0.0的默认路由,导致Flannel无法正确路由网络流量。Flannel配置文件错误:Flannel的配置文件可能存在错误或缺失,导致Flannel无法正确启动或配置网络。
k8s网络模式详解
K8s(Kubernetes)网络模式主要包括基础通行层、服务发现层、K8s网络通信模型以及“扁平网络”的三种典型实现方式。基础通行层 同一Pod内容器通信:容器共享同一个网络命名空间,相当于同一房间的室友,性能损耗为0%。同节点Pod通信:数据通过Linux网桥传输,延时低,但需注意默认docker0网段可能冲突。
K8s(Kubernetes)网络模式主要包括基础通行层、服务发现层、K8s网络通信模型以及“扁平网络”的实现方式。基础通行层 同一Pod内容器通信:容器共享同一个网络命名空间,相当于同一房间的室友,性能损耗为0%。同节点Pod通信:数据通过Linux网桥传输,延时极小,但需注意默认docker0网段可能冲突。
覆盖网络模式(Overlay Network)采用 IPIP 或 VXLAN 协议对底层网络数据报文进行封装,然后通过上层覆盖网络通信。适用场景:如果集群 Node 节点处于不同的二层网络中,可能由于到达目标主机的跳数太多导致性能下降,建议采用该模式。
Flannel:两种实现(UDP和VXLAN),分别涉及TUN设备或VXLAN隧道,以及Host-gw的三层解决方案。 Calico:非IPIP模式利用BGP维护路由,无网桥的直接路由规则;IPIP模式通过IP隧道解决跨子网通信问题。最后,CNI网络插件是K8S的核心组件,负责在Pod创建时设置网络环境,如网络命名空间的配置和路由规则的设定。
K8s 网络模型与 CNI 网络插件Kubernetes 网络模型 Kubernetes 的网络模型要求所有容器都可以直接使用 IP 地址与其他容器通信,而无需使用 NAT。同时,所有宿主机都可以直接使用 IP 地址与所有容器通信,反之亦然。容器自己看到的 IP 地址,和别人(宿主机或者容器)看到的地址是完全一样的。