gpt4 book ai didi

docker - 在 docker swarm 中禁用外部节点服务可访问性

转载 作者:行者123 更新时间:2023-12-02 17:54:09 25 4
gpt4 key购买 nike

我有一个带有 2 个节点的 docker swarm,每个节点在全局模式下运行 2 个服务,因此每个节点都有 2 个服务在其中运行。我的问题是如何强制 node1 中的 ubuntu 服务只连接到 node1 中的 mysql 服务,而不是使用循环方法来选择 mysql 服务。
因此,当我使用 mysql -hmysql -uroot -p 从 node1 中的 ubuntu 连接到 mysql 时它只选择 node1 中的 mysql。
这是描述我的案例的 docker-compose 文件

version: '3.8'
services:
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
networks:
app-net: {}
deploy:
mode: global
ubuntu:
entrypoint: tail -f /dev/null
deploy:
mode: global
image: ubuntu:20.04
networks:
app-net: {}
networks:
app-net: {}
当我尝试连接到 mysql 时,ubuntu 容器中的这个 docker-compose 文件会使用循环算法在两个节点中选择 mysql 服务。
我试图实现的是强制每个服务仅对同一节点内的服务可见。

最佳答案

我想不出一种简单的方法来通过覆盖网络在群中实现您想要的目标。但是,您可以使用 unix 套接字代替网络。只需创建一个卷,将其安装到 MySQL 和您的应用程序中,然后让 MySQL 将其套接字放到该卷上。 Docker 将在每个节点上创建一个卷,因此您将在节点内关闭您的通信。
如果您坚持使用网络通信,您可以将节点的 Docker 套接字挂载到您的应用程序容器中,并使用它来查找在该节点上运行 MySQL 的容器的名称。获得名称后,您可以使用它连接到服务的特定实例。现在,它不仅难以制作,而且是一种反模式和安全威胁,所以我不建议你实现这个想法。
最后还有 Kubernetes,其中 pod 内的容器可以通过 localhost 相互通信,但我认为您不会走那么远,对吗?

关于docker - 在 docker swarm 中禁用外部节点服务可访问性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63720122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com