使用Vault
以前曾经介绍过关于 KMS的用法 ,其中,提到了它的优点和用处,我们使用的场景有如下几点:
如果脱离AWS,选择好像还真是不太多,Harshicorp的 Vault 是我仅知道的一个, RatticDB 算半个吧。
Vault提供了对token,密码,证书,API key等的安全存储(key/value)和控制,。它能处理key的续租、撤销、审计等功能。通过API访问可以获取到加密保存的密码、ssh key、X509的certs等。它的特性包括:
因为使用Vault的目的是为了
Vault存储[backend( https://wwwvaultprojectio/docs/secrets/indexhtml)] 可以是
我在用Docker启动Vault服务的时候使用的Production模式,为了简单使用了磁盘作为存储,但是为了persist,所以将valut的文件存在了docker volume上面。
docker-compose 文件如下:
创建volume,启动vault服务器,配置通过环境变量 VAULT_LOCAL_CONFIG 传入。
从本地的 8200 端口应该就可以访问到了:
下面的API请求可以对Vault进行初始化,两个参数的意思将master key分成几份以及还原,这里就用1吧。
返回结果:
第一个是master key的public key,第二个是unseal key,最后一个是root token。unseal vault之后才能验证进行具体的操作。
结果:
为了安全起见,我们可以用root token创建出有限权限的新token,来继续后面的操作。假设这个token可以读写的路径为 secret/ 。在这个之前我们先创建访问这个路径的policy:
对应的创建 user-policy :
然后我们分别创建两个token,admin token和 user token:
这样就有了对于 secrets/ 路径下进行读写的两个 token,可以尝试去admin的token去添加新的键值对:
这样就有了基本的权限管理。假设vault服务器和应用服务器或者CI的服务器部署在同一私有网络中,应用服务器和CI slave是不可以ssh的,那么通过应用服务器或者CI在启动的时候通过HTTP请求,利用读权限的 user-token 就可以拿到API-TOKEN,同时没有暴露给外部。
AWS的EC2 instance上可以绑定 instanceProfile , instanceProfile对应的是IAM的role,这个role可以设置对AWS资源的访问权限,比如对S3某个bucket的写权限,或者对Dynamodb的写权限等。Vault提供的AppRoles的功能比 instanceProfile 要差很多,不过确实可以将机器和一定权限的Role绑定起来,控制访问的范围。
允许使用approle的验证方式同时创建一个给CI slave使用的role:
下面的API请求可以拿到 role-id ,以及根据 role-id 生成 secret-id ,利用它们可以登录获得从vault读取数据的权限:
使用 secret_id 和 role_id 联合登录,拿到新的token:
然后利用 client_token 去读取前面写入到vault中的search api token:
AWS的EC2 instance的服务器,在启动时,可以绑定一对ssh keypair,以方便用户使用缺省的 ec2-user ssh到服务器上。从最佳实践的角度来说,应该把服务器当做immutable的设施,不允许ssh。但是现实比较嘲讽,这样的需求仍然存在,那么我们可以换种方式,尽量做好ssh key的管理。
比如,对于每个新启动的服务器,动态的生成一对ssh keypair,只应用在这台服务器上,服务器销毁后,吊销key pair。
Vault提供了ssh keypair的管理功能,利用这个功能我们可以对key的生命周期的管理。它支持两种方式:
要让vault发放keypair, 需要先注册一个private key,这个key必须有服务器的管理权限之后,你需要创建一个role,包括一些限定条件,如admin用户的名字,缺省用户,目标服务器的IP地址应该匹配的CIDR地址,具体过程如下:
整个的过程大概是这样,vault利用注册的private key登陆到目标服务器上,然后将新生成的key pair中的public key写入到目标服务器的 authorized_keys 文件中。在你想登陆到服务器上的时候,用对应的client token验证,获取private key,ssh登陆。key有过期时间,过期之后就被revoke了。
我觉得全站https困难之一就在于PKI的管理,今年出现过几次certficate过期导致的产品环境的问题,还好及时的切换到了AWS Certificate Manager,免费而且到期自动续租,基本上不用担心管理的问题了。而我们原有的内部PKI管理要稍微麻烦些,需要用自己业务线的LOB Intermediate CA去签发新的certs,运行一些自动化的脚本,还得从RatticDB里面找到对应的private key。
但是如果基础设施不是基于AWS,好像就没有很合适的工具了,只能自己维护PKI,Vault也提供了PKI的管理,可以在这方面提供帮助。考虑环境的一致性,开发、测试以及staging也需要certificate,我觉得这个功能是有意义的。
Vault会安全的保存Root CA 的private key。 可以通过http请求拿到ca的pem文件。
需要给Vault配置访问CA和CRL(certificate revocation list)的地址。
创建intermediate CA
把这个csr内容存在 example_lobcsr 文件中,请求root ca签发这个intermediate ca。
得到Root CA的签发过的intermediate CA certs后,保存为文件,导入。最后就是要设置CA/CRL,和上面相同。
在开始给server签发certs前,需要创建role,之后就可以签发了。
拿到private key和crt就可以放在服务器上测试了,感觉用这个 grunt-connect-proxy 测试起来可能会快点。
Vault还有一个我觉得很好的特性是可以将LDAP作为auth的backend,感觉维护的压力又小了很多:) 剩下的特性大家可以自己尝试,我们也正在考虑把替换RatticDB保存一些private key之类的credential,下次的security meetup上面我可以展示下spike的成果……。
运维人员的工作每天基本上都是在检查问题,枯燥但又重要, 要是你的某一个环节出现问题并没有及时发现问题,对于企业来说损失可能非常大,基本上运维人每天的工作我罗列了下,有这几种:
1、负责服务器的硬件配置、软件安装、机房上下架等技术维护工作
2、负责虚拟化技术产品物理机配置、管理和日常运行监控和维护
3、负责独立主机或虚拟应用产品的开通使用、日常维护、故障诊断和排除
4、提供独立主机或虚拟应用客户产品操作和应用方面的技术支持
5、监视分管的服务器,及时发现问题,并积极解决问题
现在信息化数字时代,单靠人工去检查出现错误几率会很大,而且有的运维人还不只管理两台服务器,像我们公司的运维每人至少要管理30台服务器,这样子单靠人工运维耗费的人工成本和时间是非常大的,所以还是推荐你用运维工具吧,比如云帮手()1支持跨云商批量管理服务器
2兼容性强大,兼容市面基本所有的云商云主机,兼容操作系统;
3操作简单,可视化界面预览资源、一键修复、一键部署;
4 可以远程登录云主机FTP桌面,处理云主机上的文件;
5监控和资源还有告警功能,这个是挺好的,不用盯着看;
6系统修复功能,这个是挺实用也比较必须的;
7免费使用。总得来说功能还是挺全的,不存在需要又要另外找软件的尴尬。
你好,很高兴回答你这个问题。从运维的角度来讲,服务器的数量少并不意味着我们的运维工作就非常轻松,相反我们更应该重视此阶段的工作。
我们可以从以下几方面来开展我们的运维工作:
1应用服务器
我们可以从当前服务器中找出 至少2个节点装Vsphere虚拟化,建立一个数据中心、集群 ;如果你的服务器有多网卡和SCSI,还可以做一些更高级的应用,如vmotion、负载均衡、高可用等。当虚拟机或服务器故障,可以 实现故障自动转移,有效的避免了单节点的故障,提供服务器的容错率 。
我们可以在新建的虚拟机部署Web、API等各种应用,而且 虚拟机可以在vCenter图形化界面下统一管理 。这一般是中小公司的在服务器方面的解决方案。
当然,我们对docker比较熟悉,可以使用一套docker解决方案,这比Vsphere更能节省一部分资源。当然这个需要的技能要求也比较高,需要我们不断积累。
2数据库服务器
数据库服务器在此我们单独拿出来,是因为数据库对服务器性能、磁盘IO要求比较高,不太建议使用虚拟机,当然这需要根据业务的实际情况来做选择。 数据库我们需要通过一主一从、一主二从的方式实现高可用,来避免数据库单点问 题,我们还可以选择合适的proxy来进行读写分离、读负载均衡等。另外还要考虑数据的本地备份、异地备份,来确保数据可恢复。
3系统监控
当我们在应用服务器和数据库服务器上线一套系统后, 我们需要通过监控掌握从服务器硬件、基础状态、应用、数据库等从下到上的运行状态 ,以便我们能够对告警及时做出响应。考虑到报警的及时性,我们需要监控接入多种报警渠道,如微信、钉钉、邮件、短信等。监控的目的是发现问题、解决访问,因此我们需要踏实的做好这一步,才能为我们的业务保驾护航。
好了,其实不管服务器多少,我们都需要扎实的把基础打好,这样才能以不变应万变面对各种情形。希望我的回答能够帮到你。
题主没有详细说明具体应用系统的功能,比如是否单一的Web服务?有没有微服务、分布式、集群化扩展的潜在需求?
通常来说,建议使用云服务自动化运维。云服务已经成为IT技术的核心基础设施,充分利用云服务带来的弹性和分布式优势,赋能自动化运维。
一,自动构建系统
如果需要构建应用,那么就建议配置使用CI/CD持续化集成和自动化部署,比如常用的Jenkins,配置Git代码提交时触发构建,然后自动部署。
二,日志收集处理系统
1,ELK是常见的日志收集管理系统,包括ElasticSearch, LogStash, Kibana三个服务,架构示意图如下:
2,在ELK系统中,Kibana是一个图形化展示工具,配置查询条件,运维人员随时可以搜索指定日志信息,分析处理故障。
三,服务监控
1,云监控CloudMonitor
主流云服务商都将监控功能集成到了基础架构中,以阿里云为例,云监控提供了多种配置,多维度全方位监控。
比如配置CPU使用率到达80%时,自动触发动作,增加服务器实例,同时邮件通知运维人员。
2,应用监控
以监控宝为例,配置服务地址,选择分布在不同地区和运营商的监测点。当监测点不能正常调用配置的服务地址时,将收到警告信息,可以选择邮件、短信、电话等通知方式。
四,潜在的系统扩展需求
1,是否集群化部署?需要AutoScaling自动伸缩吗?
小型化和集群化并不冲突。如果采用集群化部署,可以配置触发条件,满足时自动增加或者释放服务器资源。比如当CPU使用率达到75%或者内存占用率达到75%时,根据配置好的服务器和数量,自动触发。
2,是否使用Docker容器技术?
Docker将应用以及依赖打包到一个可移植的镜像中,可以实现虚拟化,有助于快捷高效的交付应用,结合Docker-compose资源编排,快速实现自动部署更新,不再需要常用的Jenkins构建服务器。
机器数比较小的话,你可以用云的服务器,这样可以节省好多钱。找一个专门的运维,还不如让开发自己来搞,因为机器少运维他也应付得过来。现在都在搞云计算了,把你的机器放上阿里云或者腾讯云,你自己维护好很多,包括网络贷款都很容易扩容。上面这个我说到的只是说建议你如果你已经是自己的机器了。我建议你从我下面所说的来搞。
认为的整个过程的话一般分为三个阶段,第一的话是手工阶段,什么东西都是手工搞。
第2个阶段就是脚本阶段了,本来手工搞的东西全部脚本化。
第3个阶段就是平台化了,平台化了之后,所有东西都在页面上完成系统完成,不需要人工来干预,甚至不用运维来搞。
有一些人说既然认为就是最后的一个阶段,但是这个很不成熟。所以我就不说了。
针对你这个机器数少的,你可以手工认为,或者说用脚本认为都没问题。
在合适的阶段做合适的事情就是最好的。所以我建议你手工运维或者脚本运维。
我们项目用的 wgcloud运维监控系统 ,它前身是开源项目,后来推出的商业版,也有免费版
wgcloud运行很稳定,性能很好,部署和上手容易
wgcloud支持主机各种指标监控(cpu状态/温度,内存状态,磁盘容量/IO,硬盘smart监控,系统负载,网卡流量,硬件系统信息等),数据可视化,进程应用监控,大屏可视化,服务接口检测,DOCKER监控,自动生成网络拓扑图,端口监控,日志文件监控,web SSH(堡垒机),指令下发执行,告警信息推送(邮件钉钉微信短信等)
可以装虚拟机代替,在同一个局域网情况下
找服务商外包服务,或者网上托管也不贵收费
服务器数量比较少,比如10台服务器,基本可以不设置运维岗位了,后端开发人员 或者架构师就能搞定。
我就是那种曾经在创业的小公司待过的开发人员,开发,运维我都干了。
但是想想如何更科学更高效的运维还是很有必要的。
运维的目的
软件系统的运行时环境:即公司的业务产线,靠它创造业务价值,这个是最核心的功能诉求。
实时监控系统: 任何时候都要对当前公司的产线的压力一清二楚,有问题功能随时解决,有性能问题及时扩容或者回收资源
降低服务器成本:在业务萎缩的情况下,准确评估哪些资源可以回收,降低服务器的支出
这个是当时我认为的运维的三个主要目的。
运维方案开发半路出家,当时采用的是shell+python+ansible+jekins+elk的方式
首先,我会及时的更新业务产线的物理架构图,根据架构图来规划服务器的资源使用。
比如多少个web服务,数据库多少,zk,kafka,redis集群怎么分布。
集群部署一般是放在多个服务器上的,这个时候ansible就派上用场了。
jekins主要用来自动发布更新程序已经做定时回收磁盘的任务。
elk主要用来做应用的日志系统和监控告警; 可以通过看板随时知道产线的请求数量和并发数量;
以上的运维方案适用于小公司。运维工程师看到了可以补充
搞个zabbix刷
数量少。如果配置好可以虚拟化。然后跑容器
if ( ! function_exists('ip'))
{
/
获取IP地址
@param string $format 返回IP格式,(默认)表示传统的127001,int或其它表示转化为整型,便于存放到数据库字段
@param string $side IP来源,(默认)表示客户端,server或其它表示服务端
@return string or int
/
function ip($format = 'string', $side = 'client') {
if ($side === 'client') {
static $_client_ip = NULL;
if ($_client_ip === NULL) {
// 获取客户端IP地址
$ci = &get_instance ();
$_client_ip = $ci->input->ip_address ();
}
$ip = $_client_ip;
} else {
static $_server_ip = NULL;
if ($_server_ip === NULL) {
// 获取服务器IP地址
if (isset ( $_SERVER )) {
if ($_SERVER ['SERVER_ADDR']) {
$_server_ip = $_SERVER ['SERVER_ADDR'];
} else {
$_server_ip = $_SERVER ['LOCAL_ADDR'];
}
} else {
$_server_ip = getenv ( 'SERVER_ADDR' );
}
}
$ip = $_server_ip;
}
return $format === 'string' $ip : bindec ( decbin ( ip2long ( $ip ) ) );
}
}
HUDSON,日本老牌游戏厂商,成立于1973年5月18日,总公司位于日本东京,是Konami(コナミ)集团的成员之一。以制作和开发休闲游戏及手机游戏为主。
主要作品有炸弹人系列、桃太郎电铁系列、淘金者系列、天外魔境系列、当然还有广为中国玩家熟悉的高桥名人の冒险岛系列,此外任天堂公司还请Hudson公司代为开发马里奥聚会系列。
扩展资料:
Hudson公司最初由工藤裕司和工藤浩两兄弟创办。曾在20世纪80年代末、90年代初开发了大量深受玩家喜爱的运行在任天堂家用游戏机(FC/Super FC/GameBoy)上的游戏,盛极一时。Hudson公司于2000年12月在日本大阪证券交易所上市。
Hudson作为一种革命性的开放源码CI服务器,它从以前的CI服务器吸取了许多经验教训。Hudson最吸引人的特性之一是它很容易配置:很难找到更容易设置的CI服务器,也很难找到开箱即用特性如此丰富的CI服务器。
-HUDSON
要注册网站域名,购买或者租用到网站的空间。上传内容,上传图文和视频等内容就可以创建自己的网站了。
现在市场上很多各式各样的网站搭建工具,网站制作平台,任意找一个自己用起来易上手的工具即可。网站搭建工具中一般都有模板提供,可以按照行业、风格、类型来选择自己中意的模板。选好后就可以套用,网站随即成功创建。
对于Qt技术栈,能走各种工具和技术来实现CI/CD。以下是一些常见的做法:
1、版本控制系统:使用像Git这样的版本控制系统来管理代码,并确保团队成员可以共享和协作。
2、持续集成工具:使用诸如Jenkins、GitLabCI、TravisCI等持续集成工具,将代码自动构建、编译和测试。
3、自动化测试:编写自动化测试用例,确保在每次提交代码后能够自动运行测试,并及早发现潜在的问题。
4、容器化技术:使用容器化技术,如Docker,将应用程序及其依赖项打包成一个镜像,使得在不同环境中的部署更加简单和可靠。
5、部署和交付流程:通过自动化脚本或工具,将应用程序部署到目标环境,例如云服务器、物理服务器或移动设备。Qt是一个跨平台的应用程序开发框架,最初由挪威公司Trolltech开发。它提供了一套丰富的工具和库,使开发者能够创建高性能、交互丰富的应用程序。
ci团队是指持续集成。
持续集成(Continuous integration,CI)是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。
持续集成要素:
统一的代码库、自动构建、自动测试、每个人每天都要向代码库主干提交代码、每次代码递交后都会在持续集成服务器上触发一次构建、保证快速构建、模拟生产环境的自动测试、每个人都可以很容易的获取最新可执行的应用程序、每个人都清楚正在发生的状况、自动化的部署。
持续集成的好处:
提高开发效率,把工程师从繁琐的任务中解放出来,包括代码编译、数据库集成、测试、审查、部署及反馈。通过自动化的持续集成可以将这些重复的动作都变成自动化的,无需太多人工干预,从而提高工作效率。
减少风险,多次自动化的集成和相应的测试,有利于出现问题及时修复,让产品可以快速迭代,同时还能保持高质量。
CI是英文Corporate Identity 的英文缩写,直译为“企业形象规范体系”。这是指一个企业为了获得社会的理解与信任,将其企业的宗旨和产品包含的文化内涵传达给公众,而建立自己的视觉体系形象系统。
0条评论