当客户端发起API Server调用时,API Server内部要先进行用户认证,然后执行用户授权流程,即通过授权策略来决定一个API调用是否合法。对合法用户进行授权并且随后在用户访问时进行鉴权,是权限与安全系统的重要一环。简单地说,授权就是授予不同的用户不同的访问权限。 API Server目前支持以下几种授权策略(通过API Server的启动参数“--authorization mode”设置)。 (1)AlwaysDeny:表示拒绝所有请求,一般用于测试。 (2)AlwaysAllow:允许接收所有请求,如果集群不需要授权流程,则可以采...

  4Txe79BjyroE   2023年12月12日   15   0   0 命名空间GroupAPI

假设我们已经有了一个特别大的电商平台,这个平台应该部署在哪里呢?假设我们用公有云,一般公有云会有多个位置,比如在华东、华北、华南都有。毕竟咱们的电商是要服务全国的,当然到处都要部署了。我们把主站点放在华东。 为了每个点都能“雨露均沾”,也为了高可用性,往往需要有多个机房,形成多个可用区(AvailableZone)。由于咱们的应用是分布在两个可用区的,所以假如任何一个可用区挂了,都不会受影响。 这些服务器里面部署的都是计算节点,每台上面都有Open vSwitch创建的虚拟交换机,将来在这台机器上创建的虚拟机,都会连到Open vSwitch上。 接下来,你在云计算的界...

  4Txe79BjyroE   2023年12月11日   12   0   0 电商平台

基于XML的最著名的通信协议就是SOAP了,全称简单对象访问协议(SimpleObjectAccessProtocol)。它使用XML编写简单的请求和回复消息,并用HTTP协议进行传输。 SOAP将请求和回复放在一个信封里面,就像传递一个邮件一样。信封里面的信分抬头和正文。 POST/purchaseOrderHTTP/1.1 Host:www.geektime.com Content-Type:application/soap+xml;charset=utf-8 Content-Length:nnn <?xmlversion="1.0"?> <soap:Envelop...

  4Txe79BjyroE   2023年12月10日   15   0   0 xmlSOAP

在ip_queue_xmit中,也即IP层的发送函数里面,有三部分逻辑。 第一部分,选取路由,也即我要发送这个包应该从哪个网卡出去。 这件事情主要由ip_route_output_ports函数完成。接下来的调用链为:ip_route_output_ports->ip_route_output_flow->__ip_route_output_key->ip_route_output_key_hash->ip_route_output_key_hash_rcu。 ip_route_output_key_hash_rcu先会调用fib_lookup。FIB全称是Forwar...

  4Txe79BjyroE   2023年12月09日   15   0   0 数据包

在tcp_v4_rcv中,得到TCP的头之后,我们可以开始处理TCP层的事情。因为TCP层是分状态的,状态被维护在数据结构structsock里面,因而我们要根据IP地址以及TCP头里面的内容,在tcp_hashinfo中找到这个包对应的structsock,从而得到这个包对应的连接的状态。 接下来,我们就根据不同的状态做不同的处理,TCP_LISTEN、TCP_NEW_SYN_RECV状态属于连接建立过程中。TCP_TIME_WAIT状态是连接结束的时候的状态。 我们来分析最主流的网络包的接收过程,这里面涉及三个队列: backlog队列 prequeue队列 sk_receive_que...

  4Txe79BjyroE   2023年12月08日   11   0   0 TCP

操作系统的功能和模块与Kubernetes的功能和模块做了一个对比: Kubernetes作为数据中心的操作系统还是主要管理数据中心里面的四种硬件资源:CPU、内存、存储、网络。 对于CPU和内存这两种计算资源的管理,我们可以通过Docker技术完成。它可以将CPU和内存资源,通过namespace和cgroup,从大的资源池里面隔离出来,并通过镜像技术,实现计算资源在数据中心里面的自由漂移。 Kubernetes里面有一个调度器Scheduler,你只需要告诉它,你想运行10个4核8G的Java程序,它会自动帮你选择空闲的、有足够资源的服务器,去运行这些程序。 Kubernetes里面有C...

  4Txe79BjyroE   2023年12月07日   11   0   0 kubernets

cgroup全称是controlgroup,顾名思义,它是用来做“控制”的。控制什么东西呢?当然是资源的使用了。 cgroup定义了下面的一系列子系统,每个子系统用于控制某一类资源。 CPU子系统,主要限制进程的CPU使用率。 cpuacct子系统,可以统计cgroup中的进程的CPU使用报告。 cpuset子系统,可以为cgroup中的进程分配单独的CPU节点或者内存节点。 memory子系统,可以限制进程的Memory使用量。 blkio子系统,可以限制进程的块设备IO。 devices子系统,可以控制进程能够访问某些设备。 net_cls子系统,可以标记cgroups中进程的网络数据包...

  4Txe79BjyroE   2023年12月06日   11   0   0 Cgroup

