追踪出口流量



i用

安装了istio
gateways.istio-egressgateway.enabled = true

我有一项消耗外部服务的服务,因此我定义了以下出口规则。

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: external-service1
spec:
  hosts:
  - external-service1.com
  ports:
  - number: 80
    name: http
    protocol: HTTP
  - number: 443
    name: https
    protocol: HTTPS
  resolution: DNS
  location: MESH_EXTERNAL

但是使用Jaeger我看不到外部服务的流量,因此能够检测到网络中的问题。

我将适当的标头转到外部服务(X-Request-id,X-B3-TraceID,X-B3-Spanid,B3-ParentsPanid,X-B3-Smpled,X-B3-Flags,X-ot-span-context(

这是正确的行为吗?怎么了?我只能有内部通话的统计信息?我如何拥有出口流量的统计信息?

假设您的服务是在ISTIO的内部服务注册表中定义的。如果没有,请根据指令service-defining进行配置。

在HTTPS中,对HTTP相关的所有信息(例如方法,URL路径,响应代码(进行了加密,因此iStio 无法请参阅且无法为HTTPS监视该信息。如果您需要监视与HTTP相关的信息以访问外部HTTPS服务,则可能需要让您的应用程序发出HTTP请求并配置ISTIO来执行TLS rocentination。

首先,您必须重新定义您的serviceEntry并创建虚拟服务以重写HTTP请求端口并添加目标rule以执行TLS order。

kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: external-service1
spec:
  hosts:
  - external-service1.com
  ports:
  - number: 80
    name: http-port
    protocol: HTTP
  - number: 443
    name: http-port-for-tls-origination
    protocol: HTTP
  resolution: DNS
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: external-service1
spec:
  hosts:
  - external-service1.com
  http:
  - match:
    - port: 80
    route:
    - destination:
        host: external-service1.com
        port:
          number: 443
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: external-service1
spec:
  host: external-service1.com
  trafficPolicy:
    loadBalancer:
      simple: ROUND_ROBIN
    portLevelSettings:
    - port:
        number: 443
      tls:
        mode: SIMPLE # initiates HTTPS when accessing external-service1.com
EOF

VirtualService重定向端口80上的HTTP请求到端口443,在那里相应的目标rule随后执行TLS启动。与以前的serviceentry不同,这次端口443上的协议是http,而不是https,因为客户端仅发送http请求,而iStio将连接升级到https。

我希望它有帮助。

相关内容

  • 没有找到相关文章

最新更新