第七章 HTTP流量管理 gateway

Posted liufei1983

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第七章 HTTP流量管理 gateway相关的知识,希望对你有一定的参考价值。

 

 Gateway: istio的一种资源类型,Istio Gateway告诉k8s的istio-ingressgateway pods可以打开哪些主机和端口(如下的80是 ingressgateway pod容器中的端口)

                   gateway是定义了哪些的hosts可以到达ingress pod。

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: galaxygateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
      - "*"

这就在Istio的ingress网关上开辟了一个端口,但是只是接受访问和流量输入,当流量到达这个网关时,它还不知道发送到哪里去。

 

现在我们的网关已准备好接收流量,我们必须告知它将收到的流量发往何处,Istio使用名为“VirtualService”类型配置流量发往何处。
将一个网关列表配置给VirtualService,然后Istio使用VirtualService配置中定义的路由再配置那些网关.

URI路径前缀匹配/env的将发往指定目标.(注意: 如果有多个virtualservice文件,后面的会覆盖前面的,所以要把所有的路由信息都配置到一个virtualservice)

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: flaskapp
spec:
  hosts:
  - "*"
  gateways:
  - galaxygateway 
  http:
  - match:
    - uri:
        prefix: /env
    route:
    - destination:
        host: flaskapp.default.svc.cluster.local
        port:
          number: 80

 

$ export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath=‘{.spec.ports[?(@.name=="http2")].nodePort}‘)
$ export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath=‘{.spec.ports[?(@.name=="https")].nodePort}‘)

 

 

 

总结:

 

我上面的例子中,gateway 可以把指定的URL 告诉 ingress pod处理。 virtualservice对指定URL进行 service 调用

1. Gateway: Istio Gateway是负责打开k8s上相关Istio的pods(pod!pod!pod!)上的端口并接收主机的流量,是接收流量与路由之间的关键链接。

2. VirtualService: Istio VirtualService是“附加”到Gateway上的,并负责定义Gateway应实现的路由。可以将多个VirtualServices连接到Gateway,但不适用于同一个域。

以上是关于第七章 HTTP流量管理 gateway的主要内容,如果未能解决你的问题,请参考以下文章

如何查看gateway转发情况

Spring Cloud Gateway 5 权重路由

异常和TCP通讯

云原生时代的流量入口:Envoy Gateway

zabbix专题:第七章 添加图像Graphs,添加聚合图形Screens

如何解决504 Gateway Time-out