【问题标题】:How to create subdomains automatically with Nginx ingress如何使用 Nginx 入口自动创建子域
【发布时间】:2020-09-08 14:29:18
【问题描述】:

我们正在寻找一种在主从 nginx 入口实现中使用子域的方法。我们已经尝试了很多不同的方法,但我们没有得到它。文档示例工作正常 (https://github.com/nginxinc/kubernetes-ingress/tree/v1.8.1/examples/mergeable-ingress-types),但此示例使用路径。有没有办法用子域来做或者不可能?

每次创建新页面时,我都会有一个不同的子域,例如 wordpress 结构,我想知道最好的方法是什么。

非常感谢!

【问题讨论】:

  • 你能提供一个你想要实现的映射的例子吗?入口规则具有域的 host 属性,这是否涵盖您的用例?

标签: nginx kubernetes kubernetes-ingress


【解决方案1】:

Nginx 入口控制器文档 (https://kubernetes.github.io/ingress-nginx/user-guide/basic-usage/) 有一个使用不同主机的非常简单的示例:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-myservicea
  annotations:
    # use the shared ingress-nginx
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: myservicea.foo.org
    http:
      paths:
      - path: /
        backend:
          serviceName: myservicea
          servicePort: 80
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-myserviceb
  annotations:
    # use the shared ingress-nginx
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: myserviceb.foo.org
    http:
      paths:
      - path: /
        backend:
          serviceName: myserviceb
          servicePort: 80

您尝试过什么或试图达到的效果不奏效?

【讨论】:

    【解决方案2】:

    @paltaa 已经显示了您可以选择的路径之一,有 2 个不同的主机。


    据我所知,您自动需要通配符主机,有github issue

    Kubernetes 1.18 已发布,其中包含一些增强功能,例如主机名中的通配符和更好的路径处理。

    引自 kubernetes documentation

    主机可以是精确匹配(例如“foo.bar.com”)或通配符(例如“*.foo.com”)。精确匹配要求 HTTP 主机标头与主机字段匹配。通配符匹配要求 HTTP 主机头等于通配符规则的后缀。

    Host        Host header       Match?    
    *.foo.com   bar.foo.com       Matches based on shared suffix    
    *.foo.com   baz.bar.foo.com   No match, wildcard only covers a single DNS label  
    *.foo.com   foo.com No match, wildcard only covers a single DNS label
    

    还有两个例子。


    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ingress-wildcard-host
    spec:
      rules:
      - host: "foo.bar.com"
        http:
          paths:
          - pathType: Prefix
            path: "/bar"
            backend:
              service:
                name: service1
                port:
                  number: 80
      - host: "*.foo.com"
        http:
          paths:
          - pathType: Prefix
            path: "/foo"
            backend:
              service:
                name: service2
                port:
                  number: 80
    

    apiVersion: "networking.k8s.io/v1beta1"
    kind: "Ingress"
    metadata:
      name: "example-ingress"
    spec:
      rules:
      - host: "*.example.com"
        http:
          paths:
          - path: "/example"
            pathType: "Prefix"
            backend:
              serviceName: "example-service"
              servicePort: 80
    

    【讨论】:

      猜你喜欢
      • 2020-12-28
      • 2013-02-09
      • 1970-01-01
      • 2014-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多