<a target="_blank"></a>
在你按照這些步驟進行之前,請注意,任何在用戶端上可以通路 tls 證書的程序在伺服器上具有完全的 root 通路權限。 是以,用戶端可以在伺服器上做任何它想做的事情。我們需要僅向可信任的特定用戶端主機授予證書通路權限。你應該将用戶端證書僅複制到完全由你控制的用戶端主機。但即使在這種情況下,用戶端機器的安全也至關重要。
不過,此方法隻是遠端通路守護程式的一種方法。編排工具通常提供更安全的控制。下面的簡單方法适用于個人實驗,可能不适合開放式網絡。
<code>$ mkdir docker-remote-access</code>
<code>$ cd docker-remote-access</code>
<code>$ git clone https://github.com/ansible/role-secure-docker-daemon.git</code>
接下來,你必須建立 ansible 配置檔案、清單inventory和劇本playbook檔案以設定用戶端和守護程序。以下說明在 atomic 主機上建立用戶端和伺服器證書。然後,擷取用戶端證書到本地。最後,它們會配置守護程序以及用戶端,使它們能彼此互動。
這裡是你需要的目錄結構。如下所示,建立下面的每個檔案。
<code>$ tree docker-remote-access/</code>
<code>docker-remote-access/</code>
<code>├── ansible.cfg</code>
<code>├── inventory</code>
<code>├── remote-access.yml</code>
<code>└── role-secure-docker-daemon</code>
<code>ansible.cfg</code>:
<code>$ vim ansible.cfg</code>
<code>[defaults]</code>
<code>inventory=inventory</code>
清單檔案(<code>inventory</code>):
<code>$ vim inventory</code>
<code>[daemonhost]</code>
<code>'ip_of_atomic_host' ansible_ssh_private_key_file='private_key_file'</code>
将清單檔案(<code>inventory</code>) 中的 <code>ip_of_atomic_host</code> 替換為 atomic 主機的 ip。将 <code>private_key_file</code> 替換為本地系統上的 ssh 私鑰檔案的位置。
劇本檔案(<code>remote-access.yml</code>):
<code>$ vim remote-access.yml</code>
<code>- name: docker client set up</code>
<code>hosts: daemonhost</code>
<code>gather_facts: no</code>
<code>tasks:</code>
<code>- name: make ~/.docker directory for docker certs</code>
<code>local_action: file path='~/.docker' state='directory'</code>
<code></code>
<code>- name: add environment variables to ~/.bashrc</code>
<code>local_action: lineinfile dest='~/.bashrc' line='export docker_tls_verify=1\nexport docker_cert_path=~/.docker/\nexport docker_host=tcp://{{ inventory_hostname }}:2376\n' state='present'</code>
<code>- name: source ~/.bashrc file</code>
<code>local_action: shell source ~/.bashrc</code>
<code>- name: docker daemon set up</code>
<code>remote_user: fedora</code>
<code>become: yes</code>
<code>become_method: sudo</code>
<code>become_user: root</code>
<code>roles:</code>
<code>- role: role-secure-docker-daemon</code>
<code>dds_host: "{{ inventory_hostname }}"</code>
<code>dds_server_cert_path: /etc/docker</code>
<code>dds_restart_docker: no</code>
<code>- name: fetch ca.pem from daemon host</code>
<code>fetch:</code>
<code>src: /root/.docker/ca.pem</code>
<code>dest: ~/.docker/</code>
<code>fail_on_missing: yes</code>
<code>flat: yes</code>
<code>- name: fetch cert.pem from daemon host</code>
<code>src: /root/.docker/cert.pem</code>
<code>- name: fetch key.pem from daemon host</code>
<code>src: /root/.docker/key.pem</code>
<code>- name: remove environment variable options from /etc/sysconfig/docker</code>
<code>lineinfile:</code>
<code>dest: /etc/sysconfig/docker</code>
<code>regexp: '^options'</code>
<code>state: absent</code>
<code>- name: modify environment variable options in /etc/sysconfig/docker</code>
<code>line: "options='--selinux-enabled --log-driver=journald --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem -h=0.0.0.0:2376 -h=unix:///var/run/docker.sock'"</code>
<code>state: present</code>
<code>- name: remove client certs from daemon host</code>
<code>file:</code>
<code>path: /root/.docker</code>
<code>- name: reload docker daemon</code>
<code>command: systemctl daemon-reload</code>
<code>- name: restart docker daemon</code>
<code>command: systemctl restart docker.service</code>
現在運作 ansible 劇本:
<code>$ ansible-playbook remote-access.yml</code>
確定 tcp 端口 2376 在你的 atomic 主機上打開了。如果你在使用 openstack,請在安全規則中添加 tcp 端口 2376。 如果你使用 aws,請将其添加到你的安全組。
現在,在你的工作站上作為普通使用者運作的 <code>docker</code> 指令與 atomic 主機的守護程序通信,并在那裡執行指令。你不需要手動 <code>ssh</code> 或在 atomic 主機上發出指令。這可以讓你遠端、輕松、安全地啟動容器化應用程式。

docker-daemon
原文釋出時間為:2017-03-03
本文來自雲栖社群合作夥伴“linux中國”