问题标签 [docker-ingress]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
docker - 无法在容器之间工作的 Windows Server 2019 入口网络上获取 Docker Swarm
我发现一些帖子提到了在 Windows Server 2019 上使用覆盖网络支持路由网格(在下面的参考资料中)。
经过大量故障排除后,我无法在使用以下网络和服务创建的用户定义覆盖网络上正确配置 2 个简单容器:
在端口 80 上浏览我的 docker 主机时,我能够访问 iis 网站,但是当我的其他容器位于同一个覆盖网络上时,它们pingweb
无法 ping 我的主容器。web
我还注意到,每当我的 pingweb 容器在覆盖网络上时,我都无法 ping 外部站点。我已经测试过 pinging 8.8.8.8
,但是在覆盖网络上运行时它不起作用,因为我得到的结果与Request timed out
尝试在网络上 ping 我的web
容器时相同testnet
。
问题):
- 这是一个已知的问题?
- 我怎样才能让它工作?
参考:
https://www.docker.com/blog/docker-windows-server-1709/
Windows 上的 Docker 入口模式服务发布
Windows 客户强烈要求与 Linux 服务发布选项保持一致。在 Windows Server 1709 中使用入口模式添加对服务发布的支持可以使用 Docker 的路由网格,允许外部端点通过 swarm 中的任何节点访问服务,而不管哪些节点正在为服务运行任务。
这些网络改进还解锁了使用覆盖网络时基于 VIP 的服务发现,因此 Windows 用户不限于 DNS 循环。
查看 Microsoft 虚拟化博客上的相应帖子,了解有关改进的详细信息。
docker - 当另一台主机宕机时,访问局域网中可用的 Docker Swarm 主机
我有一个包含 3 个服务(后端、前端、nginx)的堆栈。我已经在同一网络(LAN)(3 台不同的 PC)中的 3 台不同主机上的 Docker Swarm 上部署了这个堆栈。
假设这些主机的 IP 地址为
我将路由器设置为转发 192.168.1.13 的端口 80 到 80 的所有请求,对于 443 --> 443 也是如此。
所有三个节点都是管理器。当 192.168.1.13 关闭时,就会出现问题。然后,尽管所有服务都迁移到其他 2 台主机 192.168.1.55 和 192.168.8,但我的路由器仍然将我的所有请求转发到 192.168.1.13,因此有人无法访问我的应用程序。如果我更改路由器配置以将请求转发到任何其他可用主机,则该应用程序正在运行。
我的问题是:
有没有办法配置我的路由器以将我的请求转发到位于我所有主机之上的虚拟 IP?还有其他方法可以解决我的问题吗?我考虑过 Keepalived 将关闭主机的 IP 转移到另一个启动但我不喜欢这个解决方案,我担心它会与我在路由器设置中完成的静态 IP 绑定发生冲突(我已经绑定每个主机的 MAC 地址到特定 IP,例如 192.168.1.13 等)。我已经阅读了有关 HAProxy 的信息,但除了不确定它是否能解决我的问题之外,理想情况下,如果我能以某种方式使用负载均衡器中内置的 docker swarm,我不想添加额外的服务。docker swarm 入口网络能以某种方式挽救我的生命吗?
我的堆栈 docker-compose 文件如下:
在此先感谢,我希望我能清楚地解释我的问题。
PS:我知道depends_on
在堆栈部署中被忽略了,但我忘了删除它。
docker - Docker节点级负载平衡不起作用
我有两台笔记本电脑,Ubuntu-14 和 Mac (Big Sur),它们都安装了 docker(支持 swarm)。
- 我使用 Ubuntu 作为我的 Swarm 管理器(和)Mac 作为我的工作节点。
- Ubuntu 私有 IP 是 192.168.0.14(和)Mac 私有 IP 是 192.168.0.11 [私有 IP 可以毫无问题地公开共享,因为每个 C 类网络都有相同的 IP:P]
- “docker swarm init --advertise-addr”是我用来制作我的 Ubuntu 主机、Manager(和)我在 Mac 中输入 join 命令以使 Mac 节点作为工作人员加入 Swarm 的命令。
所以,在高层次上,我使用了 docker-compose.yml (它只有 1 个 python webservice)。使用 compose 文件,我启动了一个“docker stack”,然后将“python webservice”实例复制到 5。所有这些操作都在 Manager 节点中执行。
Ubuntu 管理器节点(也有 2 个容器实例并充当工作者)(并且)Mac 节点有 3 个“python webservice”容器实例。我已将“端口”设置为“80:1234”,这意味着如果我点击主机的端口 80,它将重定向到容器内运行的 1234 的“python 应用程序 Web 服务端口”。
当我点击 Manager IP (192.168.0.14:80) 大约 50 次,当我检查 Mac 和 Ubuntu 中所有 5 个容器的日志时,我发现 Ubuntu 中的所有 2 个容器,每个都有 25 个命中(一轮robin 时尚)但是,我找不到 Mac 机器中存在的任何容器的任何日志。
这是预期的行为吗?
- 只有当我直接点击 Mac 机器(worker)的 IP 地址(192.168.0.11:80)时,我才能获得 Mac 机器中存在的容器的日志/请求命中。
因此,这里发生了两种类型的负载平衡,
当我点击(工人/经理的)IP:端口时,只有该工人/经理机器中存在的容器将被负载平衡并以循环方式提供服务(我可以看到这是使用的算法)。让我们将此负载平衡类型命名为“容器级负载平衡器”
但是,当我点击 192.168.0.14(管理器 IP)时,我预计负载将在部署在 2 个节点上的所有 5 个容器之间平衡。不知何故,这不起作用。我们称之为“节点级负载均衡器”
我已经尝试在谷歌中搜索很多,但一无所获。大多数站点都使用 Nginx、HaProxy 负载均衡器等外部技术来解决“节点级负载均衡器”。
docker 本身没有开箱即用的支持吗?
编辑 1 - 添加了 docker-compose.yml 作为 Metin 在评论部分提出的要求
码头工人-compose.yml
google-cloud-platform - 云运行服务到来自同一项目内的服务请求仍被 Ingress=Internal 阻止
我已经设置了 nodejs 和 python 云运行服务。nodejs 前端调用 python 服务,当 ingress=all 时请求工作,但是当我更改为 ingress=internal 时,它会阻止我的服务来服务请求。
我尝试使用 VPC 连接器并通过 nodejs 服务中的 VPC 连接器路由所有出口,但这并不能解决问题。
我对 ingress=internal 应该如何工作有误吗?我认为它会阻止任何东西,除了来自同一项目中的服务的请求,它就是这样。
任何人有任何想法,甚至我可以在哪里找到一些日志以至少帮助诊断问题?
docker - Docker Swarm Mode 违反了创建时的约束?
我目前正在尝试在 docker swarm 中部署 psql 集群,因此我创建了一个当前有 2 个节点的 swarm。(psql_manager, psql_worker1)
我的计划是有一个我可以从外部使用的主节点和用于提供无写入查询的辅助节点。我唯一的问题在于 docker swarm 创建服务的方式。
到目前为止我当前的命令(经理):
和副本:
预期的结果是创建了一项服务:可以立即工作的主要服务。并且工作人员将获得副本并且随后也将工作(在全局参数上工作)。没有端口冲突或任何东西,因为它会违反约束检查。但无论如何我都会发生碰撞
有一个选项可以启用发布方法主机,但这会关闭入口网格路由,我想使用它(顺便说一句,它可以正常工作,没有冲突)。
为什么在启用了入口网格的情况下,约束不能像预期的那样工作?
docker - 入口 Nginx 返回 500 内部服务器错误而不是 400 错误请求(auth-url 响应)
每当从 auth-url 收到的 401,402、403..etc http 状态响应(除了 400 入口)正确地向客户端发送身份验证响应,但如果 400 错误请求入口发送为 500 内部服务器错误,并且它也不向客户端返回身份验证响应*
请找到入口文件、日志和响应
入口文件
入口日志
每当从 auth-url 收到的 401,402、403..etc http 状态响应(除了 400 入口)正确地向客户端发送身份验证响应,但如果 400 错误请求入口发送为 500 内部服务器错误并且它不向客户端返回身份验证响应
回复:
docker - Docker swarm 入口 - 无法通过两个网络连接
我试图在两个不同的网络上运行 docker swarm。
- 第一个网络是 10.10.100.x/24
- 第二个网络是 10.10.150.x/24
两个网络可以互相看到。它们之间没有防火墙规则来阻止任何流量。具体来说,我测试了 7946 TCP 和 UDP 以及 4789 UDP。我可以确认,我可以在两个端口和两个协议上从第一个网络连接到第二个网络。而且从第二个网络到第一个网络也没有任何问题。
Docker swarm 启动并运行,使用的引擎是20.10.11
我可以看到所有节点都有status=Ready和availability=Active。
入口网络是默认的:
我也可以看到那里列出的所有同行。
但是,当我使用 port 将任何服务部署到任何节点时-p 20000:80
,我只能从部署它的网络中看到该节点。
- 如果服务登陆第一个网络,它只能通过来自第一个网络的节点访问,而不是来自第二个网络。
- 如果服务登陆第二个网络,它只能通过来自第二个网络的节点访问,而不是来自第一个网络。
任何想法如何解决这个问题?
谢谢
更新1:
尝试使用附加参数运行 swarm docker swarm init --default-addr-pool 172.100.0.0/16
。结果保持不变。
更新 2:基于@BMitch 的建议
我用 验证sudo tcpdump -nn -s0 -v port 4789 or 7946
,端口 7946 有效(UDP 和 TCP)。我还使用前面的tcpdump
命令和nc -z -v -u 10.10.150.200 4789
(从第一个网络运行)验证了端口 4789 也可以正常工作。