如果我不使用通配符,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
视为不同的主机并继续 * 规则。
我正在开发一个微服务应用程序,我使用 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
视为不同的主机并继续 * 规则。