国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Linux > 正文

linux中讓 Docker 使用 HTTPS的教程

2024-08-27 23:59:21
字體:
供稿:網(wǎng)友

Docker 是一個開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個可移植的容器中,然后發(fā)布到任何流行的 Linux 機器上,也可以實現(xiàn)虛擬化,下文來看一個 Docker 使用 HTTPS的教程.

Docker 啟動監(jiān)聽端口后,使用的是 http,可以遠程來管理 Docker 主機.

這樣的場景存在弊端,API 層面是沒有提供用戶驗證、Token 之類身份驗證功能,任何人都可以通過地址加端口來控制 Docker 主機,為了避免這樣的情況發(fā)生,Docker 官方也支持 https 方式,不過需要我們自己來生成證書.

通過 OpenSSL 命令來生成 CA 證書、服務(wù)器私鑰、客戶端證書、簽名,openssl 命令比較復(fù)雜,我用腳本直接生成:

  1. # cat certgen.sh 
  2. set -ex 
  3. [ -e certs ] || mkdir certs 
  4. cd certs 
  5. echo "Creating ca keys..." 
  6. echo 01 > ca.srl 
  7. openssl genrsa -des3 -out ca-key.pem 
  8. openssl rsa -in ca-key.pem -out ca-key.pem 
  9. openssl req -subj "/CN=$(hostname -f)/" -new -x509 -days 365 -key ca-key.pem -out ca.pem 
  10. echo "Creating server keys..." 
  11. openssl genrsa -des3 -out server-key.pem 
  12. openssl rsa -in server-key.pem -out server-key.pem 
  13. openssl req -subj "/CN=$(hostname -f)/" -new -key server-key.pem -out server.csr 
  14. openssl x509 -req -days 365 -in server.csr -CA ca.pem -CAkey ca-key.pem -out server-cert.pem 
  15. echo "Creating client keys..." 
  16. openssl genrsa -des3 -out key.pem 
  17. openssl rsa -in key.pem -out key.pem 
  18. openssl req -subj '/CN=*/' -new -key key.pem -out client.csr 
  19. echo extendedKeyUsage = clientAuth > extfile.cnf 
  20. openssl x509 -req -days 365 -in client.csr -CA ca.pem -CAkey ca-key.pem -out cert.pem -extfile extfile.cnf  //Vevb.com 

需要注意,在執(zhí)行腳本之前,確保你的主機名符合 FQDN 并能正常解析,不推薦修改腳本內(nèi)容 $(hostname -f) 為 IP 地址,無需修改腳本,在腳本執(zhí)行過程中會反復(fù)需要輸入密碼,統(tǒng)一輸入一個密碼就 ok:

sh certgen.sh

執(zhí)行完后,會在當前目錄下生成一個 certs 目錄,里面有生成的所有的證書文件,為了避免混淆,現(xiàn)在拷貝 CA 和服務(wù)器私鑰到其它目錄:

  1. mkdir -p /etc/docker/certs 
  2. cd certs/ 
  3. cp ca.pem server-cert.pem server-key.pem /etc/docker/certs/ 

服務(wù)器私鑰有了,我們也知道在哪里,現(xiàn)在只需要讓 Docker 知道:

  1. vim /etc/default/docker 
  2. DOCKER_OPTS='-H unix:///var/run/docker.sock -H docker01.thstack.com:6732 --tlsverify --tlscacert=/etc/docker/certs/ca.pem --tlscert=/etc/docker/certs/server-cert.pem --tlskey=/etc/docker/certs/server-key.pem' 

重啟 docker 服務(wù):service docker restart,添加 DOCKER_HOST 環(huán)境變量,地址為 Docker 主機的主機名,同樣如果設(shè)置 IP 地址會有問題:

  1. # vim /etc/profile 
  2. export DOCKER_HOST=tcp://docker01.thstack.com:6732 
  3. # source /etc/profile 

