Kubernetes入口规则:如何同时使用通配符和特定子域

fye*_*lci 5 kubernetes traefik kubernetes-ingress traefik-ingress

我希望Ingress将特定子域重定向到一个后端,将所有其他子域重定向到另一后端。基本上,我想定义如下规则:

如果是子域,foo.bar.com则转到s1,对于所有其他子域,请转到s2

当我按照Ingress规范中的定义定义规则时,在部署时会遇到此异常:

Error: UPGRADE FAILED: cannot re-use a name that is still in use
Run Code Online (Sandbox Code Playgroud)

但是,当我更改*.bar.comdemo.bar.com它时,它会起作用。

这是我的Ingress资源规范:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - backend:
          serviceName: s1
          servicePort: 80
  - host: *.bar.com
    http:
      paths:
      - backend:
          serviceName: s2
          servicePort: 80
Run Code Online (Sandbox Code Playgroud)

任何人都知道是否可能吗?

Nat*_*ord 6

现在可以在Kubernetes中使用 nginx 实现这一点:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    ingress.kubernetes.io/ssl-redirect: "false"
    kubernetes.io/ingress.class: nginx
    kubernetes.io/ingress.global-static-ip-name: web-static-ip
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.ingress.kubernetes.io/server-alias: www.foo.bar
    nginx.ingress.kubernetes.io/use-regex: "true"
  name: foo-bar-ingress
  namespace: test
spec:
  rules:
  - host: 'foo.bar.com'
    http:
      paths:
      - backend:
          serviceName: specific-service
          servicePort: 8080
        path: /(.*)
        pathType: ImplementationSpecific
  - host: '*.bar.com'
    http:
      paths:
      - backend:
          serviceName: general-service
          servicePort: 80
        path: /(.*)
        pathType: ImplementationSpecific
Run Code Online (Sandbox Code Playgroud)