目标 我想通过独立的 nginx 服务和 microk8s nodeport 服务访问 kubernetes 仪表板。
上下文 我有一个 linux 服务器。 在这台服务器上,有几个正在运行的服务,例如:
这是我正在寻找的工作流程:
问题: 但是,每次我请求 http:// URL /dashboard 时,我都会收到 502 错误请求 的回答,我错过了什么?
配置 请在下面找到nginx配置、节点端口服务配置和microk8s集群状态:
nginx configuration: /etc/nginx/site-availables/default
node-port-service configuration
非常感谢您的帮助。
答案 0 :(得分:1)
我将在这里总结整个问题和解决方案。
首先,需要暴露Kubernetes Dashboard的服务需要指向正确的目标端口,并且还需要选择正确的Pod(kubernetes-dashboard Pod)
如果您通过以下方式检查您的服务:
kubectl desribe service <service-name>
通过查看端点部分,您可以轻松查看它是选择了一个 Pod(或多个)还是什么都不选择。通常,您的服务应该具有与标准 kubernetes-dashboard 服务相同的选择器、端口、目标端口等(暴露仪表板但仅在集群内部)
其次,您的 NGINX 配置将位置 /dashboard 代理到服务,但问题是 kubernetes-dashboard Pod 期望请求直接到达 /,因此路径 /dashboard 对其毫无意义。
要解决第二个问题,有几种方法,但都在NGINX配置中。如果您阅读模块代理(又名 http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass)的文档,您会发现解决方案是在配置中添加一个 URI,如下所示:
proxy_pass https://51.68.123.169:30000/
注意尾部的斜杠,也就是URI,表示匹配代理规则的位置被改写为/。这意味着 your_url/dashboard 将变成 your_url/
没有尾部斜杠,您的位置将按原样传递给目标,因为目标仅是端点。
如果您需要更复杂的 URI 更改,您要搜索的是重写规则(它们支持正则表达式等等),但添加尾部斜杠应该可以解决您的第二个问题。
答案 1 :(得分:0)
确实@AndD,你建议我执行这个命令:
sudo microk8s kubectl describe service -n kube-system kubernetes-dashboard
为了获得以下这些信息
由于以上信息,我可以修复 nodePort 服务,您可以在下面找到一个片段:
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)
<link rel="stylesheet" href="styles.3aaa4ab96be3c2d1171f.css"></head>
...
<script src="runtime.3e2867321ef71252064e.js" defer></script>
因此它尝试使用这些 URL 获取这些资产:
而不是使用:
我刚刚再次将子路径 => dashboad/ 更改为 dash/
它适用于铬。 但它不与火狐。 (没什么大不了的)
非常感谢AndD!
此外,我在 jenkins 上遇到了类似的问题,但是 jenkins 图像包含一个可以解决该问题的参数。 docker run --publish 8080:8080 --env JENKINS_OPTS="--prefix=/subpath" jenkins/jenkins
我期待找到与 kubernetesui/dashboard 类似的东西,但我没有找到任何东西 https://hub.docker.com/r/kubernetesui/dashboard
https://github.com/kubernetes/dashboard
好吧,我不知道如何很好地配置 nginx 以便在子路径中正确显示仪表板,而且我在 kubernetes\dashboard 图像中没有找到任何参数来处理子路径。