成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

離線網絡環境下一鍵式部署

開發 開發工具
在這個互聯網無處不在的時代,網絡安全尤為重要,特別是在金融和電信領域,出現網絡安全問題將會帶來不可估量的損失。本文通過部署一套復雜系統為例,來描述如何在封閉網絡環境下實現一鍵式部署。

關鍵詞

封閉網絡:一個相對封閉的網絡環境,僅可以使用有限的資源如:maven鏡像倉庫、Centos/Ubuntu源等,無法連接互聯網的網絡環境。

一鍵部署:這里所說的“一鍵式部署”不僅僅是指這樣的場景:“編碼 --> 測試 --> 提交--> CI/CD --> 部署完成”。這里更多的是在描述:“在一個離線的網絡環境下,運行一個deploy.sh的文件,就可以看到所有基礎設施服務如:Nexus、Gitlab、Mongodb等已部署完成,然后在你編輯業務代碼并提交至遠程倉庫時,會觸發CI、編譯、測試、打包、部署,至此所有的業務模塊部署成功”,實現基礎設施即代碼。

背景

在這個互聯網無處不在的時代,網絡安全尤為重要,特別是在金融和電信領域,出現網絡安全問題將會帶來不可估量的損失。

基于對數據安全性、保密性和獨立性的考慮,為了更好地提供服務,同時有效地保護內部網絡的安全,我們需要將這些對外開放的主機與內部的眾多網絡設備分隔開來,制定安全策略限制互聯網連接。這樣便能在對外提供友好服務的同時,***限度地保護內部網絡,這也導致了內網無法連接互聯網而形成一個“封閉網絡”。

[[216526]]

痛點

我們通常會有這樣的需求:在一個無法連接互聯網的環境下setup一套dev、qa、staging包括搭建CI等環境來供不同的角色使用,但是由于安全策略或其他安全限制導致一些基礎服務無法從互聯網獲取,如Kubenetes、Mongodb、Kafka等基礎組件服務,這就給自動化部署和持續交付帶來了不便,特別是在系統對第三方服務依賴較多的情況下。

本文通過部署一套復雜系統為例,來描述如何在封閉網絡環境下實現一鍵式部署。

解決方案

基于最主要的原因: "更輕松的遷移和擴展", 我們使用Docker來部署基礎組件服務。

對于一個封閉的網絡環境來說,要獲取基礎服務鏡像如上文提到的Mongodb鏡像是不可能完成的任務。當然,我們可以使用docker save將構建好的鏡像保存成tar包,使用U盤等介質將tar包復制到內網然后使用docker load命令還原鏡像。

對于較復雜(依賴相對較多的基礎組件)的系統來說,如果每個組件都如此操作將會帶來很大的工作量,并且更容易出錯,對于后期維護來說也是一個很大的挑戰。所以使用Nexus是一個很好的選擇,將Nexus作為Docker倉庫保存所有的基礎組件鏡像。 這樣不僅可以解決離線網絡無法下載安裝包的問題,同時可以簡化配置,并保持內網環境與開發環境的一致性,給一鍵式部署提供了前提。

解決了網絡問題,接下來就是部署和配置管理。同樣的道理,如果每個基礎服務都需要手動部署往往比較耗時,難以實現故障排查,并且可能帶來潛在錯誤。所以我們需要一個自動化部署工具來提高工作效率,降低維護成本。

經過對主流的自動化工具做橫向對比,最終選擇使用Ansible作為配置管理和自動化部署工具。那么Ansible是什么?下文會給出詳細描述。

解決了上述問題,就可以實施離線網絡自動化部署了,將整個過程分為3階段,依次是:

  • Base Deploy。主要部署所有服務所依賴的基礎組件Docker、Nexus和Gitlab,Docker作為基礎平臺,Nexus和Gitlab也部署在Docker平臺上,Nexus作為私有Maven倉庫和私有Docker倉庫,Gitlab作為私有遠程代碼庫。
  • Infrastructure Deploy。此階段主要使用Ansible部署集群所依賴的基礎服務如Kubernetes(Pass平臺)、Kafka和Mongodb等服務。
  • Business Deploy。***一個階段測試持續集成和持續部署的階段,使用GoCD作為CI工具,在CI上實現業務服務模塊的自動化部署。

