来自AtomicProject的AtomicHost是一个轻量级的基于容器的操作系统,可以运行Linux容器。它已经过优化,可用作云环境的容器运行时系统。例如,它可以托管Docker守护进程和容器。有时,您可能需要在该主机上运行docker命令并从其他地方管理服务器。本文介绍如何远程访问FedoraAtomic主机上的Docker守护进程(您可以在此处下载)。整个过程由Ansible自动完成——在自动化一切方面,这是一个多么棒的工具!安全备忘录由于我们通过网络连接,我们使用TLS来保护Docker守护进程。此过程需要客户端证书和服务器证书。OpenSSL包用于创建用于建立TLS连接的证书密钥。在这里,Atomic主机运行守护进程,我们本地的Fedora工作站充当客户端。在执行这些步骤之前,请注意任何有权访问客户端上的TLS证书的进程在服务器上都具有完全的根访问权限。因此,客户端可以在服务器上为所欲为。我们只需要将证书访问权限授予受信任的特定客户端主机。您应该只将客户端证书复制到完全在您控制之下的客户端主机。但即使在这种情况下,客户端计算机的安全性也是最重要的。然而,这种方法只是远程访问守护进程的一种方式。编排工具通常提供更安全的控制。下面的简单方法适合个人实验,不一定适合开放网络。获取Ansible角色ChrisHouseknecht编写了一个Ansible角色,它将创建所有需要的凭据。这样,您就不需要再手动运行openssl命令了。这些在Ansible角色存储库中提供。将其克隆到您当前的工作主机。$mkdirdocker-remote-access$cddocker-remote-access$gitclonehttps://github.com/ansible/role-secure-docker-daemon.git创建配置文件接下来,你必须创建Ansible配置文件,清点清单和playbook剧本文件来设置客户端和守护进程。以下说明在Atomic主机上创建客户端和服务器证书。然后,在本地获取客户端证书。***,它配置守护进程和客户端,以便它们可以相互交互。这是您需要的目录结构。创建以下每个文件,如下所示。$treedocker-remote-access/docker-remote-access/├──ansible.cfg├──库存├──remote-access.yml└──role-secure-docker-daemonansible.cfg:$vimansible.cfg[defaults]inventory=inventory库存文件(inventory):$viminventory[daemonhost]'IP_OF_ATOMIC_HOST'ansible_ssh_private_key_file='PRIVATE_KEY_FILE'将库存文件(inventory)中的IP_OF_ATOMIC_HOST替换为Atomic主机的IP。将PRIVATE_KEY_FILE替换为本地系统上SSH私钥文件的位置。剧本文件(remote-access.yml):$vimremote-access.yml-name:DockerClientSetuphosts:daemonhostgather_facts:notasks:-name:Make~/.dockerdirectoryfordockercertslocal_action:filepath='~/.docker'state='directory'-name:将环境变量添加到~/.bashrclocal_action:lineinfiledest='~/.bashrc'line='exportDOCKER_TLS_VERIFY=1\nexportDOCKER_CERT_PATH=~/.docker/\nexportDOCKER_HOST=tcp://{{inventory_hostname}}:2376\n'state='present'-name:Source~/.bashrcfilelocal_action:shellsource~/.bashrc-name:DockerDaemonSetuphosts:daemonhostgather_facts:noremote_user:fedorabecome:yesbecome_method:sudobecome_user:rootroles:-role:role-secure-docker-daemondds_host:"{{inventory_hostname}}"dds_server_cert_path:/etc/dockerdds_restart_docker:notasks:-name:fetchca.pemfromdaemonhostfetch:src:/root/.docker/ca.pemdest:~/.docker/fail_on_missing:yesflat:yes-name:fetchcert.pemfromdaemonhostfetch:src:/root/。docker/cert.pemdest:~/.docker/fail_on_missing:yesflat:yes-name:fetchkey.pemfromdaemonhostfetch:src:/root/.docker/key.pemdest:~/.docker/fail_on_missing:yesflat:yes-name:RemoveEnvironmentvariableOPTIONSfrom/etc/sysconfig/dockerlineinfile:dest:/etc/sysconfig/dockerregexp:'^OPTIONS'状态:缺席名称:ModifyEnvironmentvariableOPTIONSin/etc/sysconfig/dockerlineinfile:dest:/etc/sysconfig/dockerline:"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'"state:present-name:Removeclientcertsfromdaemonhostfile:path:/root/.dockerstate:absent-name:ReloadDockerdaemoncommand:systemctldaemon-reload-name:RestartDockerdaemoncommand:systemctlrestartdocker.service访问Atomic主机现在运行Ansible剧本:$ansible-playbookremote-access.yml确保tcp端口2376在您的Atomic主机上打开如果您使用的是Openstack,请在安全规则中添加TCP端口2376。如果您使用AWS,请将其添加到您的安全组。现在,在您的工作站上以普通用户身份运行的docker命令与Atomic主机的守护进程通信并在那里执行命令。您不需要手动ssh或在Atomic主机上发出命令。这使您可以轻松、安全地远程启动容器化应用程序。如果你想克隆Ansible剧本和配置文件,这里是git存储库。码头守护进程
