【发布时间】:2021-03-06 04:27:19
【问题描述】:
先介绍一点背景:
我们目前在 Plesk 服务器上托管了多个网站和服务,我正在设置一个裸机开发服务器以提供一个区域,我们可以在投入生产之前测试更新等。我正在使用在 Ubunutu 20.04.01 上运行 microk8s 的 3 节点 kubernetes 集群。我们托管的服务非常多样化:我们有几个 Moodle 站点、几个 Wordpress 站点、一个运行 Limesurvery 的站点、一个 Mantis bugtracker 实例等等。我已经成功地将大多数站点容器化并在 k8s 上运行。我还可以通过 NodePort 或 MetalLB 负载均衡器访问每个单独的站点。
但是,我真的很想在负载均衡器上使用 NGINX 入口控制器,这样我就可以在不使用一堆 IP 地址(或者在 NodePort 的情况下,端口改变)。无论我做了什么,我似乎都无法让 Ingress 做我想做的事。我只是想做以下事情:
http://<LB IP Address>/bugtracker 访问 Mantis Bug Tracker 站点
http://<LB IP Address>/moodle1 访问 Moodle 网站之一
http://<LB IP Address>/limesurvey 访问石灰调查,
等等。我似乎能够访问网站的主页(例如 index.html、index.php 等),但是从那里的任何引用都不起作用 - 即它们给出路径未找到错误或 404 错误.
这是我的 Ingress 文件的示例:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- http:
paths:
- path: /limesurvey(/|$)(.*)
pathType: Prefix
backend:
service:
name: limesurvey-svc
port:
number: 80
- path: /moodle(/|$)(.*)
pathType: Prefix
backend:
service:
name: moodle-svc
port:
number: 8080
这个入口不起作用(我得到了 404)。但是,如果我在文件中只有一个路径并且只使用“/”它可以工作(但我只能将它用于一项服务):
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: limesurvey-svc
port:
number: 80
我认为我需要的是将路径 (limesurvey) 继续预先添加到每个 URL 请求上,但我似乎无法做到这一点。我认为这是因为当我导航到 http://<LB IP Address>/limesurvey 并单击调查时,我在 http://<LB IP Address>/index.php/<survey number> 收到 404 错误。但是,如果我在浏览器中手动将 URL 更改为 http://<LB IP Address>/limesurvey/index.php/<survey number>,它将访问调查(但仍有 404 和支持资产)。
我是否试图在 Ingress 控制器的设计用途之外做一些事情?我觉得我应该能够使用 rewrite-target 来实现这一点,但我错过了一些关键的东西。
感谢您的帮助。
【问题讨论】:
-
您使用的是哪个 Kubernetes 版本?您是否在任何级别配置了 Plesk?如果您将编写整个 url 手动操作它的工作?你能逐步提供一些用例场景吗?你是如何部署 Nginx Ingress 的?
-
@PjoterS,我根本没有在集群中使用 Plesk,我什至不应该提到它。 (对困惑感到抱歉)。我正在使用 Kubernetes 版本 1.19.3 和 NGINX Ingress 控制器版本 0.41.2。我通过以下命令部署了 ingress-nginx:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/baremetal/deploy.yaml。再举一个例子:假设我的 LoadBalancer IP 地址是 1.2.3.4。然后我想通过http://1.2.3.4/limesurvey访问limesurvey。
标签: kubernetes kubernetes-ingress nginx-ingress microk8s