實踐如下圖所示:

1. Base Deploy

如上文所述,使用Nexus作為私有的Docker Registry和Maven Repository,Nexus是倉庫管理器,它極大地簡化了自己內部倉庫的維護和外部倉庫的訪問。利用Nexus你可以只在一個地方就能夠完全控制訪問和部署在你所維護倉庫中的每個Artifact。

Nexus存儲著所有基礎設施的鏡像文件,如Kubernetes、Mongodb、Zookeeper和Kafka的鏡像等,同時需要一個Nexus鏡像文件用來部署Nexus。為Infrastructure Deploy提供基礎環境和部署中所有的依賴組件。

同時為了方便Nexus的遷移和維護,我們將Nexus也部署在Docker平臺上。使用一個簡單的Shell腳本完成Base Deploy,一次部署Docker、Nexus和Gitlab(Gitlab作為私有的git倉庫)。Deploy.sh 代碼如下:

  1. #!/bin/bash 
  2. function init_docker {...} #安裝docker 
  3. function load_images {...} #加載docker容器 
  4. function run_service {...} #啟動nexus、gitlab等服務 
  5. function upload_nexus_data {...} #上傳nexus數據 
  6. function upload_gitlab_data {...} #上傳gitlab數據 
  7.  
  8. for i in ${HOST_LIST[@]};do 
  9.   init_docker $i 
  10.   upload_data $2 
  11.   run_service $1 
  12. done 

PS: 運行deploy.sh 之前所有主機需要配置ssh public key登錄, 避免自動化過程中提示輸入密碼。

運行deploy.sh即可部署Nexus和Gitlab。Nexus如下圖所示,可以運行docker pull 獲取所有組件的鏡像包括kubernetes、ansible等 。

運行deploy.sh即可部署Nexus和Gitlab

Git Lab如下圖所示,也可以運行git clone 獲取所有的代碼倉庫包括Infrastructure Deploy的部署腳本。

Git Lab

如果條件允許可以為Nexus和Gitlab創建DNS記錄,或者可以通過修改本地/etc /hosts文件來通過使用特定域名訪問Nexus和Gitlab,如下文中使用的nexus-server訪問Nexus、gitlab-server訪問Gitlab。

2. Infrastructure Deploy

上文提到我們使用Ansible來實現基礎設施的自動化部署,我們知道目前主流的自動化部署工具包括Puppet、Chef、Ansible。 對比來說,Chef對于開發人員要更加“友好”,而Puppet則更適合運營和系統管理類的任務,但是我們選擇Ansible,主要的原因是:

  • Ansible是通過ssh進行所有操作,不需要在遠程服務器上安裝客戶端,而使用Chef引擎和Puppet時,都需要在其管理的服務器上安裝客戶端(雖然Chef聲稱其可以不安裝,但其無代理agent-less版本支持的功能十分有限),Ansible則會充分利用現有的東西,而且沒有其他任何要求[注]。
  • 通俗的說Ansible的部署過程就是在一臺或者幾臺服務器上,執行一系列的命令而已。Ansible playbook是Ansible更為強大的配置管理組件,實現基于文本文件編排執行的多個任務,且多次重復執行。所以我們選擇Ansible作為配置管理和自動化部署工具。

Ansible工作原理如下圖:

Ansible工作原理如下圖:

(圖片來自:Ansible官網)

使用Ansible使整個過程透明化,每個部署工作都實現為獨立的ansible playbook role,這樣可以在不同的環境里部署指定的服務,提高部署代碼的復用性。同時與Nexus配合使用,形成自動化部署的閉環,不依賴網絡即可提供部署中依賴的所有組件,所有的應用程序都會以Docker image的方式提供。

