容器服务为 swarm mode 集群创建的网络为集群范围的网络。处于同一网络内的容器可以通过容器 IP 进行互相访问。
示例
在本示例中,集群 [backcolor=transparent]swarmmode 中部署了两个应用 [backcolor=transparent]test1 和 [backcolor=transparent]test2,部署在集群内不同的节点上。[backcolor=transparent]test1 和 [backcolor=transparent]test2 都加入了网络 swarmmode。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在阿里云中,虽然直接提及 Swarm Mode 的上下文可能更多关联到 Docker 自身的原生集群管理功能,但阿里云容器服务 ACK(Alibaba Cloud Container Service for Kubernetes)提供了更高层次的容器编排能力,与 Docker Swarm 类似,它也允许用户在 Kubernetes 集群范围内创建网络,并让处于同一网络内的 Pod(Kubernetes 中的最小部署单元,类似于 Docker 容器概念)能够通过 IP 相互通信。
ACK 基于 Kubernetes 网络模型,使用 CNI(Container Network Interface)插件来实现容器间的网络互联。默认情况下,每个 Pod 都会获得一个集群范围内的唯一 IP 地址,且不论这些 Pod 被调度到哪个节点上,它们都可以通过这个 IP 进行通信。
在 ACK 中,你不需要显式地为每个应用或服务创建网络,因为 Kubernetes 本身的设计就包含了网络插件来自动处理网络配置。当你在 ACK 上部署应用时,可以通过以下方式实现类似示例中的网络互通:
使用默认网络:ACK 集群默认配置了 Flannel、Terway 等网络插件,这些插件会为每个 Pod 分配 IP,并确保跨节点的网络连通性。
部署多应用:你可以通过 kubectl
或者阿里云容器服务控制台部署多个 Deployment 或 StatefulSet,每个 Deployment/StatefulSet 代表一个应用(如 test1 和 test2)。由于它们共享同一个集群网络,因此可以相互通信。
访问 Pod IP:在其中一个应用的 Pod 内,可以直接使用另一个应用的 Pod IP 进行访问,无需额外配置路由或防火墙规则。如果需要获取特定 Pod 的 IP,可以通过 kubectl get pods -o wide
命令查看。
假设您已经部署了两个应用 test1
和 test2
,并且它们都运行在 ACK 集群的不同节点上:
检查 Pod IP:
kubectl get pods -l app=test1 -o jsonpath='{.items[0].status.podIP}'
kubectl get pods -l app=test2 -o jsonpath='{.items[0].status.podIP}'
从 test1 访问 test2: 如果 test2
提供了一个服务(比如 HTTP),您可以直接使用其 ClusterIP、NodePort、LoadBalancer 或 Ingress 来访问,或者在 test1
的 Pod 内部直接通过 Pod IP 访问(对于调试等场景)。
请注意,出于安全考虑,直接通过 Pod IP 访问其他 Pod 在生产环境中可能不是最佳实践,推荐使用 Kubernetes Service 对象来定义稳定的服务访问接口。