【问题标题】:same path with different service names in ingress resources入口资源中具有不同服务名称的相同路径
【发布时间】:2019-12-12 20:47:15
【问题描述】:

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

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

感谢任何专家的帮助!!!

【问题讨论】:

  • >因为 nginx-static 和 service-1 但我不能保持 sme 相同的主机路径...... /i>你想实现吗?

标签: kubernetes kubernetes-ingress nginx-ingress


【解决方案1】:

您不能有相同的路径指向不同的后端资源。您必须将静态文件或服务放入不同的路径,并重写 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/

【讨论】:

  • 感谢您的建议,但我的域将永远不会将此路径称为 /static... 如何处理这种情况.... 有什么方法可以始终执行我的入口路径和后端资源??
  • 您必须以某种方式将静态内容与服务调用分开。
【解决方案2】:

很遗憾,最初问题的要求并不明确,也没有给出额外的说明。但是,我想详细说明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

但是,只有当您可以在两个主机之间拆分您的网站时,这才有效。

希望对您有所帮助。 您可以在 K8s 文档上的 Ingress 上查看更多信息。

【讨论】:

    猜你喜欢
    • 2013-02-16
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多