虚拟机里面的进程写入一个文件,当然要通过文件系统。整个过程和文件系统过程没有区别。只是到了设备驱动层,我们看到的就不是普通的硬盘驱动了,而是virtio的驱动。virtio的驱动程序代码在Linux操作系统的源代码里面,文件名叫drivers/block/virtio_blk.c。 虚拟机里面的virtio的前端是这样的结构:structvirtio_device里面有一个structvring_virtqueue,在structvring_virtqueue里面有一个structvring。 存储虚拟化的场景下,整个写入的过程。 在虚拟机里面,应用层调用write系统调用写入文件。 wri...

  4Txe79BjyroE   2023年12月06日   18   0   0 存储虚拟化

网络虚拟化有和存储虚拟化类似的地方,例如,它们都是基于virtio的,因而在看网络虚拟化的过程中,会看到和存储虚拟化很像的数据结构和原理。但是,网络虚拟化也有自己的特殊性。例如,存储虚拟化是将宿主机上的文件作为客户机上的硬盘,而网络虚拟化需要依赖于内核协议栈进行网络包的封装与解封装。 当网络包经过客户机的协议栈到达virtio_net驱动的时候,按照net_device_ops的定义,start_xmit会被调用。 staticconststructnet_device_opsvirtnet_netdev={ .ndo_open=virtnet_open, .ndo_stop=virtnet...

  4Txe79BjyroE   2023年12月06日   12   0   0 网络虚拟化

容器实现封闭的环境主要要靠两种技术,一种是看起来是隔离的技术,称为namespace(命名空间)。在每个namespace中的应用看到的,都是不同的IP地址、用户空间、进程ID等。另一种是用起来是隔离的技术,称为cgroup(网络资源限制),即明明整台机器有很多的CPU、内存,但是一个应用只能用其中的一部分。 所谓镜像(Image),就是在你焊好集装箱的那一刻,将集装箱的状态保存下来。就像孙悟空说:“定!”,集装箱里的状态就被“定”在了那一刻,然后这一刻的状态会被保存成一系列文件。无论在哪里运行这个镜像,都能完整地还原当时的情况。 当程序员根据产品设计开发完毕之后,可以将代码连同运行环境打包成...

  4Txe79BjyroE   2023年12月06日   14   0   0 Docker

对应到容器技术,为了隔离不同类型的资源,Linux内核里面实现了以下几种不同类型的namespace。 UTS,对应的宏为CLONE_NEWUTS,表示不同的namespace可以配置不同的hostname。 User,对应的宏为CLONE_NEWUSER,表示不同的namespace可以配置不同的用户和组。 Mount,对应的宏为CLONE_NEWNS,表示不同的namespace的文件系统挂载点是隔离的 PID,对应的宏为CLONE_NEWPID,表示不同的namespace有完全独立的pid,也即一个namespace的进程和另一个namespace的进程,pid可以是一样的,但是代表...

  4Txe79BjyroE   2023年12月06日   11   0   0 namespace

VMCS是VirtualMachineControlStructure。是Intel实现CPU虚拟化,记录vCPU状态的一个关键数据结构。VMCS数据结构主要包含以下信息。 Guest-statearea,即vCPU的状态信息,包括vCPU的基本运行环境,例如寄存器等。 Host-statearea,是物理CPU的状态信息。物理CPU和vCPU之间也会来回切换,所以,VMCS中既要记录vCPU的状态,也要记录物理CPU的状态。 VM-executioncontrolfields,对vCPU的运行行为进行控制。例如,发生中断怎么办,是否使用EPT(ExtendedPageTable)功能等。 ...

  4Txe79BjyroE   2023年11月30日   15   0   0 CPU虚拟化

当一些网络包到来触发了中断,内核处理完这些网络包之后,我们可以先进入主动轮询poll网卡的方式,主动去接收到来的网络包。如果一直有,就一直处理,等处理告一段落,就返回干其他的事情。当再有下一批网络包到来的时候,再中断,再轮询poll。这样就会大大减少中断的数量,提升网络处理的效率,这种处理方式我们称为NAPI。 在网卡驱动程序初始化的时候,我们会调用ixgb_init_module,注册一个驱动ixgb_driver,并且调用它的probe函数ixgb_probe。 在ixgb_probe中,我们会创建一个structnet_device表示这个网络设备,并且netif_napi_add函数为...

  4Txe79BjyroE   2023年11月28日   17   0   0 TCPIP

消息队列、共享内存、信号量的机制:它们在使用之前都要生成key,然后通过key得到唯一的id,并且都是通过xxxget函数。在内核里面,这三种进程间通信机制是使用统一的机制管理起来的,都叫ipcxxx。为了维护这三种进程间通信进制,在内核里面,我们声明了一个有三项的数组。 通过这段代码,来具体看一看。 structipc_namespace{ ...... structipc_idsids[3]; ...... } defineIPC_SEM_IDS0 defineIPC_MSG_IDS1 defineIPC_SHM_IDS2 definesem_ids(ns)((ns)->ids...

  4Txe79BjyroE   2023年11月27日   14   0   0 共享内存内存映射#define

当一些网络包到来触发了中断,内核处理完这些网络包之后,我们可以先进入主动轮询poll网卡的方式,主动去接收到来的网络包。如果一直有,就一直处理,等处理告一段落,就返回干其他的事情。当再有下一批网络包到来的时候,再中断,再轮询poll。这样就会大大减少中断的数量,提升网络处理的效率,这种处理方式我们称为NAPI。 在网卡驱动程序初始化的时候,我们会调用ixgb_init_module,注册一个驱动ixgb_driver,并且调用它的probe函数ixgb_probe。 在ixgb_probe中,我们会创建一个structnet_device表示这个网络设备,并且netif_napi_add函数为...

  4Txe79BjyroE   2023年11月26日   17   0   0 linux

线程不是一个完全由内核实现的机制,它是由内核态和用户态合作完成的。pthread_create不是一个系统调用,是Glibc库的一个函数,所以我们还要去Glibc里面去找线索。 首先处理的是线程的属性参数。例如前面写程序的时候,我们设置的线程栈大小。如果没有传入线程属性,就取默认值。 conststructpthread_attriattr=(structpthread_attr)attr; structpthread_attrdefault_attr; if(iattrNULL) { ...... iattr=&default_attr; } 接下来,就像在内核里一样,每一个进程...

  4Txe79BjyroE   2023年11月25日   16   0   0 线程

一台机器将自己想要表达的内容,按照某种约定好的格式发送出去,当另外一台机器收到这些信息后,也能够按照约定好的格式解析出来,从而准确、可靠地获得发送方想要表达的内容。这种约定好的格式就是网络协议(NetworkingProtocol)。 两种网络协议模型,一种是OSI的标准七层模型,一种是业界标准的TCP/IP模型。它们的对应关系如下图所示: 为什么网络要分层呢?因为网络环境过于复杂,不是一个能够集中控制的体系。全球数以亿记的服务器和设备各有各的体系,但是都可以通过同一套网络协议栈通过切分成多个层次和组合,来满足不同服务器和设备的通信需求。 连接到网络上的每一个设备都至少有一个IP地址,用于定...

  4Txe79BjyroE   2023年11月24日   16   0   0 socket

在传输层有两个主流的协议TCP和UDP,socket程序设计也是主要操作这两个协议。这两个协议的区别是什么呢?通常的答案是下面这样的。 TCP是面向连接的,UDP是面向无连接的。 TCP提供可靠交付,无差错、不丢失、不重复、并且按序到达;UDP不提供可靠交付,不保证不丢失,不保证按顺序到达。 TCP是面向字节流的,发送时发的是一个流,没头没尾;UDP是面向数据报的,一个一个地发送。 TCP是可以提供流量控制和拥塞控制的,既防止对端被压垮,也防止网络被压垮。 从本质上来讲,所谓的建立连接,其实是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,并用这样的数据结构来保证面...

  4Txe79BjyroE   2023年11月24日   17   0   0 TCPUDP

软件定义网络(SDN)。它主要有以下三个特点: 控制与转发分离:转发平面就是一个个虚拟或者物理的网络设备,就像小区里面的一条条路。控制平面就是统一的控制中心,就像小区物业的监控室。它们原来是一起的,物业管理员要从监控室出来,到路上去管理设备,现在是分离的,路就是走人的,控制都在监控室。 控制平面与转发平面之间的开放接口:控制器向上提供接口,被应用层调用,就像总控室提供按钮,让物业管理员使用。控制器向下调用接口,来控制网络设备,就像总控室会远程控制电梯的速度。这里经常使用两个名词,前面这个接口称为北向接口,后面这个接口称为南向接口,上北下南嘛。 逻辑上的集中控制:逻辑上集中的控制平面可以控制多...

  4Txe79BjyroE   2023年11月22日   17   0   0 内核态用户态IP

进程之间共享内存的机制,有了这个机制,两个进程可以像访问自己内存中的变量一样,访问共享内存的变量。但是同时问题也来了,当两个进程共享内存了,就会存在同时读写的问题,就需要对于共享的内存进行保护,就需要信号量这样的同步协调机制。 对于共享内存的操作,首先,创建之前,我们要有一个key来唯一标识这个共享内存。这个key可以根据文件系统上的一个文件的inode随机生成。 然后,我们需要创建一个共享内存,就像创建一个消息队列差不多,都是使用xxxget来创建。其中,创建共享内存使用的是下面这个函数: intshmget(key_tkey,size_tsize,intshmflag); 其中,key...

  4Txe79BjyroE   2023年11月22日   17   0   0 共享内存信号量
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~