天天看点

在 Atomic 主机上远程使用 Docker

<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 主机上发出命令。这可以让你远程、轻松、安全地启动容器化应用程序。

在 Atomic 主机上远程使用 Docker

docker-daemon

原文发布时间为:2017-03-03

本文来自云栖社区合作伙伴“linux中国”