我正在尝试创建一个Ingress资源,将其散布到两个运行状况良好的服务中。这是我非常简单的配置:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-ingress
namespace: default
spec:
rules:
- http:
paths:
- path: /*
backend:
serviceName: service1
servicePort: 8080
- path: /service2/*
backend:
serviceName: service2
servicePort: 9090
似乎只有对根(/
)路径的请求有效。我一直在尝试使用类似的在线帖子来解决这个问题,但是没有任何帮助。
我该怎么办?
此配置在Minikube上工作正常,但在GKE上不行吗?
答案 0 :(得分:1)
如果您使用的是GKE的默认入口控制器,那么yaml
对我来说看起来不错。我建议您重新检查 NodePort 类型的服务(即service1,service2),并确保它们运行正常。
如果您使用的是nginx-0.20.0
以上版本的NGINX Ingress Controller,则需要将nginx.ingress.kubernetes.io/use-regex
批注设置为true
(默认值为{ {1}})启用区分大小写的正则表达式。
就像:
false
答案 1 :(得分:0)
我在Azure上具有有效的配置,这很简单,但在某些方面与您的配置有所不同。我相应地重写了您的Yaml,看看是否有帮助:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-ingress
namespace: default
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- http:
paths:
- path: /service2/?(.*)
backend:
serviceName: service2
servicePort: 9090
- path: /?(.*)
backend:
serviceName: service1
servicePort: 8080
显着的区别是:
*
=> ?(.*)
。这使我可以使用nginx.ingress.kubernetes.io/rewrite-target
批注来确保我不会丢失/service2/
之后的url部分。因此,如果您要准确地呼叫 / service2 /,这可能会有所帮助。答案 2 :(得分:0)
如果您使用的是 nginx ,请检出此github issue。
如果您使用的是 traefik ,请尝试:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: traefik
name: my-ingress
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: service1
- path: /service2/
backend:
serviceName: service2