Istio 和自定义 HTTP 方法
Istio and the custom HTTP method
如何使 Istio 路由自定义 HTTP 方法?
$ curl -v -X MYMETHOD https://myapp.com
< HTTP/2 400
< content-length: 11
< content-type: text/plain
< date: Wed, 29 Dec 2021 08:24:36 GMT
< server: envoy
< x-envoy-upstream-service-time: 1
<
* Connection #0 to host myapp.com left intact
Bad Request
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: myapp
spec:
gateways:
- gw
hosts:
- 'myapp.com'
http:
- name: myapp
route:
- destination:
host: myapp
port:
number: 8000
Kubernetes:1.22.4
Istio:1.12.1
Envoy 不支持自定义 HTTP 方法。 Envoy 实现了 H/1 编解码器,它有一个它接受的 HTTP 方法的硬编码列表(参见 RFC)
Envoy 上有一个未解决的问题 Github:https://github.com/envoyproxy/envoy/issues/18819
所以你无法通过 HTTP 路由实现你想要的。但是你可以让它与 TCP/TLS 路线一起工作。
为此,请执行以下操作:
- 在
service istio-ingressgateway
上设置正确的协议:
ports:
- name: tcp
nodePort: 8000
port: 8000
protocol: TCP
- 更改网关端口上的协议
port:
name: tcp-gateway
number: 8000
protocol: TCP
- 为 TCP 流量配置虚拟服务:
spec:
gateways:
- example-gateway
hosts:
- myapp.com
tcp:
- match:
- port: 8000
route:
- destination:
host: myapp.svc.cluster.local
port:
number: 8000
对于 TCP 端点,您必须考虑到无法应用 host/path-based 路由。因此,请确保您的 myappp
VirtualService 是为该端口提供服务的唯一服务。
如何使 Istio 路由自定义 HTTP 方法?
$ curl -v -X MYMETHOD https://myapp.com
< HTTP/2 400
< content-length: 11
< content-type: text/plain
< date: Wed, 29 Dec 2021 08:24:36 GMT
< server: envoy
< x-envoy-upstream-service-time: 1
<
* Connection #0 to host myapp.com left intact
Bad Request
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: myapp
spec:
gateways:
- gw
hosts:
- 'myapp.com'
http:
- name: myapp
route:
- destination:
host: myapp
port:
number: 8000
Kubernetes:1.22.4 Istio:1.12.1
Envoy 不支持自定义 HTTP 方法。 Envoy 实现了 H/1 编解码器,它有一个它接受的 HTTP 方法的硬编码列表(参见 RFC)
Envoy 上有一个未解决的问题 Github:https://github.com/envoyproxy/envoy/issues/18819
所以你无法通过 HTTP 路由实现你想要的。但是你可以让它与 TCP/TLS 路线一起工作。
为此,请执行以下操作:
- 在
service istio-ingressgateway
上设置正确的协议:
ports:
- name: tcp
nodePort: 8000
port: 8000
protocol: TCP
- 更改网关端口上的协议
port:
name: tcp-gateway
number: 8000
protocol: TCP
- 为 TCP 流量配置虚拟服务:
spec:
gateways:
- example-gateway
hosts:
- myapp.com
tcp:
- match:
- port: 8000
route:
- destination:
host: myapp.svc.cluster.local
port:
number: 8000
对于 TCP 端点,您必须考虑到无法应用 host/path-based 路由。因此,请确保您的 myappp
VirtualService 是为该端口提供服务的唯一服务。