使用阿里云vpc 路由表实现Docker容器跨主机通讯。

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 使用阿里云vpc 路由表实现Docker容器跨主机通讯。

前言:Docker的5种网络模式



Bridge

此时docker引擎会创建一个veth对,一端连接到容器实例并命名为eth0,另一端连接到指定的网桥中(比如docker0),因此同在一个主机的容器实例由于连接在同一个网桥中,它们能够互相通信。容器创建时还会自动创建一条SNAT规则,用于容器与外部通信时,类似家里上网用的ISP提供给我们的动态IP。如果用户使用了-p或者-P端口,还会创建对应的端口映射规则,使得外部请求能够访问容器的服务,但是你不能通过IP直接访问,本文提供了3种方式实现容器的跨主机访问。


Host

与宿主机共享网络,此时容器没有使用网络的namespace,宿主机的所有设备,会暴露到容器中,因此存在安全隐患。


None

不设置网络,相当于容器内没有配置网卡,用户可以手动配置。


Container

指定与某个容器实例共享网络


(国内工单技术支持群---群文件有这块说明可以自己download看下)

1. 使用直接路由方式打通跨主机的容器网络互通:


这种方式最简单,只需vpc里面添加自定义路由就可以实现,步骤如下:


(1)把主机网卡的转发开启,cat /proc/sys/net/ipv4/ip_forward cat /proc/sys/net/ipv4/conf/eth0/forwarding  # 0代表关闭,1代表开启


(2)定义两个主机的docker网段,可以在/etc/docker/daemon.json 配置文件里面添加 "bip": "169.254.123.1/24" 来做定义 # 其中169.254.123.1/24可以替换为您真实想设置的网段类型,注意不要和vpc的交换机网段冲突!



2 实验环境配置如下


(1)vpc地址段:192.168.0.0/16 两个主机的docker网段信息如下:


docker1 i-8vb6dyu0clj3b538e1yh  vpc:vpc-8vbuj466yjq2b5mjwwluu  私网IP地址:192.168.1.196  公网IP地址:39.103.187.202。docker网段:10.0.0.1/24


docker2 i-8vbbhvwcbk9yjeigcctn  vpc:vpc-8vbuj466yjq2b5mjwwluu  私网IP地址:192.168.1.197  公网IP地址:39.103.138.241   docker网段: 10.1.0.1/24


(2) 创建container

vm1 执行:docker run -it --name=test1 centos,对应容器IP为:10.0.0.2


vm2执行:docker run -it --name=test1 centos,对应容器IP为:10.1.0.2


在vm1上的centos 容器中ping 10.1.0.2,和预期一致,是无法ping通的。


[root@0c577544fdd2 /]# ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

   inet 127.0.0.1/8 scope host lo

      valid_lft forever preferred_lft forever

   inet6 ::1/128 scope host

      valid_lft forever preferred_lft forever

12: eth0@if13: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default

   link/ether 02:42:0a:00:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0

   inet 10.0.0.2/24 scope global eth0

      valid_lft forever preferred_lft forever

   inet6 fe80::42:aff:fe00:2/64 scope link

      valid_lft forever preferred_lft forever

[root@0c577544fdd2 /]# ping 10.1.0.2

PING 10.1.0.2 (10.1.0.2) 56(84) bytes of data.



梳理下docker及docker容器在Linux宿主机网络模块中做的操作,梳理清楚之后会发现打通不同宿主机上docker容器的方法非常简单。从宿主Linux系统的视角看操作系统中的网络设备,总结如下:


  • docker0接口:网桥,在安装完docker后默认被创建,网段是172.17.0.0/16,网桥的默认IP地址为172.17.0.1,可以修改/etc/docker/daemon.json 文件修改默认的容器网段
  • br-xxxx接口:网桥,在创建完自定义docker网络完被创建,网段是被用户指定的172.18.0.0/16,网桥的默认IP地址为172.18.0.1。
  • vethxxxx接口:veth网络接口,在创建一个具体的docker容器后被创建,如果有N个运行的容器,就会有N个veth网络接口。容器中的eth0接口和宿主机的veth网络接口是一个veth网络对,Linux上的veth接口作为一个端口连接入docker网桥,如docker0或其他自定义网桥。这也是为什么一个宿主机上的docker容器能够默认通信的原因,因为它们创建后就被接入到了同一个网桥上。  



可以看下上图,容器的请求会通过虚拟网卡转给docker0----然后docker0再把请求给vm1的eth0,这个情况可以利用vpc路由表直接实现网络的通信,配置如下


把访问10.0.0.0/24的流量,通过vpc路由表转给i-8vb6dyu0clj3b538e1yh做处理


把访问10.1.0.0/24的流量,通过vpc路由表转给i-8vbbhvwcbk9yjeigcctn做处理



配置完毕后,通过vm1的机器直接去访问10.1.0.2发现不通,通过抓包看请求已经到了vm2的eth0网卡上面,但是没有到vm2容器的网卡,这种情况一般有如下可能性:

(1)vm2的网卡转发没有开启,经过验证转发是没有问题的


