容器间网络互通 容器服务为集群中每个容器提供集群内可达的独立 IP,容器之间就可以通过这个独立的 IP 互相通信,而不需要通过 NAT 暴露到主机端口,解耦了与宿主机 IP 的依赖,因此避免了配置 NAT 的时候多个容器端口冲突的问题。而如何实现跨主机的容器通信,在不同网络模型下面的实现方案如下。
VPC 网络模式下:
专有网络(Virtual Private Cloud,简称 VPC),帮助您基于阿里云构建出一个隔离的网络环境。您可以完全掌控自己的虚拟网络,包括选择自由 IP 地址范围、划分网段、配置路由表和网关等。容器服务通过配置 VPC 路由表的方式将容器对容器的访问转发到容器 IP 网段所对应的 ECS 机器上。如下图所示。
在集群的一台节点(172.16.1.1)上启动 Docker daemon 的时候,指定默认的 bridge 网络的 IP 段为 192.168.1.0/24。另外一个节点(172.16.1.2)启动 Docker daemon 时,指定为 192.168.2.0/24。然后,设置对应的路由规则到 VPC 下面的 vRoute 路由表将 192.168.1.0/24 转发到 172.16.1.1 所在节点。另外一个节点也配置类似的路由规则。
如此,比如在节点 1 上的一个 IP 为 192.168.1.2 的容器访问节点 2 上的一个 IP 为 192.168.2.2 的容器,就能通过路由表的转发将请求转发到对应的机器上,又通过 Docker 在机器上为 bridge 网桥创建的路由规则将请求转发到 Docker0 的网桥上,然后转发到 IP 为 192.168.2.2 对应的容器上。
另外,容器服务在 VPC 中给 Containers 分配了独立的网段以及路由条目,要避免与原有的 vSwitch 网段、路由表条目及机器上的 IP 路由表冲突,否则请求就可能无法转发到正确的容器上。
Classic 网络模式下:
从 Docker 1.9 开始,Docker 通过 Vxlan 的协议支持原生的 跨主机的容器网络。在 Classic 网络环境下,容器服务基于 Docker Overlay Network 创建一个集群内容器互通的网络环境,通过 Overlay 的网络虚拟出多主机中的容器网络是同一个虚拟出的子网,从而容器可以跨主机互相通信。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。