(一)云计算技术学习--基础概念

目录

Linux的用户管理

Yum 命令

Python

SELinux

vsftpd

etcd

Session、Cookie、Token

LNMP

VMware

Docker

Kubernetes(K8S)


Centos

CentOS(Community Enterprise Operating System,中文意思是社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。两者的不同,在于CentOS完全开源

我本地是在VM里安装的Centos,安装的时候最常用的有三种安装方式的选择,最小化安装是不带有任何界面的,但是可以选择配套安装的软件。对于GUI和GNOME,貌似只选择父目录是没什么区别,但是每个父目录下的子目录程序是不一样的。我选择是仅GNOME安装。

最小化安装

 最小化安装了,开机启动是命令行模式,也没关系,可以做如下修改:

1.在命令行下输入下面的命令来安装 Gnome 包

sudo  yum groupinstall "GNOME Desktop" "Graphical Administration Tools"

 2.更新系统的运行级别

自动进入图形界面,那么我们需要更改系统的运行级别,输入下面的命令来启用图形界面。

sudo ln -sf /lib/systemd/system/runlevel5.target /etc/systemd/system/default.target

3.重启系统

当系统再次启动的时候,就会默认进入图形界面

这里注意:如果是最小化安装,那么默认登陆的时候直接可以选择是root登录还是非root登录,只要输入账号就行,但是带有图形化界面的安装,默认登录用户是非root,所以需要切换账号。切换方法:输入英文 su -以及root的密码即可切换为root用户

 Server with GUI

 GNOME

CentOS独有的yum命令支持在线升级,可以即时更新系统,我安装的是CentOS-7-x86_64-DVD-1804,CentOS在在线安装VM Tools的时候遇到一些问题:

1.首先是在现在下,通过虚拟光驱找到VMTools的iso文件位置,双击打开后可以看到

2.将这个压缩包有xftp工具拷贝到虚拟机中的某个目录下,然后运行tar,命令解压

3.如果进入到解压后的路径中,直接运行./vmware-install.pl会遇到各种问题:

bash:./vmware-install.pl :/usr/bin/perl:bad interpreter:No such file or directory

解决办法安装perl

yum -y install perl

What is the location of the “ifconfig” program on your machine?
解决办法,请安装ifconfig,重新执行vmware-install.pl

yum search ifconfig
yum install net-tools.x86_64

The path “” is not a valid path to the 3.10.0-957.el7.x86_64 kernel headers.
Would you like to change it? [yes]
INPUT: [yes] default
运行以下两条命令

yum -y install perl gcc make kernel-headers kernel-devel

yum -y install kernel-devel-$(uname -r)

VMware的网络连接模式有三种:
1、仅主机模式:也就是host_only,这种模式仅仅只让虚拟机与本地物理机通信,不可以上网;


2、NAT模式:这种模式保留仅主机模式的功能下,还能让虚拟机上网;

虚拟机在物理机的一个子网中,虚拟机的地址是内网地址,虚拟机所有上网都是借助物理机NAT功能把内网IP转换成外网IP,因此对外面网络上花花绿绿的机器来说,看到的永远只是外网IP。

类似于我现在一个笔记本、一个手机都是通过家用路由器上网,一个192.168.1.2,一个192.168.1.3,但是对百度来说,它所看到的源IP绝对不是这个,而是经过路由器转换后的电信提供的公网IP。百度无法从这一个IP判断是我的笔记本还是手机在上网。

NAT模式下注意问题:

  • 虚拟机和电脑主机是可以互相ping通的,如果电脑主机可以ping通虚拟机,但是虚拟机不可以ping通电脑主机,那么多数情况是电脑主机的防火墙打开了,进行关闭即可。

  • 虚拟机不能ping通互联网外网的ip。

设置虚拟NAT网卡的网关地址和本机虚拟网卡的网关地址一样,设置虚拟机的网络配置

 

  • 可以ping通外网的ip但是ping不通域名

在/etc/resolv.conf文件里追加以下内容:


3、桥接模式:直接让虚拟机使用本地主机的网卡上网。

虚拟机和物理机同等地位,相当于你同事和你的电脑,物理机上虚拟网卡VM0相当于交换机(集线器),一头连到了家用路由器,另外N头接所有需要上网的电脑。所以虚拟机的网络配置和物理机保持一模一样。

Linux的用户管理

配置文件:

用户信息文件:/etc/passwd
密码文件:/etc/shadow
用户组文件:/etc/group
用户组密码文件:/etc/gshadow

/etc/passwd   文件格式解析(7个字段)

root:x:0:0:root:/root:/bin/bash

用户名:密码位:UID(用户标识号):GID(缺省组标识号):描述信息:宿主目录:命令解释器(使用的 shell,默认为bash)

Linux用户的分类:

  • 超级用户:(root,UID=0)
  • 普通用户:(UID在500到60000)
  • 伪用户:(UID在1到499)

伪用户:

1、伪用户与系统和程序服务相关

    bin、daemon、shutdown、halt等,任何Linux系统默认都有这些伪用户

    mail、news、games、apache、ftp、mysql及sshd等,与Linux 系统的进程相关

2、伪用户通常不需要或无法登录系统

3、可以没有宿主目录

/etc/group 文件格式  共4个字段

root:x:0:root

sys:x:3:root,bin,adm

组名:组密码位:GID:组成员(组内所有用户列表,用逗号隔开)

用户和组管理的命令详解

RPM命令

在 Linux 操作系统下,几乎所有的软件均通过RPM 进行安装、卸载及管理等操作。RPM 的全称为Redhat Package Manager ,是由Redhat 公司提出的,用于管理Linux 下软件包的软件。Linux 安装时,除了几个核心模块以外,其余几乎所有的模块均通过RPM 完成安装。RPM 有五种操作模式,分别为:安装、卸载、升级、查询和验证。

rpm -qa | grep tomcat4 查看 tomcat4 是否被安装;
rpm -i example.rpm 安装 example.rpm 包;

rpm -e 需要卸载的安装包
在卸载之前,通常需要使用rpm -q …命令查出需要卸载的安装包名称。
举例如下:
rpm -e tomcat4 卸载 tomcat4 软件包

Yum 命令

yum( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。基于 RPM ( Red-Hat Package Manager 红帽软件包管理器 )包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装,可以是在线版,也可以是本地版。

yum 提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。

yum 语法

yum [options] [command] [package ...]
  • options:可选,选项包括-h(帮助),-y(当安装过程提示选择全部为 "yes"),-q(不显示安装的过程)等等。
  • command:要进行的操作。
  • package:安装的包名。

Python

Linux下源码的安装一般由3个步骤组成:配置(configure)、编译(make)、安装(make install),具体的安装方法一般都会给出文档,这里主要讨论配置(configure)。Configure是一个可执行脚本,它有很多选项,在源码路径下使用命令./configure –help输出详细的选项列表,如下:


很多的选项,你可以忽略其他的一切,但请把--prefix加上。这里以安装python3为例,我们打算把它安装到目录/usr/local/python3,于是在python3目录执行带选项的脚本./configure --prefix=/usr/local/python3执行成功后再编译、安装(make,make install);安装完成将自动生成目录python3而且该软件所有的文件都被复制到这个目录。

./configure --prefix=/usr/local/python3

为什么要指定这个安装目录?是为了以后的维护方便,如果没有用这个选项,安装过程结束后,该软件所需的软件被复制到不同的系统目录下,很难弄清楚到底复制了那些文件、都复制到哪里去了—基本上是一塌糊涂。

用了--prefix选项的另一个好处是卸载软件或移植软件。当某个安装的软件不再需要时,只须简单的删除该安装目录,就可以把软件卸载得干干净净;移植软件只需拷贝整个目录到另外一个机器即可(相同的操作系统)。

SELinux

安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统 。SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。可以看看这篇文章介绍:一文彻底明白linux中的selinux到底是什么

vsftpd

vsftpd 是“very secure FTP daemon”的缩写,如果你只想搭建一个性质简单的FTP,——尤其是匿名下载FTP——我认为是vsftpd是Linux平台下最好的选择。安全性是vsftpd的一个最大的特点它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX 等系统上面,是一个完全免费的、开放源代码的 ftp 服务器软件,支持很多其他的FTP 服务器所不支持的特征。

etcd

在云计算时代,如何让服务快速透明地接入到计算集群中,如何让共享配置信息快速被集群中的所有机器发现,更为重要的是,如何构建这样一套高可用、安全、易于部署以及响应快速的服务集群,已经成为了迫切需要解决的问题。etcd为解决这类问题带来了福音。

etcd是一个高可用的键值存储系统,使用一致性哈希算法(Raft)在分布式环境下的 key/value 存储服务,主要用于共享配置和服务发现。具有以下特点:

  • 简单:基于HTTP+JSON的API让你用curl就可以轻松使用。
  • 安全:可选SSL客户认证机制。
  • 快速:每个实例每秒支持一千次写操作。
  • 可信:使用Raft算法充分实现了分布式。

Session、Cookie、Token

很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议, 就是请求加响应, 尤其是我不用记住是谁刚刚发了HTTP请求, 每个请求对我来说都是全新的。这段时间很嗨皮。

但是随着交互式Web应用的兴起,像在线购物网站,需要登录的网站等等,马上就面临一个问题,那就是要管理会话,必须记住哪些人登录系统, 哪些人往自己的购物车中放商品, 也就是说我必须把每个人区分开,这就是一个不小的挑战,因为HTTP请求是无状态的,所以想出的办法就是给大家发一个会话标识(session id), 说白了就是一个随机的字串,每个人收到的都不一样, 每次大家向我发起HTTP请求的时候,把这个字符串给一并捎过来, 这样我就能区分开谁是谁了!

当用户第一次通过浏览器使用用户名和密码访问服务器时,服务器会验证用户数据,验证成功后在服务器端写入session数据,向客户端浏览器返回sessionid,浏览器将sessionid保存在cookie中,当用户再次访问服务器时,会携带sessionid,服务器会拿着sessionid从服务器获取session数据,然后进行用户信息查询,查询到,就会将查询到的用户信息返回,从而实现状态保持。

 这样大家很嗨皮了,可是服务器就不嗨皮了,每个人只需要保存自己的session id,而服务器要保存所有人的session id !如果访问服务器多了, 就得由成千上万,甚至几十万个,这对服务器说是一个巨大的开销 , 严重的限制了服务器扩展能力, 比如说我用两个机器组成了一个集群, 小F通过机器A登录了系统, 那session id会保存在机器A上, 假设小F的下一次请求被转发到机器B怎么办?机器B可没有小F的 session id啊。

有时候会采用一点小伎俩: session sticky , 就是让小F的请求一直粘连在机器A上, 但是这也不管用, 要是机器A挂掉了, 还得转到机器B去。那只好做session 的复制了, 把session id 在两个机器之间搬来搬去, 快累死了。

后来有个叫Memcached的支了招:把session id 集中存储到一个地方,也就是cookie中, 所有的机器都来访问这个地方的数据, 这样一来,就不用复制了, 但是增加了单点失败的可能性, 要是那个负责session 的机器挂了, 所有人都得重新登录一遍, 估计得被人骂死!

也尝试把这个单点的机器也搞出集群,增加可靠性, 但不管如何, 这小小的session 对我来说是一个沉重的负担,于是有人就一直在思考, 我为什么要保存这可恶的session呢, 只让每个客户端去保存该多好?

可是如果不保存这些session id , 怎么验证客户端发给我的session id 的确是我生成的呢? 如果不去验证,我们都不知道他们是不是合法登录的用户, 那些不怀好意的家伙们就可以伪造session id , 为所欲为了。

嗯,对了,关键点就是验证 !

比如说, 小F已经登录了系统, 我给他发一个令牌(token), 里边包含了小F的 user id, 下一次小F 再次通过Http 请求访问我的时候, 把这个token 通过Http header 带过来不就可以了。不过这和session id没有本质区别啊, 任何人都可以可以伪造, 所以我得想点儿办法, 让别人伪造不了。

那就对数据做一个签名吧, 比如说我用HMAC-SHA256 算法,加上一个只有我才知道的密钥, 对数据做一个签名, 把这个签名和数据一起作为token , 由于密钥别人不知道, 就无法伪造token了。

这个token 我不保存, 当小F把这个token 给我发过来的时候,我再用同样的HMAC-SHA256 算法和同样的密钥,对数据再计算一次签名, 和token 中的签名做个比较, 如果相同, 我就知道小F已经登录过了,并且可以直接取到小F的user id , 如果不相同, 数据部分肯定被人篡改过, 我就告诉发送者:对不起,没有认证。

Token 中的数据是明文保存的(虽然我会用Base64做下编码, 但那不是加密), 还是可以被别人看到的, 所以我不能在其中保存像密码这样的敏感信息。当然, 如果一个人的token 被别人偷走了, 那我也没办法, 我也会认为小偷就是合法用户, 这其实和一个人的session id 被别人偷走是一样的。

这样一来, 我就不保存session id 了, 我只是生成token , 然后验证token , 我用我的CPU计算时间获取了我的session 存储空间 !解除了session id这个负担, 可以说是无事一身轻, 我的机器集群现在可以轻松地做水平扩展, 用户访问量增大, 直接加机器就行。这种无状态的感觉实在是太好了!

基于Token的身份验证的过程如下:

  1. 用户通过用户名和密码发送请求。
  2. 程序验证。
  3. 程序返回一个签名的token 给客户端。
  4. 客户端储存token,并且每次用于每次发送请求。
  5. 服务端验证token并返回数据。

每一次请求都需要token。token应该在HTTP的头部发送从而保证了Http请求无状态。我们同样通过设置服务器属性Access-Control-Allow-Origin:* ,让服务器能接受到来自所有域的请求。

Cookie
cookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能。cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的cookie数量是有限的。
 

LNMP

Linux+Nginx+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。

LNMP是一个CS架构的平台(Client/Server架构, 即客户端/服务器架构),web客户端基于TCP/IP通过http协议发起传送这个请求可能是动态的也可能是静态的,所有的服务器通过发起请求的后缀来判断,如果是静态的就由web服务器自己处理,然后将资源发给客户端。如果请求是动态的这时web服务器会通过FastCGI协议发给php,通过php模块去MySQL拿数据在通过Nginx交给客户端。

WordPress是使用PHP语言开发的内容管理系统

  • 内容管理系统,英文叫做 Content Management System(CMS)。
  • WordPress是全球最多人使用的,免费开源的建站程序

VMware

VMware Workstation是基于OS的虚拟OS资源的虚拟化工具,它能将OS闲置的资源加以充分利用,如果你的这台OS机器性能足够好,可以通过VMware Workstation创建DNS,DHCP,Apache等许多服务器,一个机子运行多个服务,节省了许多开支,这个作用是虚拟化所共有的特点。

因为生活中我们常常用它来虚拟实验环境,我们大多数的人就把它当做一种用于玩操作系统的工具,这么理解是有偏差的。

VMware vSphere则是一种虚拟化方案包括很多东西,其核心是ESXi,ESXi独立安装在裸机上的操作系统(注意它不基于任何OS,它本身就是OS),通过它物理机的硬件资源被虚拟化为虚拟资源,之后再通过vCenter就能将安装了ESXi操作系统的物理机的资源进行整合,化为一个总的资源池,在这个资源池里面我们为各个部门划分不同大小的资源池方便其使用。

准确来说这两个不属于一个概念

VMware Workstation是一个基于OS的软件,而VMware vSphere则是根据企业的实际情况设计的一个虚拟化方案,它设计的软件,技术和要考虑的问题都要比VMware Workstation要多,要详细,要具体。

简单来说

VMware Workstation是一款基于OS的虚拟化软件

VMware vSphere则是一个具体的虚拟化方案

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值