精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一種新的進入容器的方式: WebSocket + Docker Remote API

云計算 虛擬化
容器是基于操作系統內核的一種輕量級的虛擬化技術。其可以類比于虛擬機,但其本身并不是虛擬機。

眾所周知,容器是基于操作系統內核的一種輕量級的虛擬化技術。其可以類比于虛擬機,但其本身并不是虛擬機。在傳統的虛擬機使用場景中,每個用戶都會通過堡壘機,根據自己被分配的權限,登錄某些機器的某些賬號。當應用部署逐漸轉移到基于容器技術的PaaS平臺上后,讓用戶進入容器進行觀察、調試應用已經成為了PaaS平臺的一個重要且必備的功能。

遠程進入容器功能的傳統實現方式是基于虛擬機的思想,在每個容器中啟動一個sshd進程。由于容器PID為1的進程的特殊性,為了保證容器不停,容器的ENTRYPOINT需要設置為類似于Supervisord這樣的進程管理程序。在這種多進程容器的使用場景中,用戶通過ssh-client指定容器的IP遠程連接到容器,讓用戶感覺到自己好像就在使用虛擬機。但是,這種方案會帶來以下問題:

  1. 權限管理。如何控制哪些用戶能夠登錄哪些容器?如何和平臺已有的權限管理系統集成?這種情況往往都需要通過堡壘機系統控制。而在PaaS中,引入單獨的堡壘機系統會增加PaaS的復雜度以及維護成本。
  2. 登錄方式選擇。無論使用密碼還是私鑰驗證登錄,容器內的密碼或者authorized_keys的管理都需要通過加入額外的程序解決,無疑會增加容器的復雜度。同時還要面對同權限容器的密碼或authorized_keys的一致性問題。

