docker 的内部基础设施
Internal infrastructure with docker
我有一个小型公司网络 services/servers:
- 詹金斯
- Stash(Atlassian)
- Confluence(Atlassian)
- LDAP
- Owncloud
- zabbix(监控)
- 人偶
- 和一些 Java 网络应用程序
所有 运行 在 2 台机器(1 台内部服务器,1 台 hetzner-rootserver)上的单独虚拟子网中的单独 kvm(libvirt)-vms 中,中间有 shorewall。我正在考虑切换到 Docker.
但是我有两个问题:
- 如何在 docker 个容器之间实现网络安全(即我想防止 owncloud 访问网络中除 ldap-hosts-sslport 之外的任何主机)
- 仅仅通过使用docker-链接?如果是:docker 真的只允许访问链接的容器,而不允许访问其他容器吗?
- 通过使用 kubernetes?
- 通过为每个容器添加多个桥接网络接口?
- 你会把我所有的 infra-services/-servers 切换到 docker,还是只有 owncloud 和 docker 上的 java-web-apps 的混合解决方案?
关于多主机网络:您是对的,Docker 链接不能跨主机工作。使用 Docker 1.9+,您可以像他们的博客 post http://blog.docker.com/2015/11/docker-multi-host-networking-ga/
中描述的那样使用 "Docker Networking"
不过,他们没有解释如何保护连接。我强烈建议在你的 Docker 守护进程上启用 TLS,这也应该保护你的多主机网络(这是一个假设,我没有尝试过)。
对于 Kubernetes,您将添加另一层抽象,因此您需要学习使用 pods 和服务概念。这很好,但可能有点太多了。请记住,您以后仍然可以决定使用 Kubernetes(或替代方案),因此第一步应该是了解如何将您的服务包装在 Docker 容器中。
您不必将所有内容都切换到 Docker。您应该从 Jenkins、Java 应用程序或 OwnCloud 开始,然后再熟悉 Docker 世界。 Jenkins 和 OwnCloud 会给你足够的挑战来获得一些维护容器的经验。如果 Docker 在您的设置中有意义并且您需要将其应用于其他服务,那么您可以更好地评估。
我个人倾向于将所有内容包装在 Docker 中,但这只是出于一个原因:保持主机清洁。如果你到达 运行 中的所有内容 Docker 的地步,你将有更多的自由来选择服务可以 运行 的位置,并且你可以更轻松地将容器移动到其他主机。
您还应该探索 Docker 中心,在那里您可以找到准备好的 运行 解决方案,例如Atlassian 存储:https://hub.docker.com/r/atlassian/stash/
如果您需要特殊应用程序的灵感以及如何将它们包装在 Docker 中,我建议您查看 https://github.com/jfrazelle/dockerfiles - 您会在那里找到很多很好的例子。
您可以像这样创建一个网络,从您的子网为容器提供它们自己的 IP:
docker network create \
--driver=bridge \
--subnet=135.181.x.y/28 \
--gateway=135.181.x.y+1 \
network
你的网关是你子网的 IP + 1 所以如果我的子网是 123.123.123.123
那么我的网关应该是 123.123.123.124
不幸的是,我还没有弄清楚如何让容器从它们自己的 ip 出现在 public 中,目前它们显示为专用服务器的 ip。如果您知道我该如何解决这个问题,请告诉我。不过,我可以使用它的 ip 访问容器。
我有一个小型公司网络 services/servers:
- 詹金斯
- Stash(Atlassian)
- Confluence(Atlassian)
- LDAP
- Owncloud
- zabbix(监控)
- 人偶
- 和一些 Java 网络应用程序
所有 运行 在 2 台机器(1 台内部服务器,1 台 hetzner-rootserver)上的单独虚拟子网中的单独 kvm(libvirt)-vms 中,中间有 shorewall。我正在考虑切换到 Docker.
但是我有两个问题:
- 如何在 docker 个容器之间实现网络安全(即我想防止 owncloud 访问网络中除 ldap-hosts-sslport 之外的任何主机)
- 仅仅通过使用docker-链接?如果是:docker 真的只允许访问链接的容器,而不允许访问其他容器吗?
- 通过使用 kubernetes?
- 通过为每个容器添加多个桥接网络接口?
- 你会把我所有的 infra-services/-servers 切换到 docker,还是只有 owncloud 和 docker 上的 java-web-apps 的混合解决方案?
关于多主机网络:您是对的,Docker 链接不能跨主机工作。使用 Docker 1.9+,您可以像他们的博客 post http://blog.docker.com/2015/11/docker-multi-host-networking-ga/
中描述的那样使用 "Docker Networking"不过,他们没有解释如何保护连接。我强烈建议在你的 Docker 守护进程上启用 TLS,这也应该保护你的多主机网络(这是一个假设,我没有尝试过)。
对于 Kubernetes,您将添加另一层抽象,因此您需要学习使用 pods 和服务概念。这很好,但可能有点太多了。请记住,您以后仍然可以决定使用 Kubernetes(或替代方案),因此第一步应该是了解如何将您的服务包装在 Docker 容器中。
您不必将所有内容都切换到 Docker。您应该从 Jenkins、Java 应用程序或 OwnCloud 开始,然后再熟悉 Docker 世界。 Jenkins 和 OwnCloud 会给你足够的挑战来获得一些维护容器的经验。如果 Docker 在您的设置中有意义并且您需要将其应用于其他服务,那么您可以更好地评估。
我个人倾向于将所有内容包装在 Docker 中,但这只是出于一个原因:保持主机清洁。如果你到达 运行 中的所有内容 Docker 的地步,你将有更多的自由来选择服务可以 运行 的位置,并且你可以更轻松地将容器移动到其他主机。
您还应该探索 Docker 中心,在那里您可以找到准备好的 运行 解决方案,例如Atlassian 存储:https://hub.docker.com/r/atlassian/stash/
如果您需要特殊应用程序的灵感以及如何将它们包装在 Docker 中,我建议您查看 https://github.com/jfrazelle/dockerfiles - 您会在那里找到很多很好的例子。
您可以像这样创建一个网络,从您的子网为容器提供它们自己的 IP:
docker network create \
--driver=bridge \
--subnet=135.181.x.y/28 \
--gateway=135.181.x.y+1 \
network
你的网关是你子网的 IP + 1 所以如果我的子网是 123.123.123.123
那么我的网关应该是 123.123.123.124
不幸的是,我还没有弄清楚如何让容器从它们自己的 ip 出现在 public 中,目前它们显示为专用服务器的 ip。如果您知道我该如何解决这个问题,请告诉我。不过,我可以使用它的 ip 访问容器。