是否可以在不同命名空间中对多个 Ingress 资源 运行 使用相同的主机名?

Is it possible to use same hostname with multiple Ingress resources running in different namespaces?

我想使用相同的主机名,比如 example.com 和不同命名空间中的多个 Ingress 资源 运行,即 monitoringmyapp。我正在使用 Kubernetes nginx-ingress 控制器。

haproxy-ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: haproxy-ingress
  namespace: myapp
  annotations:
    kubernetes.io/ingress.class: "nginx"  
spec:
  tls:
  - hosts:
    # fill in host here
    - example.com
    
  rules:
    - host: example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: haproxy
                port:
                  number: 80

grafana-ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: grafana-ingress
  namespace: monitoring
  annotations:
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  tls:
  - hosts:
    - example.com
    
  rules:
    - host: example.com
      http:
        paths:
          # only match /grafana and paths under /grafana/
          - path: /grafana(/|$)(.*)
            pathType: Prefix
            backend:
              service:
                name: grafana
                port:
                  number: 3000

当我在做 curl example.com 时,它会将我重定向到命名空间 one 中的部署 运行(如预期的那样),但是当我在做 curl example.com/grafana 时,它仍然是将我重定向到命名空间一部署。

请帮忙。

是的,这是可能的。

您的情况可能有两个问题。

一个是您不需要 grafana 入口的正则表达式路径。简单 /grafana 路径对于路径类型 Prefix 和路径类型 Prefix 都可以,任何 /grafana/... 都将被重定向相关服务。所以清单文件将是:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: grafana-ingress
  namespace: monitoring
spec:
  tls:
  - hosts:
    - example.com
    
  rules:
    - host: example.com
      http:
        paths:
          - path: /grafana
            pathType: Prefix
            backend:
              service:
                name: grafana
                port:
                  number: 3000

第二个问题可能是相关服务或部署可能不在同一命名空间下 monitoring。请确保 deployment/service/secret 或 grafana 所需的其他资源保持在同一命名空间 monitoring.