基于以上問題,在我們的LAIN平臺中,設計出了基于WebSocket協議與Docker Remote API的遠程登錄方案。LAIN(https://laincloud.com)是一個基于Docker的PaaS。其面向技術棧多樣尋求高效運維方案的高速發展中的組織,DevOps人力缺乏的startup以及個人開發者。LAIN通過統一高效的開發工作流,降低應用運維復雜度;在IaaS / 私有IDC裸機的基礎上直接提供應用開發,集成,部署,運維的一攬子解決方案。

該方案的整體架構圖如下:

從圖中可以看出,在LAIN中實現容器遠程登錄支持需要以下兩個組件:

1. Entry應用。負責如下工作:

  • 調用Docker Remote API
  • 通過WebSocket 傳遞stdin,stdout和stderr。
  • 根據protobuf3協議對各類消息進行序列化與反序列化。
  • 對用戶登錄的鑒權。
  • Entry是基于Go語言開發的,并依賴如下代碼庫:
  • github.com/gorilla/websocket:WebSocket的服務端實現。
  • github.com/fsouza/go-dockerclient:Go語言的Docker客戶端。
  • github.com/golang/protobuf/proto:protobuf協議的支持庫。

2. 基于命令行的客戶端。負責如下工作:

  • WebSocket連接請求的發送。
  • 監聽鍵盤輸入、窗口變化事件以及WebSocket返回的stream。
  • 將遠端的stdout,stderr輸出到本地終端的標準輸出和標準錯誤。

Entry的工作流程

通過命令行客戶端遠程登錄容器的過程及其實現如下:

  1. 用戶通過客戶端命令向Entry應用發送WebSocket連接請求。
  2. Entry應用接收到用戶請求,得到請求Header中的access_token以及要進入的容器信息,通過調用LAIN的console接口判斷該用戶是否有權限進入容器。如果沒有權限,則直接通知客戶端鑒權失敗,本次連接結束。
  3. 如果通過了權限驗證,則WebSocket連接會被建立。緊接著Entry會去調用 execCreate 這個Docker Remote API。在調用時,需要指定Tty,AttachStdin、AttachStdout和AttachStderr參數均為true,Cmd參數為bash,這樣才能獲得bash進程的標準輸入輸出和錯誤。
  4. 如果調用execCreate成功,調用請求會返回該Exec的ID,Entry會繼續根據這個ID調用execStart接口。在調用時,需要指定Detach和Tty為false,這樣才能連接到bash進程的標準輸           入輸出和錯誤。調用execCreate成功后,會返回一個HTTP的stream。在Entry中則通過3個goroutine分別處理stdin,stdout和stderr。
  5. 客戶端會同時監聽WebSocket連接與鍵盤輸入,對于WebSocket返回的Message,客戶端會通過Entry制定的protobuf3消息格式反序列化出消息結構,并根據消息的類型,將數據發送到本地終端的stdout或stderr。對于鍵盤輸入,客戶端會將輸入內容封裝,經過protobuf3序列化后,通過WebSocket發送給Entry應用,Entry應用經過反序列化后,將輸入發送給bash的stdin。

以上就是Entry的工作原理。從中我們可以看出,Entry已經很好地解決了傳統ssh-client登錄所遇到的問題:

  • Entry通過調用console的接口完成了身份驗證工作,由于所有的權限都被console統一管理,因此Entry不需要自己維護權限信息,即Entry本身是無狀態應用。這種應用的優勢在于可以低成本擴容,用以應對多并發的場景。
  • Entry通過Docker Remote API連接容器,這樣只要被連接的容器內可以啟動bash進程,用戶就可以通過客戶端連接到該容器。容器無需啟動sshd進程,也就無需再以supervisord等進程作為entrypoint。更多的容器就可以以單進程的形式運行,降低了容器本身的維護成本。

Entry的設計細節

俗話說,細節決定成敗。為了提高使用體驗,Entry應用在設計與實現時考慮到了很多細節,在這里拿出來與大家分享。

1. 連接保持:當WebSocket連接在一段時間內沒有數據傳輸后,會自動斷開。這給用戶的使用帶來了極大的不便。Entry在設計時,對每一個建立的WebSocket連接,會有一個單獨的goroutine每隔10秒發送一個PING類型的Message(不是WebSocket協議中的PingMessage),這樣保證了在不主動斷開的情況下,用戶和容器可以一直保持連接。

2. 使用protobuf3制定消息格式并實現序列化與反序列化:使用protobuf3可以方便地定義與擴展自己的消息格式,同時在傳輸時能減小一定的帶寬占用。

Entry的消息格式有兩類,RequestMessage和ResponseMessage。客戶端發送的請求都屬于RequestMessage,服務端返回的數據都封裝在ResponseMessage中。其中:

  • RequestMessage類型包括:PLAIN和WINCH。PLAIN就是用戶通過鍵盤的輸入。WINCH則是終端窗口大小改變的消息,內容中會攜帶新窗口的rows和cols。
  • ResponseMessage類型包括:STDOUT, STDERR,PING和CLOSE。STDOUT和STDERR代表了該消息內容是來自于標準輸出還是標準錯誤。PING則代表是連接保持專用的信息。CLOSE則是連接將要斷開前Entry返回的信息,會包含錯誤原因或者正常退出的信息。

3. 監聽終端窗口大小改變:默認的終端窗口大小都是80 * 24,但該標準在當前的日常使用中早已過時。如果在一個全屏的terminal中仍然使用該大小顯然是不合理的。因此客戶端在成功連接到容器后,客戶端會首先根據當前的terminal大小發送一個WINCH類型的RequestMessage,Entry收到后會調用ExecResize接口,這樣之后所有的stdout和stderr都會按照新的終端大小顯示。客戶端還會監聽窗口大小改變的事件,如果發生改變,同樣還會發送WINCH到Entry。

4. UTF-8編碼檢查:客戶端和服務端在發送消息內容時,都會對緩沖區內要發送的數據做UTF-8編碼檢查。如果發送數據不符合編碼規則,則會先發送最長符合的緩沖區前綴,后面剩余的數據則被移到緩沖區的開始,待下次發送。這種設計是為了處理中文等非latin1字符的顯示問題。避免因為非法的UTF-8編碼造成終端顯示亂碼。

Entry存在的問題

非正常退出時,bash進程不會結束,而是會以sleep的狀態殘留于容器中。如果一個容器有過多的bash進程,很可能因為cgroup的內存限制導致容器退出。目前官方并沒有給出類似execKill的API,只能期待在以后版本的docker中能解決這個問題。

Entry應用依賴特定的LAIN客戶端。之前用戶只能通過lain enter命令進入容器。但是12月份后我們升級了console的前端,增加了web terminal功能。用戶只需要通過點擊容器的ID就可以打開一個含有terminal的web頁面,然后通過該web頁面與容器進行交互,不需要再安裝任何客戶端。在這里要十分感謝開源項目xterm.js(https://github.com/sourcelair/xterm.js),該項目基于JavaScript與CSS實現了一個近乎完美模擬xterm終端的插件。目前,console的web terminal可以支持Firefox和Chrome,但是無法支持IE和Safari。

總結

Entry是LAIN中一款設計較為精巧、技術含量較高的應用。其利用了WebSocket全雙工傳輸的特點,在單進程容器的場景下實現了對容器的遠程登錄,同時保證了登錄權限的控制。本文希望通過分享LAIN中Entry的設計與實現,為需要開發遠程登錄容器功能的PaaS同行提供技術方案參考。Entry已經開源,地址在(https://github.com/laincloud/entry),歡迎一起討論交流學習。

責任編輯:武曉燕 來源: 運維派
相關推薦

2020-12-16 10:12:52

大數據小數據人工智能

2023-03-07 15:08:57

2022-07-28 11:29:23

數據安全數據令牌化

2024-02-26 00:00:00

sessionredis項目

2018-12-14 14:30:12

安全檢測布式系測試

2016-12-23 21:11:05

深度學習思維方式大數據

2025-03-26 08:00:00

2020-09-09 10:44:35

5G網絡運營方式

2020-09-09 10:44:32

5G

2022-08-08 08:22:22

量子計算

2025-01-13 08:36:26

2010-11-05 10:15:42

云計算

2018-07-30 09:00:19

容器Docker鏡像

2023-01-26 23:46:15

2025-02-27 00:00:30

SpringJava方式

2013-07-05 13:23:43

蘋果

2013-03-12 14:07:06

Java編程

2019-11-22 09:21:17

技術研發數據

2017-02-20 09:00:49

2022-04-06 12:00:46

HEAT安全架構新威脅
點贊
收藏

51CTO技術棧公眾號

一本色道婷婷久久欧美| 九九九久久久久久| 日韩久久一级片| 三级国产在线观看| 三级精品在线观看| 中文在线不卡视频| 佐山爱在线视频| 天堂电影一区| 亚洲欧洲日韩av| 国严精品久久久久久亚洲影视| 丰满少妇xoxoxo视频| 欧美独立站高清久久| 精品欧美一区二区久久| 免费国产黄色网址| 麻豆av在线导航| av网站免费线看精品| 国产精品久久久久99| 麻豆国产尤物av尤物在线观看| 国产精品久久久久久久久久齐齐| 一级女性全黄久久生活片免费| 欧美日韩精品免费看 | 你懂的网址国产 欧美| 日韩av在线资源| 久久久精品视频国产| 在线能看的av网址| 亚洲一区二区三区在线看| 欧美最大成人综合网| 成人毛片在线精品国产| 久久福利视频一区二区| 91精品国产色综合久久不卡98| 日韩精品久久久久久久的张开腿让| 久久男人av| 日韩一区二区免费高清| 国产成人综合一区| aa国产成人| 一区二区三区中文在线| 在线丝袜欧美日韩制服| 欧美日本网站| 99久久国产综合精品麻豆| 成人欧美一区二区三区在线观看| 一道本无吗一区| 日韩精品一二三四| 日本aⅴ大伊香蕉精品视频| 国产无套粉嫩白浆内谢| 欧美日韩岛国| 欧美裸体男粗大视频在线观看| 精品日韩在线视频| 你微笑时很美电视剧整集高清不卡| 亚洲国产精品人人爽夜夜爽| 黄页网站在线看| 欧美少妇激情| 欧美日韩国产综合久久| 在线黄色免费观看| 91精品美女| 在线观看视频91| 最新中文字幕免费视频| 欧美123区| 欧美日韩国产精品成人| 超碰超碰在线观看| 成人a在线观看高清电影| 91久久久免费一区二区| 久草综合在线观看| 91亚洲精品| 欧美日韩一区二区在线观看 | 欧美精品一区视频| 久久久久亚洲AV成人无码国产| 91成人精品在线| 亚洲第一精品久久忘忧草社区| 欧美性生交xxxxx| 北条麻妃在线一区二区免费播放 | 欧美日韩一级二级| 国产视频1区2区3区| 午夜精品久久久久久毛片| 6080午夜不卡| 美女又黄又免费的视频| 久久激情av| 国产一区二区三区在线| www.xx日本| 66久久国产| 久久久欧美一区二区| 中文字幕在线观看视频网站| 日韩电影一区二区三区四区| 国产区精品视频| 精品黑人一区二区三区国语馆| 成人精品gif动图一区| 免费99视频| 男人天堂久久久| 亚洲一区视频在线| 免费在线观看的av网站| 视频欧美精品| 亚洲国产精品99久久| 日本欧美一区二区三区不卡视频| 91精品蜜臀一区二区三区在线| 久久久久五月天| 波多野结衣在线观看一区| 韩国理伦片一区二区三区在线播放| 成人动漫视频在线观看免费| 男人天堂亚洲二区| 中文字幕中文字幕一区| 97视频久久久| 四虎影视精品永久在线观看| 亚洲第一福利网| 成人18视频免费69| 国产精品嫩草99av在线| 国产精品视频自拍| 日日躁夜夜躁白天躁晚上躁91| 欧美激情中文不卡| 欧美大片在线播放| 亚洲精品伊人| 亚洲电影第1页| 糖心vlog免费在线观看| 亚洲少妇诱惑| 动漫3d精品一区二区三区| av女优在线| 天天影视涩香欲综合网| 午夜激情视频网| 国内精品视频在线观看 | 伊人久久青草| 在线手机中文字幕| 日韩三级在线观看| 手机看片国产日韩| 亚洲综合二区| 国产欧美日韩亚洲| 自由的xxxx在线视频| 欧美网站大全在线观看| 一级做a爰片毛片| 欧美激情 亚洲a∨综合| 国产精品嫩草视频| 欧洲一区av| 午夜电影网一区| 亚洲最大视频网| 女主播福利一区| 亚洲女与黑人做爰| 天天色综合天天色| 精品在线观看入口| 欧美一级片免费在线| 97超碰中文字幕| 国产日产欧美一区二区三区| 免费成人在线视频网站| 超碰97成人| 亚洲高清久久网| 日本一区二区三区免费视频| 国产精品亚洲一区二区三区在线| 久久综合电影一区| 性欧美videosex高清少妇| 91高清免费看| 久久国产精品99久久人人澡| 亚洲mv在线看| yy6080久久伦理一区二区| 国产亚洲日本欧美韩国| 日日夜夜狠狠操| 国产婷婷色一区二区三区| 天天做天天爱天天高潮| 日本精品久久| 久久影视电视剧免费网站| 在线观看日韩一区二区| 国产精品网曝门| 亚洲欧美国产中文| 亚洲成人av| 不卡视频一区二区三区| а√天堂中文资源在线bt| 亚洲国产成人av在线| 久久久国产高清| 久久综合网色—综合色88| 妞干网在线免费视频| 欧美美女视频| 成人免费视频网址| 免费看电影在线| 亚洲精品97久久| 销魂美女一区二区| 中文字幕一区二区不卡| 日本少妇一级片| 99精品国产福利在线观看免费 | 91激情视频在线| 99re6这里只有精品| 91视频婷婷| 美女av在线免费看| 一本一道久久a久久精品逆3p| 在线免费观看视频网站| 视频在线观看一区| 国产日韩欧美精品| 原纱央莉成人av片| 久久激情视频久久| 天天操天天插天天射| 国产精品视频免费看| 伊人免费视频二| 国产精品呻吟| 久久天堂国产精品| 成人在线免费av| 同产精品九九九| 五月天免费网站| 国产二区国产一区在线观看| 青青视频在线播放| 国产精品毛片无码| 人人做人人澡人人爽欧美| а√中文在线8| 欧美精品亚洲一区二区在线播放| 亚洲一区二区三区黄色| 青草国产精品久久久久久| 国产青草视频在线观看| 国产欧美日韩视频在线| 欧美一级淫片播放口| 国产丝袜在线视频| 午夜视频成人| 欧美人妇做爰xxxⅹ性高电影| 国产亚洲第一页| 91免费看片在线观看| 日本中文字幕影院| 最新国产精品| 精品久久精品久久| 亚洲欧洲二区| 国产成人一区二区三区小说| 天堂成人av| 亚洲国产高清福利视频| 国产毛片久久久久| 日韩欧美a级成人黄色| 日韩成人毛片视频| 国产精品自拍一区| 怡红院av亚洲一区二区三区h| 亚洲男人都懂第一日本| 91性高湖久久久久久久久_久久99| 亚洲婷婷噜噜| 中文字幕av一区中文字幕天堂| 五月天久久久久久| 日韩午夜av一区| 国产精品乱子乱xxxx| 瑟瑟视频在线| 欧美一区三区四区| 久久人人爽人人爽人人| 亚洲免费观看在线观看| 自拍偷拍你懂的| 久久网站最新地址| av免费一区二区| 狠久久av成人天堂| 玛丽玛丽电影原版免费观看1977| www.豆豆成人网.com| 国产精品综合不卡av| 日韩成人亚洲| 国产精品第二页| 国产探花视频在线观看| 欧美精品成人91久久久久久久| 大地资源网3页在线观看| 最近2019中文字幕在线高清 | 91网站在线播放| 最近日本中文字幕| 99久久久久免费精品国产| www.四虎在线| 国产高清不卡一区二区| 中文字幕第三区| 国产尤物一区二区在线| 亚洲成人手机在线观看| 亚洲资源av| 天堂中文视频在线| 男人操女人的视频在线观看欧美| 妓院一钑片免看黄大片| 日韩精品高清不卡| 天天干天天爽天天射| 久久国产福利国产秒拍| www.色就是色.com| 国产精品原创巨作av| 成年女人免费视频| 久久亚洲免费视频| 国产精品成人无码免费| 国产清纯美女被跳蛋高潮一区二区久久w| 人妻无码一区二区三区| 国产午夜一区二区三区| 超碰人人干人人| 亚洲视频一区在线观看| 久久久久久久福利| 黄色91在线观看| 波多野结衣绝顶大高潮| 欧美日本一道本| 亚洲av无码乱码国产精品久久| 亚洲国产精品女人久久久| 国产午夜精品一区理论片| 日韩视频第一页| 国产精品69xx| 国产成人精品免费视频| 亚洲一区二区三区久久久| 官网99热精品| 国内精品视频在线观看| www国产无套内射com| 国产日韩欧美| 黄色一级片免费的| 成人一区二区三区视频在线观看| 亚洲av无码一区二区二三区| 国产精品久久久久久户外露出| 欧美三级免费看| 色综合久久天天综合网| 一级黄色片在线看| 精品国产一区a| 国产精品一区在线看| 欧美精品一区二区三区国产精品| 黑森林国产精品av| 成人黄色免费片| 精品无人区一区二区| 亚洲欧美久久234| 亚洲高清免费| 午夜激情av在线| 99久久久国产精品免费蜜臀| jizzjizzjizz国产| 午夜精品福利在线| 97国产成人无码精品久久久| 亚洲国内精品在线| 国产原创精品视频| 国产成人精品久久二区二区| 在线视频亚洲欧美中文| 亚洲精品一区二区三| 99精品热6080yy久久| 久久久九九九热| 国产农村妇女精品| 日本一区二区三区四区五区| 欧美日产国产精品| 青青青免费视频在线2| 久久97精品久久久久久久不卡 | aa国产精品| 亚洲网中文字幕| 中文幕一区二区三区久久蜜桃| 日韩精品视频免费看| 日韩欧美中文字幕公布| 91网在线播放| 日本三级久久久| 六月丁香久久丫| www.亚洲成人网| 国产精品综合一区二区三区| 国产精品久久久久久成人| 欧美午夜精品在线| 人妻中文字幕一区| 欧美成人免费全部| 亚洲一区有码| 亚洲制服中文| 蜜臀av一区二区在线观看| 大又大又粗又硬又爽少妇毛片| 午夜精品久久久久久| 亚洲第一页视频| 色中色综合影院手机版在线观看| 91精品福利观看| 人人妻人人澡人人爽精品欧美一区| 免费成人av在线播放| 大伊人狠狠躁夜夜躁av一区| 免费激情视频网站| 久久久久久有精品国产| 91国内精品| 欧美黑人在线观看| 国产91丝袜在线18| 久热精品在线观看| 精品国内二区三区| 欧美电影免费观看网站| 久久久久久国产精品三级玉女聊斋| 成人亚洲精品| 日韩人妻精品一区二区三区| 国内精品久久久久影院一蜜桃| 一二三四在线观看视频| 欧美军同video69gay| 麻豆传媒视频在线观看免费| 成人免费在线网址| 久久久久久久久久久久久久| 91香蕉国产线在线观看| 亚洲伦理在线精品| 亚洲免费一级片| 国内成人精品一区| 亚洲人亚洲人色久| 美女一区二区三区视频| 中文字幕在线一区免费| 99久久精品无免国产免费| 国产亚洲精品久久久优势 | 动漫精品一区二区| 视频一区二区三区在线看免费看| 欧美最猛黑人xxxx黑人猛叫黄| 国产成人三级| 亚洲一区精品视频在线观看| 一区二区三区四区蜜桃| 免费看av毛片| 国产成人亚洲精品| 9999国产精品| 日本黄色录像片| 在线观看精品一区| 在线观看免费视频你懂的| 国精产品99永久一区一区| 日日嗨av一区二区三区四区| 日本裸体美女视频| 亚洲成色777777女色窝| 一呦二呦三呦精品国产| 伊人再见免费在线观看高清版 | 欧美成人影院| 综合久久国产| 99久久精品国产毛片| 在线亚洲欧美日韩| 久久久久久高潮国产精品视| 国产区精品区| 韩国三级hd中文字幕有哪些| 色综合天天综合网天天狠天天| 国产激情在线观看| 欧美国产视频在线观看| 韩国女主播成人在线| 中文字幕在线播| 欧美寡妇偷汉性猛交| 欧美日韩一区二区三区视频播放| 亚洲综合中文网| 欧美天天综合网|