开发者社区 > 云原生 > 容器服务 > 正文

ACK集群上部署docker swarm集群,pod之间无法通信,怎么解决?

已解决

配置:一台ECS,一个ACK集群

ECS作为docker swarm的manager节点,并且搭建了私有仓库,仓库内二十几个镜像,ECS作为控制节点管理整个应用。

使用ACK集群,私有镜像基于docker:dind进行制作的自定义镜像。

启动集群node和pod后,利用kubectl让pod加入swarm集群,并且从私有仓库拉取镜像启动容器。

问题:

swarm集群内,服务无法互访。

经过初步排查,是swarm的data端口问题,将swarm默认的4789改为5789,再启动,仍无法互访。通过tcpdump抓包发现,正常的swarm集群在4789上的通信包含VXLAN,而ACK集群中没有,想问具体原因是什么,如何解决。

正常的抓包情况: image.png

异常的抓包情况: image.png

展开
收起
dddknight 2023-05-17 17:52:49 42674 0
6 条回答
写回答
取消 提交回答
  • 云端行者觅知音, 技术前沿我独行。 前言探索无边界, 阿里风光引我情。
    采纳回答

    你可以检查下容器网络配置、CK集群配置、Docker容器配置。

    2023-05-17 18:48:39
    赞同 1 展开评论 打赏
  • 月移花影,暗香浮动

    在部署docker swarm集群至ACK集群上时,如果出现pod之间无法通信的情况,可能有以下原因和解决方法:

    1. 网络问题:检查pod之间是否在同一网络上,网络是否正常连接。

    2. 防火墙问题:检查防火墙是否阻止了pod之间的通信。可以在ACK控制台上针对服务和实例配置网络安全组规则开放对应端口。

    3. 容器映像问题:检查docker swarm中使用的容器映像及其配置是否正确,包括镜像暴露的端口号、容器启动时的CMD和ENTRYPOINT命令等。

    4. 节点问题:检查ACK节点上的系统日志,看看是否有任何错误信息,包括节点是否因CPU或内存限制过于严格而导致pod无法正常运行。

    5. 服务发现问题:检查docker swarm中使用的服务发现机制是否正确,例如是否正常使用docker dns或consul等服务发现机制。

    希望以上解决方法可以帮助您解决pod之间无法通信的问题。

    2023-05-29 10:10:52
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    根据你提供的信息,可以初步判断问题是由于ACK集群不支持VXLAN引起的。VXLAN是一种虚拟网络技术,用于在物理网络之上创建虚拟网络,以支持跨主机的容器通信。而ACK集群可能不支持VXLAN,导致容器无法互相通信。

    解决方法可以尝试使用其他的容器网络方案,例如Calico、Flannel等。这些方案都可以在不依赖VXLAN的情况下实现容器之间的通信。具体操作可以参考官方文档或者相关教程。

    另外,可以考虑将ACK集群中的节点加入到swarm集群中,这样可以使用swarm本身的网络功能,而不需要依赖ACK集群的网络。具体操作可以参考相关文档或者教程。

    2023-05-18 17:03:06
    赞同 展开评论 打赏
  • 根据您提供的信息,问题可能出现在 ACK 集群与 Docker Swarm 集群之间的网络通信设置上。从抓包结果上看,正常集群的通信包含 VXLAN 协议,而异常集群中没有,这可能导致数据包无法在集群之间正确传递。

    建议进行以下排查或操作:

    1. 检查 ACK 集群中的网络配置是否正确。例如,确认集群 Worker 节点是否正确设置了网络,Worker 节点是否可以和 Docker Swarm 管理节点通信等。

    2. 确认 ACK 集群与 Docker Swarm 集群之间的网络互通是否正常。可以尝试 ping 对方 IP 地址或者在网络环境没问题的情况下尝试通过 curl 等方式访问 Docker Swarm 集群内的应用。

    3. 检查 Docker Swarm 集群内的容器网络是否正确配置。确认容器网络设置是否正确,例如网络模式、子网段是否重叠等。例如可以通过执行 docker network lsdocker network inspect 命令来查看 Docker Swarm 集群内所有可用的网络及其详细信息。

    4. 使用 nctelnet 等工具测试容器之间是否可以互相访问,例如 nc -zv <目标IP> <端口>

    2023-05-18 08:34:48
    赞同 展开评论 打赏
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    您好,如果在阿里云容器服务Kubernetes版(ACK)上部署docker swarm集群后,pod之间无法通信,可以尝试以下解决方法:

    1. 检查网络配置是否正确:确保所有 pod 都在同一个 overlay 网络中,并且网络插件已正确配置。

    2. 检查防火墙规则:确保防火墙规则已正确配置,允许 pod 之间的通信。

    3. 检查 DNS 配置:确保 DNS 配置正确,可以通过 kubectl exec 命令进入容器内部,检查能否通过 DNS 解析其他 pod 的域名。

    4. 检查容器日志:检查容器日志,查看是否有任何错误或异常信息。

    5. 检查服务发现配置:如果使用了服务发现功能,需要确保服务发现配置正确。

    2023-05-17 23:43:10
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    可以尝试以下几种方法:

    • 检查网络配置
    • 检查容器端口映射
    • 检查防火墙设置
    • 检查 hostnames 和 DNS 解析
    • 检查容器日志
    2023-05-17 19:02:54
    赞同 展开评论 打赏
滑动查看更多

国内唯一 Forrester 公共云容器平台领导者象限。

相关产品

  • 容器服务Kubernetes版
  • 相关电子书

    更多
    ACK 云原生弹性方案—云原生时代的加速器 立即下载
    ACK集群类型选择最佳实践 立即下载
    企业运维之云原生和Kubernetes 实战 立即下载