使用路径指向不同的服务名称时遇到一些问题,我的入口资源如下所示
nginx-static服务是一个具有静态内容的nginx容器...我必须在调用service-1时加载此静态内容,因为nginx-static和service-1都不能,但是我无法保持sme相同的主机路径。 ...请建议如何更正以下入口资源...
请注意,静态内容包含很多文件(csv,js,html,目录,文件等)
kind: Ingress
metadata:
name: myingress
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- http:
paths:
- path: "/"
backend:
serviceName: nginx-static
servicePort: 80
- path: "/"
backend:
serviceName: service1
servicePort: 8989
- path: "/test1"
backend:
serviceName: service2
servicePort: 9001
感谢任何专家的帮助!
答案 0 :(得分:0)
您不能具有指向不同后端资源的相同路径。您必须将静态文件或服务放在不同的路径中,然后重写URL,例如:
重写注释:
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
name: rewrite
namespace: default
路径:
- backend:
serviceName: nginx-statix
servicePort: 80
path: /static(/|$)(.*)
- backend:
path: /
serviceName: service1
这样,您的静态内容将显示在/static/
下,并且所有/static/name
都将被入口重写为/name
。
此处有更多信息:https://kubernetes.github.io/ingress-nginx/examples/rewrite/
答案 1 :(得分:0)
不幸的是,最初问题的要求不清楚,也没有给出其他说明。但是,我想详细说明Burak Serdar's并添加,Kubernetes Ingress允许您列出多个服务的相同路径广告端口,但前提是要为不同的主机列出这些服务。
foo.bar.com --| |-> foo.bar.com nginx-static:80
| 178.91.123.132 |
bar.foo.com --| |-> bar.foo.com service1:8989
您可以使用以下配置实现该方案:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: name-virtual-host-ingress
spec:
rules:
- host: foo.bar.com
http:
paths:
- backend:
serviceName: nginx-static
servicePort: 80
- host: bar.foo.com
http:
paths:
- backend:
serviceName: service2
servicePort: 8989
但是,仅当您可以在两个主机之间拆分您的网站时,该方法才有效。
希望有帮助。 您可以在Ingress上查看有关K8s文档的更多信息。