网络基础(六)应用层
应用层应用层是tcp /ip 五层最上面的一层,是离应用程序最近的一层。应用层直接和应用程序接口结合,并提供常见的网络应用服务。 针对同的解决问题有不同的应用层协议,是为了更好的解决一类问题而产生的协议。 比如 HTTP, SMB , DNS , FTP,SSH ,Telnet 等等。 使用特定的应用层传输的数据 发送给传输层,应用层的报文 将作为传输层的 数据包的数据部分。 RFC互联网公共领域的标准应用的应用协议是RFC 文档定义的。 RFC: 请求意见稿(英语:Request for Comments,缩写:RFC),又翻译作意见征求,意见请求,请求评论[1]是由互联网工程任务组(IETF)发布的一系列备忘录。文件收集了有关互联网相关信息,以及UNIX和互联网社群的软件文件,以编号排定。目前RFC文件是由互联网协会(ISOC)赞助发行。 RFC 可以理解为一个网络的应用层协议的提交规范,当提交的规范提议被通过后,将成为正式的规范。 如果要详细认识 应用层的某个协议的格式规范,通过查询RFC 协议是最权威的一种方式。 查看RFC文档 https://datatra ...
网络基础(五)传输层
传输层传输层主要负责主机的总体的数据传输和控制。应用层的协议的数据统一经过运输层进行传输。 传输层的协议有2个,分别是TCP 和UDP。 TCPTCP(Transmission Control Protocol) 传输控制协议,tcp是面向连接的。 TCP 的数据格式tcp 的数据格式比udp要复杂一些。 tcp头部结构 tcp 协议同样分为头部和数据部分。数据部分是应用层传输过来的数据。 tcp 协议头部的大小 为 20 到 40 字节。 固定部分 20 + 可变部分 20 = 20 到 40 字节. 源端口(16)发送方的端口,如果是客户端是随机生成的,如果是服务器一般是固定的。 目的端口(16)接收方的端口 序号(4)sequence number:TCP 为每个数据定义了一个编号,此序号表示传给对方的数据中的第一个字节数据的编号。 确认号(4)acknowledgment number:表示希望对方下一次发送哪个编号的数据。比如我已经接受到编号2的数据了,确认号设置为3,表示接下来我需要3编号的数据。 数据偏移(4)数据偏移指的是当前的tcp ...
k8s(十一) helm介绍和使用
helmhelm 是什么?解决了什么问题?如果要部署一个应用,那么需要编写deploy 的yaml文件,service 的yaml文件,ingress的yaml。如果服务很多的时候,比如几十个应用,需要管理的yaml文件的工作量是具大的。同时如果要完成服务的升级,那么需要对每一个deploy 分别执行升级命令,也是比较麻烦的。 helm 类似于 centos 的yum 包管理工具,将要发布的部署等方便的管理起来。方便我们对k8s容器中的服务,部署,pod 等进行高效的管理。 helm概述Helm是目前Kubernetes服务编排领域的唯一开源子项目,做为Kubernetes应用的一个包管理工具,可理解为Kubernetes的apt-get / yum,由Deis 公司发起,该公司已经被微软收购。Helm通过软件打包的形式,支持发布的版本管理和控制,很大程度上简化了Kubernetes应用部署和管理的复杂性。 helm 官网 https://helm.sh/ helm 中的概念 Chart:一个Helm包,其中包含运行一个应用所需要的工具和 资源定义,还可能包含Kubernet ...
网络基础(四)网络层
网络层网络层要解决的问题是数据在计算机之间的通信。 网络层传输的单位是IP数据包(packet)。 以太网帧的数据部分很多时候是由网络层传递的网络层的数据包。而网络层的数据包也有对应的头部和数据部分,数据部分是由传输层传递的。 网络层的数据可能不能由网络层传递的,比如IMCP协议 ,ARP协议,直接在网络层工作的。 网络层的结构 IP数据包的结构图 IP数据包 由 头部 和 数据部分两部分组成。 因为以太网的首部 后是数据部分,所以以太网首部紧跟着就是网络层的首部。 版本 (4)版本记录了传输的是ipv4 还是ipv6 。如果是ipv4 值就是0b0100 ipv6就是0b0110 首部长度(4)版本加首部 占用 指的是当前的首部部分的长度是多少。(注意这个首部长度因为存储空间有限存储的是 实时大小 / 4 的值) 值在20 到60之间。 区分服务(8)区分服务是可以在这个位置添加一个服务标识,在路由器设置特定网络标识的数据包优先通过。设置数据包的优先级。 总长度(16)指的是 数据 ...
k8s(十) k8s中的权限控制
用户控制所有 Kubernetes 集群都有两类用户:由 Kubernetes 管理的服务账号和普通用户。 普通用户: 对于普通用户k8s内部并没有进行管理,也没有对应的资源对象来表示。 普通用户可以通过以下方式进行管理 负责分发私钥的管理员 类似 Keystone 或者 Google Accounts 这类用户数据库 包含用户名和密码列表的文件 可以使用k8s集群签发给用户证书,通过证书信息来判断用户是否是合法的用户。简单的说是通过签发证书的方式给一个普通的用户。 证书的 subject 来表示用户名。 服务账号是 Kubernetes API 所管理的用户。是被绑定到特定的namespace上的。 访问api-server 的时候通过携带 证书,token 或用户名密码来确认用户信息。 RBAC 权限基于角色(Role)的访问控制(RBAC)是一种基于组织中用户的角色来调节控制对 计算机或网络资源的访问的方法。 开启RBAC可以通过权限对资源的操作进行权限的控制。 k8s内有一个非常重要的概念也就是namespace,通过namespace 可以隔离不同的环境,有时候需要 ...
网络基础(三)物理层和数据链路层
物理层和数据链路层物理层物理层主要定义了网络传输过程中的接口标准,线缆标准,传输速率,传输方式等。 物理层主要考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流。 数据传输通过2种信息进行传输 数字信号 (双绞线 光纤) 模拟信息 (电话线 同轴电缆) 数字信息的传输距离一般比较近,抗干扰能力弱。而模拟信息,干扰能力弱,但是传输距离比较远。 网线的传输距离是比较的近的,不能远距离传输,远距离会影响速率 通信模型 在传输过程中都涉及到数字信号的转换 信道信道指的是信息传输的通道,一个传输介质能够有几条传输的通道。 一般网线是有多条信道,同轴电缆只有一条信道。 单工通信只能由一个方向向另一个方法通信,比如广播。 半双工通信可以双向通信但是不能同时进行。 全双工通信可以两个方向同时进行的通信。 数据链路层链路:链路指的是从一个节点到相邻节点的一段物理线路,过程中没有其他的交换节点。 数据链路: 在一个数据链路上传输数据的时候,需要有对应的协议来控制数据的传输。 数据在数据链路层传输的最小单位是帧。数据是由一个帧一个帧的数据进行传输的。 在数据链路层因为数据传输的介质 ...
k8s(九) 配置持久化存储
存储pod 内的容器可以通过挂载卷的方式挂载一个存储位置,但是当pod重启的时候,容器内的挂载的volume将清空。这对于一些比如数据库的应用来说是不可接收的。需要通过挂载可以持久化的网络存储。 k8s 支持多种持久卷的类型 比如 awsElasticBlockStore awsEBS azureDisk Azure Disk local 节点上的本地存储设备 nfs 网络文件存储 ..... 可以根据具体的环境选择使用云厂商的存储服务或节点磁盘或自行搭建存储服务。 挂载nfs 远程存储NFS 是Network File System的缩写,即网络文件系统。一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法。 k8s 支持挂载nfs的网络存储。 一个新的存储机器上安装nfs服务,这里选用 192.168.1.10 ...
k8s(八) 使用 StatefulSet 部署有状态服务
StatefulSet 有状态的服务前面提到的服务都是无状态的服务,可以任意进行伸缩的服务,而真实的场景下很多服务是具有状态的,比如mysql 主从集群,有的是主节点,有的是从节点等。StatefulSet 就是用来管理有状态的应用的服务的。 既然服务有状态,那么在执行服务pod 部署的时候就需要有一些限制 稳定的、唯一的网络标识符。 稳定的、持久的存储。 有序的、优雅的部署和缩放。 有序的、自动的滚动更新。 StatefulSet 具有如下特性 StatefulSet里的每个Pod都有稳定、唯一的网络标识,可以用来 发现集群内的其他成员。假设StatefulSet的名称为kafka,那么第1个Pod 叫kafka-0,第2个叫kafka-1,以此类推。 每一个pod都有一个唯一的域名 StatefulSet控制的Pod副本的启停顺序是受控的,操作第n个Pod 时,前n-1个Pod已经是运行且准备好的状态。 StatefulSet里的Pod采用稳定的持久化存储卷,通过PV或PVC来实现,删除Pod时默认不会删除与StatefulSet相关的存储卷( ...
k8s(七) 使用ingress管理外部访问控制
ingressingress 是什么?node 节点的服务暴露通过service 的nodePort 可以实现端口的暴露。 但是通过nodePort这种方式暴露端口信息会有一些缺陷。 每个端口只能使用一次,一个端口对应了一个应用 实际访问中是使用域名访问,通过域名来访问到端口的服务中 而ingress就是为了弥补nodePort 访问的方式的不足的。 通过ingress可以定义规则来允许进入集群的请求被转发到集群中对应服务上,从来实现服务暴露。 ingress 和service 和pod的关系; ingress 关联了一组service ,作为一个访问的入口,访问到service ,service 再访问到对应的pod 为什么用ingress 而不用nginxingress 可以实现通过域名访问service 进而访问到内部的pod。看起来好像跟nginx的功能类似。 虽然可以使用nginx实现类似的功能,但是如果有新加入的服务的话,需要去更新nginx pod 的配置信息。 而ingress 将nginx 和service 的关联通过Ingress Controller ...
k8s(六) 使用service控制集群访问控制
service创建serviceservice 用来将一组pod抽象成为网络服务。 通过 expose 命令可快速创建service 123kubectl expose deploy nginx-deployment --port=8081 --target-port=80 查看 1kubectl get svc 可以看到为此部署生成了一个服务。并且生成了一个ClusterIP 通过curl 使用clusterIp 将能够访问服务 123curl 10.105.110.239 service 如何访问的Service定义中的关键字段是ports和selector。 selector 定义的是选择特定标签的一类pod; ports 用来定义端口信息 port 指的是service的port targetPort 对应的pod的port nodePort 节点上暴露的port 通过访问service 的地址 会通过内置的负载均衡策略访问到选中的多个pod上。 此策略也是可以配置的,比如轮训或会话保持。 service 的类型 ClusterIP 默认的service ...



