将外部流量从独立的nginx服务路由到kubernetes节点端口服务
目标 我想通过独立的nginx服务和microk8s节点端口服务访问kubernetes仪表板 上下文 我有一台linux服务器。 在此服务器上,有多个正在运行的服务,例如:将外部流量从独立的nginx服务路由到kubernetes节点端口服务,nginx,kubernetes,Nginx,Kubernetes,目标 我想通过独立的nginx服务和microk8s节点端口服务访问kubernetes仪表板 上下文 我有一台linux服务器。 在此服务器上,有多个正在运行的服务,例如: 微K8S nginx(注意:我没有使用入口,nginx服务独立于microk8s工作) 以下是我正在寻找的工作流程: http://URL/dashboard NGINX服务(从http://URL/dashboard到nodeIpAddress:nodeport) 节点端口服务 kubernetes仪表板服务 问题:
- 微K8S
- nginx(注意:我没有使用入口,nginx服务独立于microk8s工作)
非常感谢您的帮助。我将在这里总结整个问题和解决方案 首先,需要公开Kubernetes仪表板的服务需要指向正确的目标端口,还需要选择正确的Pod(Kubernetes仪表板Pod) 如果您通过以下方式检查您的服务:
kubectl desribe service <service-name>
请注意尾部的斜杠,即URI,这意味着匹配代理规则的位置被重写为/。这意味着您的\u url/仪表板将成为您的\u url/
如果没有尾部斜杠,您的位置将按原样传递给目标,因为目标是唯一的端点
如果您需要更复杂的URI更改,您要搜索的是重写规则(它们支持regex和更多),但是添加尾部斜杠应该可以解决第二个问题。确实是@AndD,您建议我执行以下命令:
sudo microk8s kubectl describe service -n kube-system kubernetes-dashboard
为了获得以下信息
- 标签:k8s app=kubernetes仪表板
- 目标端口:8443/TCP
spec:
type: NodePort
k8s-app: 'kubernetes-dashboard'
ports:
- protocol: TCP
port: 8443
targetPort: 8443
nodePort: 30000
但是,我确实将nginx配置更改为
proxy_pass https://51.68.123.169:30000/
我确实收到了一个成功的响应(html),然后所有剩余的请求都有404状态(js、css、assets)
编辑 html文件包含一组依赖项(js/img/css)
...
因此,它尝试使用以下URL获取这些资产:
- https://URL/styles.3aaa4ab96be3c2d1171f.css
- https://URL/runtime.3e2867321ef71252064e.js
- https://URL/dashboard/styles.3aaa4ab96be3c2d1171f.css
- https://URL/dashboard/runtime.3e2867321ef71252064e.js
此外,我得到了一个与詹金斯类似的问题,但詹金斯图像包含一个参数,修复了这个问题。 docker run--publish 8080:8080--env JENKINS_OPTS=“--prefix=/subpath”JENKINS/JENKINS 我本想找到与kubernetesui/dashboard类似的东西,但我没有找到任何东西
嗯,我不知道如何很好地配置nginx,以便在子路径中正确显示仪表板,并且我在kubernetes\dashboard映像中没有找到任何参数来处理子路径。如果在仪表板节点端口端点手动执行,它工作吗?当我执行:sudo microk8s kubectl get ep-n kube system kimchi nodeport service>kimchi nodeport service enpoint=时,我假设您希望我使用节点端口服务的集群ip而不是节点ip。当我这样做时,我从nginx配置接收到一个err_emtpy_响应,所有内容都在path/dashboard下,但可能kubernetes dashboard会在/path处预期请求。如果是这种情况,您可以尝试在nginx配置中使用重写目标?很好的尝试,我将位置从/dashboard更改为/,但在使用节点ip地址或节点端口服务群集ip时,我仍然有相同的行为。谢谢您的时间,您能用Descripte(或get with option-oyaml)检查kubernetes仪表板服务吗?要检查Kubernetes仪表板盒是否正在443或其他端口(使用targetPort)上侦听,即使在path/Dashboard/(尾部斜线在末尾)下为Kubernetes仪表板提供服务,是否也会发生这种情况?404错误之一的路径请求是什么?您好,即使是path/dashboard/下的dashboard也不起作用。我刚刚编辑了我的消息来解释html文件的依赖性问题。
proxy_pass https://51.68.123.169:30000/
<link rel="stylesheet" href="styles.3aaa4ab96be3c2d1171f.css"></head>
...
<script src="runtime.3e2867321ef71252064e.js" defer></script>