在離線環境下使用Ansible是完全可行的,但是離線環境也無法直接安裝Ansible,為了統一管理我們也使用Docker鏡像來提供Ansible。在內網成功部署了Nexus后,使用docker pull nexus-server:5000/:即可獲得Ansible鏡像。同時Ansible所需playbook role文件則保存在Gitlab中,執行git clone gitlab-server:2289/.git 下載deploy代碼庫。 deploy代碼庫結構如下:

  1. ├── environments 
  2. │   └── uat 
  3. │       └── inventory 
  4. │   └── dev 
  5. │       └── inventory 
  6. ├── roles 
  7. │   ├── docker 
  8. │   ├── kubernetes 
  9. │   ├── mongodb-cluster 
  10. ├── docker.yml # 在PaaS集群所有VM節點安裝docker 
  11. ├── kubernetes.yml # 部署PaaS平臺 
  12. ├── mongodb-cluster.yml # 部署mongodb sharding 集群 
  13. └── all.yml 
  14.  
  15. # all.yml 一鍵部署所有的基礎設施 
  16. --- 
  17. - include: mongodb-cluster.yml 
  18. - include: kubernetes.yml 
  19. - include: docker.yml 

運行以下命令即可實現基礎設施的一鍵自動部署:

  1. docker run --rm -v WORKDIR:$(pwd) ansible:2.2.1 ansible-playbook -i uat/inventory all.yml 

3. Business Deploy

***Business Deploy就是標準的持續集成/交付過程,使用GoCD作為CI/CD工具,完成業務模塊的持續集成和部署。關于持續集成和持續交付,請參考https://en.wikipedia.org/wiki/Continuous_delivery/

總結

玩過紅警的朋友應該知道,在開局的時候你只有一個基地,需要采集資源、升級建筑、造兵攻打直到消滅所有的國家,一切都是自給自足。當然紅警是可以離線玩的, 上文描述的過程和紅警很類似,你只有一個基地,就是將所有部署所需要的文件如Nexus data、Gitlab repo等按照特定的目錄結構打成的zip包,使用U盤或者其他存儲介質拷貝到離線的網絡環境,就像雙擊紅警基地一樣,運行deploy.sh即可一鍵部署所有的基礎設施服務。

對于所有組件的升級,也比較容易,我們只需要將升級后的Docker鏡像拷貝到內網,重新執行Ansible腳本即可實現基礎服務的更新。

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2023-06-15 10:00:00

Jenkins任務操作

2021-06-30 22:03:05

數據庫交付設計

2024-04-08 13:59:03

大模型Replicate

2015-02-09 15:25:52

換膚

2010-11-08 13:58:14

Check Point互聯網安全移動訪問軟件刀片

2025-04-29 10:13:58

2012-07-03 16:03:07

2015-06-09 10:36:13

Cloud FoundAzurePaaS

2023-09-08 23:30:19

2015-07-30 16:18:14

企業網D1Net

2025-02-06 09:22:28

2023-09-12 07:06:04

2015-11-03 15:29:49

ONOS開放網絡操作系統SDN

2018-11-27 12:25:21

華為

2022-04-29 09:55:55

NocalhostKubeVela混合云

2014-07-04 16:23:15

開發者CrossApp

2019-02-19 09:31:49

無線網狀網絡APWi-Fi

2012-07-24 10:53:41

掃描儀

2023-09-14 20:55:52

NodeJSDocker

2025-04-17 04:00:00

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91超碰caoporn97人人 | 欧美1区2区 | 国产一级在线 | 69性欧美高清影院 | 国产在线一级片 | 夜色www国产精品资源站 | 天堂成人国产精品一区 | 一区二区小视频 | 国产精品久久久久久久久久久久久 | 久久精品免费 | 久久综合99 | 日日干夜夜操天天操 | 欧美视频成人 | 日韩成人在线播放 | 亚洲精品视频免费观看 | 麻豆精品一区二区三区在线观看 | 免费国产成人av | 另类二区 | 综合激情久久 | 国产精品99精品久久免费 | 久久av网| 黄色日批视频 | 日韩亚洲视频 | 婷婷久久久久 | 男人的天堂在线视频 | 五月婷婷激情网 | 久久精品亚洲国产奇米99 | 黄色毛片在线观看 | 亚洲在线视频 | 青草青草久热精品视频在线观看 | 欧美一级免费看 | 男女视频在线免费观看 | 少妇精品亚洲一区二区成人 | 亚洲人成网站777色婷婷 | 天天干在线播放 | 国产小视频在线观看 | 欧美激情精品久久久久久 | 久久久久亚洲 | 亚洲一区视频在线 | 91欧美精品成人综合在线观看 | 伊人免费在线 |