GKE 入口未根据 url 中的主机进行路由
GKE ingress not routing based on host in the url
我在 GKE 上为我的服务创建了以下入口(它是带有变量的 helm 图表的一部分)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: TestIngress
annotations:
kubernetes.io/ingress.class: "gce"
kubernetes.io/ingress.global-static-ip-name: {{ $ingressExternalStaticIpName }}
spec:
rules:
- host: "web.frontend.com"
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: {{ $webServiceName }}
port:
number: 80
- host: "grpc.frontend.com"
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: {{ $grpcServiceName }}
port:
number: 80
defaultBackend:
service:
name: {{ $grpcServiceName }}
port:
number: 80
我修改了 /etc/hosts 使 web.frontend.com 指向静态 ip。那我运行
curl web.frontend.com
我意识到 grpc 服务正在响应我的请求。我读了这篇文档 https://kubernetes.io/docs/concepts/services-networking/ingress/,它说它基于主机 header 进行路由??这听起来有点奇怪,因为我假设主机的意思是 url。所以我尝试了
curl -H "Host:web.frontend.com:80" web.frontend.com
并且仍然得到 grpc 服务器的响应
入口主机究竟是如何工作的,还是我做错了什么?
第二天试了一下,成功了。该问题可能是由于 google 缓存
我在 GKE 上为我的服务创建了以下入口(它是带有变量的 helm 图表的一部分)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: TestIngress
annotations:
kubernetes.io/ingress.class: "gce"
kubernetes.io/ingress.global-static-ip-name: {{ $ingressExternalStaticIpName }}
spec:
rules:
- host: "web.frontend.com"
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: {{ $webServiceName }}
port:
number: 80
- host: "grpc.frontend.com"
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: {{ $grpcServiceName }}
port:
number: 80
defaultBackend:
service:
name: {{ $grpcServiceName }}
port:
number: 80
我修改了 /etc/hosts 使 web.frontend.com 指向静态 ip。那我运行
curl web.frontend.com
我意识到 grpc 服务正在响应我的请求。我读了这篇文档 https://kubernetes.io/docs/concepts/services-networking/ingress/,它说它基于主机 header 进行路由??这听起来有点奇怪,因为我假设主机的意思是 url。所以我尝试了
curl -H "Host:web.frontend.com:80" web.frontend.com
并且仍然得到 grpc 服务器的响应
入口主机究竟是如何工作的,还是我做错了什么?
第二天试了一下,成功了。该问题可能是由于 google 缓存