(2)进一步分析iptables规则发现默认FORWARD这个转发连是拒绝了的,这个情况导致了请求被iptables拦截了,执行iptables -P FORWARD ACCEPT恢复!






ps:如果在遇到类似case可以把相关方案给客户,但是也告知客户这样做有潜在风险,不建议使用到生产上面,因为容器他的IP地址是不固定的,例如意外原因容器重建了就会导致IP地址发生变动,最优方案可以考虑使用hostnetwork 网络模式,直接通过宿主机的端口进行通信,或者使用Kubernetes!







相关实践学习
基于Hologres轻量实时的高性能OLAP分析
本教程基于GitHub Archive公开数据集,通过DataWorks将GitHub中的项⽬、行为等20多种事件类型数据实时采集至Hologres进行分析,同时使用DataV内置模板,快速搭建实时可视化数据大屏,从开发者、项⽬、编程语⾔等多个维度了解GitHub实时数据变化情况。
相关文章
|
1月前
|
存储 Kubernetes 网络安全
关于阿里云 Kubernetes 容器服务(ACK)添加镜像仓库的快速说明
本文介绍了在中国大陆地区因网络限制无法正常拉取 Docker 镜像的解决方案。作者所在的阿里云 Kubernetes 集群使用的是较旧版本的 containerd(1.2x),且无法直接通过 SSH 修改节点配置,因此采用了一种无需更改 Kubernetes 配置文件的方法。通过为 `docker.io` 添加 containerd 的镜像源,并使用脚本自动修改 containerd 配置文件中的路径错误(将错误的 `cert.d` 改为 `certs.d`),最终实现了通过多个镜像站点拉取镜像。作者还提供了一个可重复运行的脚本,用于动态配置镜像源。虽然该方案能缓解镜像拉取问题,
244 2
|
9月前
|
供应链 安全 Cloud Native
阿里云飞天企业版获【可信云·容器平台安全能力】先进级认证
阿里云飞天企业版容器系列产品获中国信息通信研究院【可信云·容器平台安全能力】先进级认证,这是飞天企业版容器产品获得《等保四级PaaS平台》和《 云原生安全配置基线规范V2.0》之后,本年度再一次获得行业权威认可,证明飞天企业版的容器解决方案具备符合行业标准的最高等级容器安全能力。
284 8
阿里云飞天企业版获【可信云·容器平台安全能力】先进级认证
|
7月前
|
安全 持续交付 云计算
课时5:阿里云容器服务:最原生的集成Docker和云服务
阿里云容器服务以服务化形式构建容器基础设施,大幅提升开发效率,简化应用部署流程。通过Docker容器和DevOps工具(如Jenkins),实现自动化部署与迭代,优化企业内部复杂部署问题。该服务支持GPU调度、混合云架构无缝迁移,并与阿里云产品体系无缝集成,提供安全防护、网络负载均衡等多重功能支持。凭借微服务架构,帮助企业突破业务瓶颈,提高资源利用率,轻松应对海量流量。
259 0
课时5:阿里云容器服务:最原生的集成Docker和云服务
|
8月前
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
8月前
|
弹性计算 人工智能 资源调度
DeepSeek大解读系列公开课上新!阿里云专家主讲云上智能算力、Kubernetes容器服务、DeepSeek私有化部署
智猩猩「DeepSeek大解读」系列公开课第三期即将开讲,聚焦阿里云弹性计算助力大模型训练与部署。三位专家将分别讲解智能算力支撑、Kubernetes容器服务在AI场景的应用实践、以及DeepSeek一键部署和多渠道应用集成,分享云计算如何赋能大模型发展。欲观看直播,可关注【智猩猩GenAI视频号】预约。 (239字符)
|
7月前
|
弹性计算 运维 负载均衡
课时3:阿里云专有网络VPC:让网络更加独立
阿里云专有网络VPC提供独立、安全的云上网络环境,支持自定义IP地址网段和灵活的路由配置。通过高速通道实现优质网络链路,可用性达99.95%,满足企业高要求的数据传输需求。VPC结合弹性公网IP、负载均衡SLB、Net网关等功能,帮助企业轻松管理网络资源,降低运维成本,实现高效、安全的混合云架构部署。
176 0
|
7月前
|
人工智能 Kubernetes Serverless
阿里云向全球客户推出创新容器计算服务ACS,可降低算力成本高达55%
阿里云向全球客户推出创新容器计算服务ACS,可降低算力成本高达55%
|
8月前
|
弹性计算 监控 持续交付
面对热点事件,阿里云如何通过云上弹性与容器服务帮助客户应对流量洪峰
面对热点事件,阿里云如何通过云上弹性与容器服务帮助客户应对流量洪峰
196 0
|
8月前
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。
|
9月前
|
监控 安全 Cloud Native
阿里云容器服务&云安全中心团队荣获信通院“云原生安全标杆案例”奖
2024年12月24日,阿里云容器服务团队与云安全中心团队获得中国信息通信研究院「云原生安全标杆案例」奖。