摘要:考慮到這一點,我們花費了一些時間審查了我們維護的多種系統,并在這星期,我給我們的私人注冊中心設置了添加身份認證的目標。你也許知道,注冊沒有提供身份認證的方法。授權響應觸發客戶端回應一組使用基本身份驗證的憑據。
注:原文作者是 Alex Ianchici,原文地址是 Docker private registry authentication
安全已經融入了我們的生活。我們鎖門,使用密碼保護我們的銀行信息,但是通常密碼如此復雜以至于造成我們很容易忘記它。用常識來保護系統的安全是良好的實踐。這真的很容易呈現,因為它是一個內部的系統,沒有必要啟用身份認證以及安全傳輸,但在我們當前的遠程工作時代,內部網絡可能十分廣泛。
考慮到這一點,我們花費了一些時間審查了我們維護的多種系統,并在這星期,我給我們的私人 Docker 注冊中心設置了添加身份認證的目標。你也許知道,Docker 注冊沒有提供身份認證的方法。因此我們決定早期的方案就是在我們的鏡像倉庫前面加一個身份認證的代理。在我們的案例中,我們決定通過 SSL 使用 Nginx 并加上一個內部身份認證 API。
該解決方案的幾個優勢:
允許我們使用我們內部的身份驗證 API
可以給其他系統重復使用身份認證
可以通過 Docker 容器實現(我們使用的容器數量小于 3 個)
我把一個簡單的身份認證服務和一個 Nginx 容器放在一起,我們可以在 github 上獲取可用的版本(https://registry.hub.docker.com/u/opendns)。
簡單的基礎身份認證服務作為 Nginx 代理容器的一個參考,我們使用 NodeJS 構建了一個身份認證 API,非常容易的創建了一個基礎身份認證服務。所有我們所需要做的就是創建一個真正簡單的 server.js,使用 htpasswd utility 生成一個資格證書文件,并且在一個 Docker 容器中封裝,我們可以創建如下 Dockerfile:
FROM google/nodejs ADD . /app WORKDIR /app RUN npm install http-auth EXPOSE 8000 ENV NODE_PATH /data/node_modules/ CMD ["node", "server.js"]
然后我們測試并部署我們的服務:
ubuntu@trusty-64:/basic-auth# docker build -t opendns/basic-auth-service . ubuntu@trusty-64:/basic-auth# docker run --name simple-auth opendns/basic-auth-service ubuntu@trusty-64:/basic-auth# docker inspect --format "{{ .NetworkSettings.IPAddress }}" simple-auth 172.17.0.40 ubuntu@trusty-64:/basic-auth# curl 172.17.0.40:8000 401 Unauthorized ubuntu@trusty-64:/basic-auth# curl -u testuser:testpassword 172.17.0.40:8000 User authenticated successfully
你可以在這里找到基礎身份認證服務的所有示例代碼,可用的容器在這里。
Nginx 身份認證代理Nginx 代理的關鍵部分是配置文件:
# define an /auth section to send the request to an authentication service location = /auth { proxy_pass {{auth_backend}}; proxy_pass_request_body off; proxy_set_header Content-Length ""; proxy_set_header X-Original-URI $request_uri; proxy_set_header X-Docker-Token ""; } # use the auth_request directive to redirect all requests to the /auth section above location / { proxy_pass {{backend}}; auth_request /auth; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_buffering off; }
使用了 http_auth_request 模塊發送用戶,使用 proxy_pass 指令轉發請求到我們簡單身份認證服務處理,返回 200 或是 401。 401 授權響應觸發 Docker 客戶端回應一組使用基本身份驗證的憑據。一旦證書被接受,API 將返回 200。Nginx 可以發送請求到私有注冊中心,把這兩個容器放在一起:
ubuntu@trusty-64:/nginx-auth-proxy# docker run -d --name hello-world hello-world # run a simple web server that prints out “Hello world” ubuntu@trusty-64:/nginx-auth-proxy# docker inspect --format "{{ .NetworkSettings.IPAddress }}" hello-world 172.17.0.41 ubuntu@trusty-64:/nginx-auth-proxy# docker run -d -e AUTH_BACKEND=http://172.17.0.40:8000 -e BACKEND=http://172.17.0.41:8081 -p 0.0.0.0:8080:80 nginx-auth ubuntu@trusty-64:/nginx-auth-proxy# curl 0.0.0.0:8080401 Authorization Required 401 Authorization Required
nginx/1.6.1 ubuntu@trusty-64:/nginx-auth-proxy# curl -u testuser:testpassword 0.0.0.0:8080 Hello world
唯一剩下的事情是給這些容器添加 SSL 證書,然后你就可以好好的玩耍了。你可以在這里找到 Nginx 身份認證代理的代碼,在這里是可用的容器。使用這個方案需要注意幾件事:
使用基礎認證意味著每個請求都將訪問身份認證 API
基礎認證意味著你的證書不受阻礙的發送,除非你使用 SSL 加密了你的連接。注意:永遠不要在沒有 SSL 的情況下發送基礎認證證書。Docker 的客戶端和注冊中心不會接受 HTTP 方式的基礎認證
訪問私有注冊中心需要對到身份認證代理的請求做一定限制
該解決方案另外一個有趣的附帶影響就是,在私有注冊中心啟用 SSL 已經降低了每個 pull 請求花費的時間,比如,除非在注冊中心的 URL 上指定了端口,否則在連接 80 端口之前,客戶端首先初始化嘗試連接 443 端口。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26335.html
摘要:考慮到這一點,我們花費了一些時間審查了我們維護的多種系統,并在這星期,我給我們的私人注冊中心設置了添加身份認證的目標。你也許知道,注冊沒有提供身份認證的方法。授權響應觸發客戶端回應一組使用基本身份驗證的憑據。 注:原文作者是 Alex Ianchici,原文地址是 Docker private registry authentication 安全已經融入了我們的生活。我們鎖門...
摘要:是宜信公司大數據創新中心開發的開源平臺。為宜信大數據創新中心各個團隊提供了統一的測試和生產環境,簡化了服務的部署與上線流程,也降低了運維人員對系統管理的復雜度。基于容器技術,面向多樣化的技術棧,并且天然隔離系統和應用的依賴。 LAIN是宜信公司大數據創新中心開發的開源PaaS平臺。在金融的場景下,LAIN 是為解放各個團隊和業務線的生產力而設計的一個云平臺。LAIN 為宜信大數據創新中...
摘要:本篇文章將會結合網易云信的實踐經驗,以全局概述的方式帶大家認識點播私有化平臺構建的整體架構面貌?;跇嫿c播私有云平臺在具有以上優勢的同時,還具備資源彈性管理監控完善部署簡易自動化維護等特性?;跇嫿ㄆ脚_,能夠自由管理創建云主機。 私有云是為一個客戶單獨使用而構建的,因而提供對數據、安全性和服務質量的最有效控制。前置條件是客戶擁有基礎設施,并可以使用基礎設施在其上部署應用程序。其核心屬...
摘要:本篇文章將會結合網易云信的實踐經驗,以全局概述的方式帶大家認識點播私有化平臺構建的整體架構面貌?;跇嫿c播私有云平臺在具有以上優勢的同時,還具備資源彈性管理監控完善部署簡易自動化維護等特性?;跇嫿ㄆ脚_,能夠自由管理創建云主機。 私有云是為一個客戶單獨使用而構建的,因而提供對數據、安全性和服務質量的最有效控制。前置條件是客戶擁有基礎設施,并可以使用基礎設施在其上部署應用程序。其核心屬...
摘要:將一個輕量級的容器虛擬化平臺和一組標準工作流程工具進行集成,來幫助你方便地管理和部署應用。主要包括哪些組件主要包括兩個組件開源的容器虛擬化平臺用于分享和管理容器的軟件即服務平臺。 【編者的話】本文來自 Docker 的官方文檔,詳細介紹了 Docker 的體系結構、重要概念、內部工作機理等內容,推薦不了解 Docker 內部原理的同學閱讀。 什么是 Docker? Docker 是...
閱讀 3639·2021-11-24 09:38
閱讀 3142·2021-11-15 11:37
閱讀 781·2021-11-12 10:36
閱讀 3547·2021-10-21 09:38
閱讀 3220·2021-09-28 09:36
閱讀 2420·2021-09-22 16:01
閱讀 4984·2021-09-22 15:09
閱讀 1210·2019-08-30 15:55