如何使用Nginx Ingress自动创建子域

时间:2020-09-07 22:08:00

标签: nginx kubernetes kubernetes-ingress

我们正在寻找一种在master-minion nginx入口实现中使用子域的方法。我们尝试了许多不同的方法,但还没有。该文档示例工作正常(this),但该示例带有路径。无论如何,还是可以通过子域做到这一点?

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

非常感谢您!

2 个答案:

答案 0 :(得分:2)

Nginx入口控制器文档(InputStream)提供了一个使用不同主机的非常简单的示例:

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

您尝试或尝试实现的哪些方法不起作用?

答案 1 :(得分:0)

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


据我自动了解,您希望托管通配符,其中有github issue

Kubernetes 1.18已发布,具有一些增强功能,例如主机名中的通配符和对Path的更好处理。

引自kubernetes documentation

主机可以是精确匹配项(例如“ foo.bar.com”)或通配符(例如“ * .foo.com”)。精确匹配要求HTTP主机头与host字段匹配。通配符匹配要求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