精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

精品无人国产偷自产在线| 亚洲成a人v欧美综合天堂下载 | 国产激情小视频在线| 久久9热精品视频| 久久综合五月天| 国产精品亚洲一区二区无码| 性爽视频在线| 国产精品盗摄一区二区三区| 91亚色免费| 天天干天天色综合| 91高清一区| 亚洲免费av网址| 91香蕉视频免费看| 中文字幕不卡三区视频| 亚洲欧美日韩国产综合在线| 国产麻豆一区二区三区在线观看| 无码人妻丰满熟妇精品| 在线中文字幕亚洲| 永久免费精品影视网站| 午夜性福利视频| 免费无码av片在线观看| 亚洲一区二区视频在线播放| 影音先锋在线一区| 日韩在线观看免费全| 韩国三级hd两男一女| 成人午夜亚洲| 欧美日韩性生活视频| 丰满女人性猛交| 九色网友自拍视频手机在线| 国产在线国偷精品产拍免费yy | 精品国产乱码久久久久久鸭王1| 香蕉国产成人午夜av影院| 91精品国产综合久久精品性色 | 激情成人综合网| 国产成人+综合亚洲+天堂| 精品无码黑人又粗又大又长| 欧美3p视频| 亚洲欧美制服另类日韩| 在线观看免费视频国产| 成人豆花视频| 欧美日韩一区二区三区四区五区 | 精品999久久久| 中文字幕亚洲乱码| 456成人影院在线观看| 精品成人在线视频| 亚洲熟妇国产熟妇肥婆| 国产精品蜜臀| 亚洲已满18点击进入久久| 色乱码一区二区三区熟女| 一级毛片视频在线| 中文字幕乱码日本亚洲一区二区| 老牛影视免费一区二区| 亚洲欧洲精品视频| 国产suv精品一区二区三区| 亚洲a级在线播放观看| 国产精品嫩草影院精东| 毛片基地黄久久久久久天堂| 国产精品久久色| 国产在线观看第一页| 校园激情久久| 日本一本a高清免费不卡| 国产99久久久| 老司机午夜精品视频| 国产成人极品视频| 欧美日韩在线视频播放| 免费久久99精品国产| 国产精品视频一区二区三区四| 亚洲中文字幕无码爆乳av | 国产精品18久久久久久首页狼| 国产精品一区无码| 日本亚洲欧美天堂免费| 国产欧美va欧美va香蕉在线| 国产男男gay网站| 国产成人无遮挡在线视频| 不卡视频一区二区三区| 婷婷久久久久久| 久久久久亚洲蜜桃| 亚洲一区影院| 最新超碰在线| 懂色av影视一区二区三区| 中文字幕无码不卡免费视频| 成人免费一区| 欧美一区二区三区免费在线看 | 一区二区日韩视频| 国产精品1024久久| 精品欧美国产| 成人精品一区二区三区免费| 亚洲婷婷在线视频| 国产特级淫片高清视频| 日韩一区精品| 91精选在线观看| a级一a一级在线观看| 激情五月综合| 欧美成aaa人片免费看| 天天操天天干视频| 狠狠色丁香久久婷婷综合_中 | 亚洲一级片网站| 亚洲成人影音| 亚洲日韩中文字幕| 欧美丰满艳妇bbwbbw| 久久久久久久欧美精品| 91久久久久久国产精品| 无码精品人妻一区二区三区影院| 国产精品视频九色porn| 欧美久久久久久久久久久久久久| 欧美91看片特黄aaaa| 日韩一区二区在线观看视频| 五级黄高潮片90分钟视频| 国产精品精品国产一区二区| 97av在线播放| 国产草草影院ccyycom| 久久久久久久久久看片| 最新中文字幕久久| 桃色一区二区| 精品国产制服丝袜高跟| 日韩一级片在线免费观看| 亚洲日本激情| 亚洲a中文字幕| 成人性爱视频在线观看| 午夜亚洲国产au精品一区二区| 不卡的av中文字幕| 免费不卡中文字幕在线| 欧美激情在线一区| 精品久久久久久久久国产字幕| 亚洲一区二区福利视频| 久久av综合| 97视频在线播放| 99国产精品久久久久久久成人| 国产日韩欧美高清在线| 日韩精品视频一区二区在线观看| 麻豆国产精品| xxxxx91麻豆| 中文资源在线播放| 91老司机福利 在线| 国产一区二区三区小说| 精品国产三级| 久久激情五月丁香伊人| 亚洲婷婷久久综合| 91蝌蚪国产九色| 国产老熟妇精品观看| 在线播放一区二区精品视频| 久久久精品视频在线观看| 亚洲免费视频二区| 国产日韩精品一区| 日本免费观看网站| 国产一区二区三区探花| 日韩免费观看视频| 欧美日韩国产综合视频| 色悠悠久久综合| 91中文字幕永久在线| 国产精品毛片在线看| 国产综合18久久久久久| 2020国产在线| 亚洲国产天堂久久国产91| 日本学生初尝黑人巨免费视频| 岛国av在线一区| 中文字幕无码精品亚洲资源网久久| 一区二区三区高清在线观看| 欧美高清在线观看| 国产成人无码www免费视频播放| 亚洲高清不卡在线| 亚洲av网址在线| 欧美亚洲自偷自偷| 日韩精品久久久免费观看| 成人综合网站| 久久综合伊人77777| 精品人妻一区二区三区麻豆91| 一区二区三区欧美视频| 女同性恋一区二区三区| 水野朝阳av一区二区三区| 视频一区二区三| 涩涩涩久久久成人精品| 久久影院免费观看| 可以免费看毛片的网站| 欧美色播在线播放| 91麻豆精品国产91久久综合| 黄页视频在线91| 加勒比成人在线| 蜜桃精品噜噜噜成人av| 91久久久亚洲精品| 热三久草你在线| 一个人www欧美| 国产黄a三级三级三级| 五月天视频一区| jizz18女人高潮| 国产一区二区三区四区在线观看| 国产日本在线播放| 欧美精品系列| 99久久精品无码一区二区毛片 | 国产一区二区中文| 欧美三级华人主播| 国产成人免费视频网站视频社区| 久久久久久有精品国产| 成人亚洲综合天堂| 欧美精品一区二区在线观看| 日韩免费av网站| 亚洲美女视频在线观看| 三级男人添奶爽爽爽视频 | 狠狠躁18三区二区一区| 亚洲激情图片网| 99久久综合狠狠综合久久| 一区二区三区免费播放| 国内精品99| 亚洲午夜激情| 日本久久成人网| 91视频九色网站| 婷婷综合六月| 欧美激情视频一区二区| 在线观看免费高清完整| 亚洲黄页网在线观看| 国产精品欧美综合亚洲| 色综合亚洲欧洲| 国产亚洲精品码| 综合在线观看色| 国产人妻一区二区| 国产.欧美.日韩| 最新av免费在线观看| 久久九九精品| 和岳每晚弄的高潮嗷嗷叫视频| 日韩国产欧美| 欧美18视频| 风间由美一区二区av101| 国产日韩av高清| 国产成人精品亚洲日本在线观看| 欧美激情三级免费| 大地资源网3页在线观看| 夜夜躁日日躁狠狠久久88av| 婷婷在线免费观看| 日韩欧美视频在线 | 欧美xxxxxxxx| 国产精品美女一区| 欧美精品在欧美一区二区少妇| 中文字幕亚洲乱码熟女1区2区| 亚洲国产精品一区二区久久| 免费人成在线观看| 亚洲精品乱码久久久久| 91香蕉视频在线播放| 国产精品伦一区二区三级视频| 人人人妻人人澡人人爽欧美一区| 91污片在线观看| 中国极品少妇videossexhd| 风间由美性色一区二区三区| 性生活一级大片| 国产乱码字幕精品高清av| www.com污| 精品中文字幕一区二区| 爱豆国产剧免费观看大全剧苏畅 | 国产91精品网站| av日韩电影| 欧美专区国产专区| 偷拍视频一区二区三区| 国产精品毛片a∨一区二区三区|国 | 麻豆国产精品va在线观看不卡| 免费不卡视频| 久久成人一区二区| 日本片在线观看| 久久久久久久久91| 人在线成免费视频| 国产经典一区二区| 欧美v亚洲v综合v国产v仙踪林| 国产精品天天狠天天看| 婷婷精品久久久久久久久久不卡| 国产一区二区在线免费| 麻豆国产一区| 国产精品亚洲综合| 四虎5151久久欧美毛片| 日韩高清国产一区在线观看| 色狮一区二区三区四区视频| 日韩 欧美 自拍| 亚洲大片在线| 日本在线视频www| 久久精品国产一区二区| 亚洲第一成肉网| 岛国精品在线播放| 五月天综合视频| 亚洲欧洲精品一区二区三区不卡 | 欧美国产高潮xxxx1819| 99热亚洲精品| 日韩高清欧美激情| 捷克做爰xxxⅹ性视频| 波多野结衣一区二区三区| 午夜理伦三级做爰电影| 中文字幕色av一区二区三区| 欧美黄片一区二区三区| 狠狠爱在线视频一区| 91国产免费视频| 亚洲第一综合天堂另类专| 毛片网站在线观看| 麻豆成人在线看| 香蕉成人av| 99视频日韩| 国内精品久久久久久久影视简单| av磁力番号网| 久久精品导航| 免费看91视频| 中文字幕+乱码+中文字幕一区| 久久亚洲AV无码| 欧美亚洲国产一卡| 欧美熟妇交换久久久久久分类| 亚洲性夜色噜噜噜7777| 国产第一页在线视频| 国产精品久久久久久久久久久久久久| 欧美成人一级| 日本亚洲导航| 亚洲一级网站| 亚洲人视频在线| 久久综合九色综合97婷婷女人| 疯狂撞击丝袜人妻| 色婷婷综合视频在线观看| 亚洲精品中文字幕成人片| 一区二区欧美在线| 松下纱荣子在线观看| 国产91精品入口17c| 久久人体视频| 日韩免费高清在线| 波多野结衣视频一区| 国产真实乱在线更新| 在线观看免费亚洲| 你懂的在线播放| 欧美激情在线狂野欧美精品| 精品国产鲁一鲁****| 亚洲精品一区二区三区樱花| 国产精品腿扒开做爽爽爽挤奶网站| 手机精品视频在线| 国产精品久久精品日日| 亚洲av无码不卡| 亚洲欧美综合图区| 性欧美freesex顶级少妇| 国产日本一区二区三区| 欧美精品大片| 91丨porny丨九色| 亚洲婷婷国产精品电影人久久| 一区二区小视频| 一区二区三区国产视频| 久久uomeier| 欧美日本韩国一区二区三区| 国产精品亚洲综合久久| 国产精品一区二区无码对白| 亚洲最新在线观看| a天堂在线观看视频| 久久久精品免费视频| 粉嫩av国产一区二区三区| 亚洲综合第一| 精品在线播放午夜| 日本黄色录像视频| 在线成人免费视频| 国产精品剧情| 92国产精品久久久久首页| 伊人色**天天综合婷婷| 欧美污在线观看| 亚洲综合激情小说| 日批视频免费播放| 97在线精品视频| 在线日韩一区| 免费成人深夜天涯网站| 欧美午夜影院在线视频| 天堂91在线| 日本成人免费在线| 欧美日韩中字| 在线观看亚洲色图| 1区2区3区精品视频| 国产成人免费看一级大黄| 欧美高清性猛交| 亚州精品视频| 亚洲最大综合网| 亚洲婷婷综合色高清在线| www.av网站| 97国产成人精品视频| 国产aⅴ精品一区二区三区久久| 波多结衣在线观看| 亚洲另类在线一区| 成人乱码一区二区三区| 性欧美办公室18xxxxhd| 一区二区三区日本久久久 | 欧美成人r级一区二区三区| 黄页网站在线| 欧美性色黄大片人与善| 美日韩一级片在线观看| 国产高清在线免费观看| 亚洲国产成人一区| 中文.日本.精品| 欧美日韩dvd| 91在线你懂得| 亚洲天堂网在线观看视频| 欧美插天视频在线播放| 亚洲精品国产精品粉嫩| 在线不卡一区二区三区| 亚洲国产成人porn| 国产高清av在线| 91在线精品观看| 毛片一区二区| 欧美黑人性猛交xxx| 国产视频欧美视频| av在线成人| 日韩一级在线免费观看| 亚洲女与黑人做爰| 国产一级在线| 国产伦精品一区二区三| 久久aⅴ国产欧美74aaa| 黄色片网站在线免费观看|