入口资源中具有不同服务名称的相同路径

时间:2019-12-12 20:47:15

标签: kubernetes kubernetes-ingress nginx-ingress

使用路径指向不同的服务名称时遇到一些问题,我的入口资源如下所示

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

感谢任何专家的帮助!

2 个答案:

答案 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文档的更多信息。