現(xiàn)在 Docker 已經(jīng)開啟了 https 認證,在命令行里敲 docker 命令會報錯,需要在每個 docker 命令加 –tlsverify 參數(shù),docker 命令作為一個客戶端工具來操作 Docker 主機同樣依賴客戶端證書:

  1. root@docker01:~/certs# docker info 
  2. 2014/09/14 16:19:26 Get http://docker01.thstack.com:6732/v1.14/info: malformed HTTP response "x15x03x01x00x02x02" 
  3. root@docker01:~# docker --tlsverify images 
  4. 2014/09/14 16:25:53 Couldn't read ca cert /root/.docker/ca.pem: open /root/.docker/ca.pem: no such file or directory   //Vevb.com 

從 docker –tlsverify images 結(jié)果輸出中了解到,加了 –tlsverify 參數(shù)后,就會默認去 ~/.docker 文件中找客戶端證書,現(xiàn)在為 docker 客戶端命令添加證書:

  1. mkdir ~/.docker 
  2. cd certs/ 
  3. cp ca.pem cert.pem key.pem ~/.docker 

再次嘗試執(zhí)行命令:

  1. root@docker01:~# docker ps 
  2. 2014/09/14 16:28:42 Get http://docker01.thstack.com:6732/v1.14/containers/json: malformed HTTP response "x15x03x01x00x02x02" 
  3. root@docker01:~# docker --tlsverify images 
  4. REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE 
  5. ubuntu              14.04.1             826544226fdc        9 days ago          194.2 MB 
  6. ubuntu              14.04               826544226fdc        9 days ago          194.2 MB 
  7. ubuntu              trusty              826544226fdc        9 days ago          194.2 MB 
  8. ubuntu              latest              826544226fdc        9 days ago          194.2 MB 
  9. ubuntu              14.10               245ce11c1f25        9 days ago          202.5 MB 
  10. ubuntu              utopic              245ce11c1f25        9 days ago          202.5 MB 
  11. ubuntu              precise             c17f3f519388        9 days ago          106.7 MB 
  12. ubuntu              12.04.5             c17f3f519388        9 days ago          106.7 MB 
  13. ubuntu              12.04               c17f3f519388        9 days ago          106.7 MB 
  14. ubuntu              12.10               c5881f11ded9        12 weeks ago        172.2 MB 
  15. ubuntu              quantal             c5881f11ded9        12 weeks ago        172.2 MB 
  16. ubuntu              13.04               463ff6be4238        12 weeks ago        169.4 MB 
  17. ubuntu              raring              463ff6be4238        12 weeks ago        169.4 MB 
  18. ubuntu              13.10               195eb90b5349        12 weeks ago        184.7 MB 
  19. ubuntu              saucy               195eb90b5349        12 weeks ago        184.7 MB 
  20. ubuntu              lucid               3db9c44f4520        4 months ago        183 MB 
  21. ubuntu              10.04               3db9c44f4520        4 months ago        183 MB   

