使用阿里云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!







相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云专有网络VPC使用教程
专有网络VPC可以帮助您基于阿里云构建出一个隔离的网络环境,并可以自定义IP 地址范围、网段、路由表和网关等;此外,也可以通过专线/VPN/GRE等连接方式实现云上VPC与传统IDC的互联,构建混合云业务。 产品详情:https://www.aliyun.com/product/vpc
相关文章
|
15天前
|
运维 Kubernetes Java
阿里云容器计算服务ACS ,更普惠易用、更柔性、更弹性的容器算力
ACS是阿里云容器服务团队推出的一款面向Serverless场景的子产品,基于K8s界面提供符合容器规范的CPU及GPU算力资源。ACS采用Serverless形态,用户无需关注底层节点及集群运维,按需申请使用,秒级按量付费。该服务旨在打造更普惠易用、更柔性、更弹性的新一代容器算力,简化企业上云门槛,加速业务创新。ACS支持多种业务场景,提供通用型、性能型及BestEffort算力质量,帮助客户更从容应对流量变化,降低综合成本。
|
2月前
|
专有云 Serverless 持续交付
亚太唯一,阿里云再度入选Gartner®容器管理魔力象限领导者
Gartner正式发布 2024《容器管理魔力象限》报告,阿里云再度成为中国唯一一家入选「领导者象限」的科技公司。
|
1天前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
15天前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
本文整理自2024云栖大会冯诗淳(花名:行疾)的演讲,介绍了阿里云容器服务团队在生产级可观测体系建设方面的实践。冯诗淳详细阐述了容器化架构带来的挑战及解决方案,强调了可观测性对于构建稳健运维体系的重要性。文中提到,阿里云作为亚洲唯一蝉联全球领导者的容器管理平台,其可观测能力在多项关键评测中表现优异,支持AI、容器网络、存储等多个场景的高级容器可观测能力。此外,还介绍了阿里云容器服务在多云管理、成本优化等方面的最新进展,以及即将推出的ACK AI助手2.0,旨在通过智能引擎和专家诊断经验,简化异常数据查找,缩短故障响应时间。
阿里云ACK容器服务生产级可观测体系建设实践
|
15天前
|
供应链 安全 Cloud Native
阿里云容器服务助力企业构建云原生软件供应链安全
本文基于2024云栖大会演讲,探讨了软件供应链攻击的快速增长趋势及对企业安全的挑战。文中介绍了如何利用阿里云容器服务ACK、ACR和ASM构建云原生软件供应链安全,涵盖容器镜像的可信生产、管理和分发,以及服务网格ASM实现应用无感的零信任安全,确保企业在软件开发和部署过程中的安全性。
|
15天前
|
人工智能 Kubernetes Cloud Native
阿里云容器服务,智算时代云原生操作系统
2024云栖大会,阿里巴巴研究员易立分享了阿里云容器服务的最新进展。容器技术已成为云原生操作系统的基石,支持多样化的应用场景,如自动驾驶、AI训练等。阿里云容器服务覆盖公共云、边缘云、IDC,提供统一的基础设施,助力客户实现数字化转型和技术创新。今年,阿里云在弹性计算、网络优化、存储解决方案等方面进行了多项重要升级,进一步提升了性能和可靠性。
|
15天前
|
人工智能 Cloud Native 调度
阿里云容器服务在AI智算场景的创新与实践
本文源自张凯在2024云栖大会的演讲,介绍了阿里云容器服务在AI智算领域的创新与实践。从2018年推出首个开源GPU容器共享调度方案至今,阿里云容器服务不断推进云原生AI的发展,包括增强GPU可观测性、实现多集群跨地域统一调度、优化大模型推理引擎部署、提供灵活的弹性伸缩策略等,旨在为客户提供高效、低成本的云原生AI解决方案。
|
15天前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。
|
15天前
|
人工智能 运维 Kubernetes
拥抱智算时代:阿里云容器服务智能、托管、弹性新体验
本文总结了2024云栖大会容器计算专场的演讲内容,重点介绍了阿里云容器服务的新产品体验,包括智能、托管、弹性的特点,以及如何助力客户拥抱智算时代。文中还分享了多项实际案例和技术细节,展示了阿里云容器服务在提升用户体验和解决实际问题方面的努力。
|
22天前
|
人工智能 Kubernetes Cloud Native
荣获2024年AI Cloud Native典型案例,阿里云容器产品技术能力获认可
2024全球数字经济大会云·AI·计算创新发展大会,阿里云容器服务团队携手客户,荣获“2024年AI Cloud Native典型案例”。