问题标签 [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.
kubernetes - 带有 Ingress 设置的 GKE 总是给出状态不健康
首先,我在https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer测试了本教程
效果很好。我还测试了相同的教程,但还添加了一个 tls 密码来测试 https,它也可以正常工作。
当我创建自己的图像时,我的问题就出现了。这是我采取的步骤:
- Dockerfile:
- Dockerfile 使用如下所示的 docker-compose 文件运行:
- 在本地,这可以正常工作。接下来我要做的是将它推送到 Container Registry。
- 之后我创建一个容器:
- 然后我暴露它:
- 然后我运行以下入口文件:
用命令:
- kubectl 描述服务
- kubectl 描述部署
- kubectl 描述
- 3-5 分钟后,我变得不健康,我不知道为什么,因为设置几乎与他们的设置完全相同。
我已经阅读了无数关于当你得到不健康的后端状态时该怎么做的帖子,但没有一个有帮助。在本教程中提到添加防火墙规则提及:https ://cloud.google.com/compute/docs/load-balancing/health-checks我已添加,但没有帮助。
如果您有任何建议,我很乐意对其进行测试。
docker - Docker swarm 阻止节点参与入口网络
很可能是一个非常微不足道的问题,但我在文档中找不到有关此类功能的任何内容。从路由网格文档中我们知道:
所有节点都参与一个入口路由网格。路由网格使 swarm 中的每个节点都可以在已发布的端口上接受在 swarm 中运行的任何服务的连接,即使该节点上没有运行任何任务。路由网格将所有传入请求路由到可用节点上的已发布端口到活动容器。
但是,我不希望某些节点参与路由网格,但我仍然希望它们参与托管服务。
我试图实现的配置看起来有点像这样:
我有一个服务,hello-world
有三个实例,每个节点上一个。
在这个例子中,我只想node-1
和node-2
参与外部化ingress
网络。但是,当我访问时10.0.0.3
,它仍然会暴露端口80
,443
因为它仍然必须有ingress
网络才能运行容器hello-world
,我不希望这种情况发生。
从本质上讲,我希望能够为托管 port 80
& 443
on的服务运行容器,而无需通过在 Web 浏览器中10.0.0.3
访问来访问它。10.0.0.3
有没有办法配置这个?即使节点上没有运行容器,它仍然会将流量转发到正在运行的容器。
谢谢!
amazon-web-services - 不同 EC2 实例之间的入口和出口规则的使用
我在一个 ec2 实例上有一个 jupyter 笔记本,它想要从部署在其他 ec2 实例上的数据服务中获取数据。我应该在两个实例上相互设置入口和出口规则吗?我是这个领域的新手,所以任何解释都值得赞赏!:)
docker - 不同数据中心之间的 Docker 覆盖网络
全部。我正在学习 Docker。但是仍然找不到任何关于 Docker 入口网络如何连接多个独立主机的文档。
我在不同的数据中心有 2 个虚拟机,并希望在它们上创建 swarm 集群。默认安装的入口网络是否有可能使 vm1 上的容器对某个覆盖网络内的 vm2 上的容器可见?或者 vm1 和 vm2 都应该在同一个本地网络中?
kubernetes-ingress - 在 Rancher 上访问 Kubernetes 节点时使用哪个 URL/IP?
我正在尝试向牧场主集群之外的世界公开服务。
Api1.mydomain.com、api2.mydomain.com 等应该可以访问。
在牧场主内部,我们有几个集群。我尝试专门使用一个集群。它跨越 3 个节点 node1cluster1、node2cluster1 和 node2cluster1。
我在 Rancher 集群中添加了入口,将 api1.mydomain.com 的服务请求转发到特定的工作负载。
在我们的 DNS 上,我输入了要转发的 api1.mydomain.com,但它还没有工作。
我应该使用哪个 IP URL 来输入 DNS?应该是rancher.mydomain.com,rancher的web gui运行的地方吗?它应该是具有入口(Node1cluster1)的集群的单个节点吗?
这两种选择似乎都不理想。这样做的正确方法是什么?
我正在寻找一种向外界公开完整网址的解决方案。(公开端口不是一种选择,因为公司 dns 无法转发给它们。)
kubernetes-ingress - 如何使 websocket 在 kubernetes 入口中工作?
我正在对接我们当前的应用程序并在 kubernetes 集群上进行部署。我们有 2 个服务,即服务 A 和服务 B。我们的一项服务(例如 service-A)使用 websocket。我们在 ingress 中配置了一条规则,将 websocket 请求直接路由到端口 8080 上的 service-A。还有一个规则将其他请求路由到端口 443 上的 service-B。但是 ingress 控制器总是将 websocket 请求路由到 service-B路由到服务-A。
因此,我从入口中删除了 service-B 规则,但仍将其路由为 tls 请求,并且请求永远不会到达 service-A。不知道为什么它被重新路由为 TLS 而不是 http 请求升级到 websocket 连接。
请在下面找到我的入口配置:
我希望将请求路由到服务 A 而不是服务 B。如果我在配置中遗漏了什么或做错了什么,请告诉我。
提前致谢。
docker - 无法通过 VM IP 连接到我的 docker 应用程序
在底部解决
但是为什么我必须附加:4000?
我在这里遵循 docker 入门指南,https://docs.docker.com/get-started/part4/
我相当确定我已经正确完成了所有操作,但我想知道为什么在部署后我无法连接以查看应用程序。
我已将我的环境设置为我的虚拟机 myvm1,以供参考以下命令。
码头集装箱 ls -a
泊坞窗图像 ls -a
码头工人栈 ls
码头机器 ls
docker stack ps getstartedlab
卷曲 192.168.99.100
码头工人信息
当我在本地机器上而不是在集群中的虚拟机上运行它时,我希望看到我能看到的内容(我认为我的术语是正确的?)
不知道如何检查打开的端口。
再次:如果我只是删除堆栈,取消设置 docker-machine 环境,然后运行:
docker stack deploy -c docker-compose.yml getstartedlab
not on the vm,这将有效。
先感谢您。(另外,我是新手,因此是入门指南,所以我很感激任何帮助)
编辑
如果我将 :4000 附加到我的 url 中的 VM IP,例如:192.168.99.100:4000 或 192.168.99.101:4000,它会起作用。它显示了 myvm1 的“docker container ls”中列出的两个容器 ID,其他三个来自 myvm2。谁能告诉我为什么我必须追加 4000?是因为我的 docker-compose.yml 中有端口:“4000:80”吗?
ssl - 路径在 Kubernetes NGINX 入口控制器中不起作用
我有一个 Spring Boot 应用程序负责获取公民和一个配置了 ssl-passthrough 的 NGINX Ingress 控制器,以将我的集群暴露给外部。
当我这样做时: https ://myhostname.com/citizens
它完美地工作。这是我正在使用的配置:
但我想有类似的东西:
https://myhostname.com/myservice/citizens
这将类似于 kubernetes 文档中描述的数学简单扇出方法: https ://kubernetes.io/docs/concepts/services-networking/ingress/#simple-fanout
因此,在我的 Spring 应用程序中,我配置了一个 contextPath,所以当我在本地配置时: https://localhost:8080/myservice/citizens
我得到了想要的结果
对于 NGINX,我设置了以下内容:
我究竟做错了什么?
解决方案: 我一直在研究一点,我意识到我试图实现的方法对于 ssl-passthrough 是不可能的,因为代理是盲目的,它不知道路由流量的路径。
因此,解决方案是使用子域而不是路径,因为借助 SNI 协议,NGINX 控制器将知道客户端试图连接到哪个主机名。
最终的解决方案将与此类似
docker - Docker swarm:节点未加入入口网络
我正在玩 Docker swarm,
我有一个三节点集群、1 个管理器和 2 个工作节点。我正在使用我VIP
的所有服务。
我有一个奇怪的情况,我重新启动了工作节点。
我执行docker node ls
了,工作节点是Ready
.
docker service ls
会告诉我工人中容器的复制是好的。
问题:我无法通过入口网络加入节点。其他节点中的任何容器都无法访问该工作节点中的容器。
我检查了它们都加入入口网络的容器。
我从同一个节点内卷曲了容器,它们做出了响应。
我从一个容器中 ping 了服务名称(在同一个故障节点中)并且它起作用了。
我从经理那里将工人容器卷曲在工人中不起作用!
我用工人的 IP 地址蜷缩起来,他们回应了。
我重新启动了工作节点,但问题仍然存在,然后我重新启动了整个集群,它又工作了!
我刚才目睹的事情有什么解释吗?
我最担心这会发生在生产环境中。
先感谢您。
docker - Windows Server 2019 上的 Docker Swarm、Windows 容器、入口网络(路由网格)
我想在 Windows 上构建 docker swarm 集群。为此,我Windows Server 2019
在1809
版本中选择。我在本地机器上工作,并使用vm.box=StefanScherer/windows_2019
我为开发目的创建环境的 Vagrant 盒子。
- 设置主机名。
- 设置专用网络(192.168.52.100)
- 安装 Docker-EE
在这个 Windows 上,我使用 command 安装了 docker-ee Install-Package Docker -ProviderName DockerMsftProvider -RequiredVersion 19.03 -Force
,并且 docker 工作得很好。
docker version
一切正常docker run -it --rm -p 8000:80 --name aspnetcore_sample mcr.microsoft.com/dotnet/core/samples:aspnetapp
-> 也可以完美运行。
我的第一个问题是当我执行命令时,docker swarm init --advertise-addr=192.168.52.100
我注意到我的互联网连接丢失了一段时间(也是 init/join/leave)。
第二个问题是路由网格,它不起作用
重现步骤:
docker service create --publish published=8050,target=80,mode=ingress --name aspnetcore_sample mcr.microsoft.com/dotnet/core/samples:aspnetapp
- 打开网络浏览器http://127.0.0.1:8050/(在我初始化 swarm 的机器上)
现在我应该可以在 8050 端口下访问这个示例应用程序了。但http://127.0.0.1:8050/不工作
我知道我可以使用mode=host
,但我认为mode=ingress
应该可以。
我还在linux上用相同的命令检查了它,它没有任何问题
我该如何解决这个问题?