我是Istio的新手,我有以下问题。我正在尝试为通过tls/443通信的外部服务设置出口网关配置,如以下示例:https://istio.io/latest/docs/tasks/traffic-management/egress/egress-gateway/#egress-gateway-for-https-traffic.
一切似乎都工作正常。对于'externalapi'服务的出站流量,我得到istio_tcp_connections_close_total度量。我的问题是:
是否有任何方法来取代istio_tcp_connections_closed_total指标与istio_requests_total出站流量通过出口网关?我想获得一些额外的信息,比如出站流量的响应码。
这是我的配置:
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
name: externalapi-egress
spec:
hosts:
- externalapi.mydomain.com
ports:
- number: 443
name: tls
protocol: TLS
resolution: DNS
location: MESH_EXTERNAL
---
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: externalapi-egress
spec:
selector:
istio: egressgateway
servers:
- port:
number: 443
name: tls
protocol: TLS
hosts:
- externalapi.mydomain.com
tls:
mode: PASSTHROUGH
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: externalapi-egress
spec:
host: istio-egressgateway.istio-system.svc.cluster.local
subsets:
- name: externalapi-egress
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: externalapi
spec:
hosts:
- externalapi.mydomain.com
gateways:
- externalapi-egress
- mesh
tls:
- match:
- gateways:
- mesh
port: 443
sniHosts:
- externalapi.mydomain.com
route:
- destination:
host: istio-egressgateway.istio-system.svc.cluster.local
subset: externalapi-egress
port:
number: 443
weight: 100
- match:
- gateways:
- externalapi-egress
port: 443
sniHosts:
- externalapi.mydomain.com
route:
- destination:
host: externalapi.mydomain.com
port:
number: 443
weight: 100
其他配置信息:
- Istio: 1.8.0通过IstioOperator安装。
谢谢你帮我这个忙。罗伯特。
编辑:我想找到一种方法,让istio_requests_total度量生成的流量去externalapi,而不是istio_tcp_connections_closed_total。
tldr:你不能这么做。
现在是长答案。
From istio documentation about metrics:
对于HTTP、HTTP/2和GRPC流量,Istio生成如下内容指标:
请求计数(istio_requests_total):这是一个计数器递增对于每个请求由Istio代理处理。
. .
对于TCP流量,Istio生成以下度量:
Tcp Byte Sent (istio_tcp_sent_bytes_total):这是一个计数器测量TCP响应期间发送的总字节大小连接。
Tcp Byte Received (istio_tcp_received_bytes_total):这是一个计数器在case中,哪个度量请求期间接收的总字节的大小
Tcp Connections Opened (istio_tcp_connections_opened_total):这是一个每打开一个连接,COUNTER递增。
Tcp Connections Closed (istio_tcp_connections_closed_total):这是一个每关闭一个连接,COUNTER递增。
. .
注意istio_requests_total(根据文档)计数请求数此指标仅对HTTP、HTTP/2和GRPC流量有效。
对于TCP流量,没有requests_total mertic,因为很难说什么被定义为请求。这就是为什么tcp只能计算字节数和连接数。
现在你可能会说:">嘿,我没有使用tcp,我使用https (http over tls),所以它应该能够计算请求,对吗?"-你就错了。
在我进一步讨论之前,让我先提一下"HTTP持久连接"。维基百科将其定义为:
HTTP持久连接,也称为HTTP保持活动,或HTTP连接重用,是使用单个TCP连接发送的想法并接收多个HTTP请求/响应,而不是打开一个为每个请求/响应对建立新连接。更新的HTTP/2协议使用相同的思想,并进一步允许多个并发请求/响应在单个服务器上进行多路复用连接。
我为什么要提到这个?
TLS是加密流量。没有人能窥视到里面。如果您的应用程序通过单个tls连接(使用HTTP持久连接)发送/接收多个请求/响应,则不可能计数每个连续的请求/响应请求,因为它是端到端的加密。