只要開啟 https 認證后,docker 命令就必須加 –tlsverify 參數(shù),上面所有的操作都是在 Docker 主機上操作,找另外一臺機器來驗證 https 是否生效:

  1. root@ubuntu:~# curl -v -s  https://docker01.thstack.com:6732/info 
  2. * About to connect() to docker01.thstack.com port 6732 (#0) 
  3. *   Trying 192.168.3.23... connected 
  4. * successfully set certificate verify locations: 
  5. *   CAfile: none 
  6.   CApath: /etc/ssl/certs 
  7. * SSLv3, TLS handshake, Client hello (1): 
  8. * SSLv3, TLS handshake, Server hello (2): 
  9. * SSLv3, TLS handshake, CERT (11): 
  10. * SSLv3, TLS alert, Server hello (2): 
  11. * SSL certificate problem, verify that the CA cert is OK. Details: 
  12. error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 
  13. * Closing connection #0 

上面提示,證書驗證失敗,在 Docker 主機上 scp 客戶端證書到這臺機器上:

  1. root@docker01:~# cd certs/ 
  2. root@docker01:~/certs# scp ca.pem cert.pem key.pem root@ubuntu:/tmp  

指明證書位置來驗證,可以看到驗證過程和結(jié)果:

  1. root@ubuntu:~# curl -v -s -k --key /tmp/key.pem --cert /tmp/cert.pem https://docker01.thstack.com:6732/info 
  2. * About to connect() to docker01.thstack.com port 6732 (#0) 
  3. *   Trying 192.168.3.23... connected 
  4. * successfully set certificate verify locations: 
  5. *   CAfile: none 
  6.   CApath: /etc/ssl/certs 
  7. * SSLv3, TLS handshake, Client hello (1): 
  8. * SSLv3, TLS handshake, Server hello (2): 
  9. * SSLv3, TLS handshake, CERT (11): 
  10. * SSLv3, TLS handshake, Server key exchange (12): 
  11. * SSLv3, TLS handshake, Request CERT (13): 
  12. * SSLv3, TLS handshake, Server finished (14): 
  13. * SSLv3, TLS handshake, CERT (11): 
  14. * SSLv3, TLS handshake, Client key exchange (16): 
  15. * SSLv3, TLS handshake, CERT verify (15): 
  16. * SSLv3, TLS change cipher, Client hello (1): 
  17. * SSLv3, TLS handshake, Finished (20): 
  18. * SSLv3, TLS change cipher, Client hello (1): 
  19. * SSLv3, TLS handshake, Finished (20): 
  20. * SSL connection using ECDHE-RSA-AES256-SHA 
  21. * Server certificate: 
  22. *        subject: CN=docker01.thstack.com 
  23. *        start date: 2014-09-14 03:27:16 GMT 
  24. *        expire date: 2015-09-14 03:27:16 GMT 
  25. *        common name: docker01.thstack.com (matched) 
  26. *        issuer: CN=docker01.thstack.com 
  27. *        SSL certificate verify result: self signed certificate (18), continuing anyway. 
  28. > GET /info HTTP/1.1 
  29. > User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 
  30. > Host: docker01.thstack.com:6732 
  31. > Accept: */* 
  32. >  
  33. < HTTP/1.1 200 OK 
  34. < Content-Type: application/json 
  35. < Job-Name: info 
  36. < Date: Sun, 14 Sep 2014 08:43:26 GMT 
  37. < Content-Length: 417 
  38. <  
  39. {"Containers":1,"Debug":0,"Driver":"aufs","DriverStatus":[["Root Dir","/var/lib/docker/aufs"],["Dirs","36"]],"ExecutionDriver":"native-0.2","IPv4Forwarding":1,"Images":34,"IndexServerAddress":"https://index.docker.io/v1/","InitPath":"/usr/bin/docker","InitSha1":"","KernelVersion":"3.13.0-24-generic","MemoryLimit":1,"NEventsListener":0,"NFd":11,"NGoroutines":11,"OperatingSystem":"Ubuntu 14.04.1 LTS","SwapLimit":0} 
  40. * Connection #0 to host docker01.thstack.com left intact 
  41. * Closing connection #0 
  42. * SSLv3, TLS alert, Client hello (1): 

也可以在其它機器上安裝 lxc-docker,來用 docker 命令遠程管理 Docker 主機,同樣設(shè)置環(huán)境變量,添加證書,如果在配置過程中出錯,查看 /var/log/upstart/docker.log 日志,或重新生成證書.

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 文水县| 新和县| 金门县| 通辽市| 西吉县| 延长县| 酒泉市| 太原市| 龙江县| 太保市| 原阳县| 玉屏| 耒阳市| 商南县| 万荣县| 长寿区| 昌图县| 确山县| 溆浦县| 汕头市| 沾化县| 绵阳市| 阿克苏市| 新营市| 靖西县| 金门县| 工布江达县| 田阳县| 图们市| 靖江市| 东阿县| 资阳市| 上栗县| 大姚县| 河津市| 长子县| 九寨沟县| 益阳市| 曲沃县| 砚山县| 绍兴县|