如果我不使用通配符,Kubernetes 入口会给我 404

Kubernetes ingress is giving me 404 if I don't use wildcard

我正在开发一个微服务应用程序,我使用 nginx ingress。我使用 3 项服务设置规则,当我在如下规则中提到主机时,它总是为所有服务提供 404

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-srv
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: "true"
    cert-manager.io/issuer: "local-selfsigned"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  tls:
    - hosts:
        - "tradephlo.local"
      secretName: tls-ca
  rules:
    - host: "tradephlo.local"
    - http:
        paths:
          - path: /api/main/?(.*)
            pathType: Prefix
            backend:
              service:
                name: tradephlo-main-srv
                port:
                  number: 4000
          - path: /api/integration/?(.*)
            pathType: Prefix
            backend:
              service:
                name: tradephlo-integration-srv
                port:
                  number: 5000
          - path: /?(.*)
            pathType: Prefix
            backend:
              service:
                name: tradephlo-client-srv
                port:
                  number: 3000

但是,如果我根据规则将通配符放入主机中,它会完美运行

rules:
    - host: "*.tradephlo.local"

我不想在生产中生成通配符 SSL。请帮我指出我这里做错了什么。

问题出在以下行的破折号 - 中:

rules:
    - host: "tradephlo.local"
    - http:

否则就是2个不同的主机- tradephlo.local abd *.

我们可以使用以下命令进行检查:

kubectl describe ing ingress-srv

我们得到这个:

$ kubectl describe ing ingress-srv
Name:             ingress-srv
Namespace:        default
Address:          xxxxxxxxxx
Default backend:  default-http-backend:80 (10.60.0.9:8080)
TLS:
  tls-ca terminates tradephlo.local
Rules:
  Host        Path  Backends
  ----        ----  --------
  *
              /api/main/?(.*)   nginx:80 (yyyyy:80)

删除后我们得到这个-:

$ kubectl describe ing ingress-srv
Name:             ingress-srv
Namespace:        default
Address:          xxxx
Default backend:  default-http-backend:80 (10.60.0.9:8080)
TLS:
  tls-ca terminates tradephlo.local
Rules:
  Host        Path  Backends
  ----        ----  --------
  tradephlo.local
              /api/main/?(.*)   nginx:80 (yyyyyy:80)

所以不需要使用通配符,当你这样做时,ingress 将 *.tradephlo.local 视为不同的主机并继续 * 规则。