Istio Sidecar未记录Ingress入站流量访问日志问题
问题背景
部署ALB Ingress用于将流量路由至istio-ingressgateway,运行环境版本为 Istio 1.10.0、Kubernetes v1.21.4。
相关资源配置如下:
- Gateway资源(dev命名空间)
--- apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: "X-gateway" namespace: dev spec: selector: istio: ingressgateway servers: - port: number: 80 name: http protocol: HTTP hosts: - "dev.xxx.com"
- VirtualService资源(dev命名空间)
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: vs-istio-ingress namespace: dev spec: gateways: - X-gateway hosts: - "dev.xxx.com" http: - route: - destination: host: serviceX port: number: 8080
- 关联Service资源(dev命名空间)
apiVersion: v1 kind: Service metadata: namespace: dev name: serviceX labels: app: appX spec: selector: app: podX ports: - port: 8080
- Istio Operator访问日志配置
spec: meshConfig: accessLogFile: /dev/stdout
故障现象
- 经ALB Ingress访问服务时,istio-ingressgateway可正常生成访问日志条目,但单Pod部署的后端服务Sidecar无对应访问日志
- 服务网格内部其他服务发起的请求,可被该后端服务的Sidecar正常记录访问日志
根因分析
这是Istio 1.10版本的典型配置疏漏导致:
- 服务网格内部服务间调用默认自动使用mTLS加密,流量会先打到后端服务Sidecar的15006入站监听端口,经过Sidecar处理后才转发给业务容器,因此Sidecar会正常生成访问日志。
- istio-ingressgateway默认转发外部流量到后端服务时,未配置mTLS加密,会直接使用明文HTTP请求访问后端Pod的业务端口(8080)。1.10版本默认的入站流量拦截规则对于来自网关的明文流量存在匹配优先级问题,会直接绕过Sidecar的入站代理逻辑直达业务容器,因此Sidecar不会生成访问记录。
解决方案
按以下步骤配置即可修复:
- 确认dev命名空间的mTLS模式为兼容模式(PERMISSIVE),如果已经配置为STRICT模式可跳过这步,直接执行第二步。创建对应PeerAuthentication资源:
apiVersion: security.istio.io/v1beta1 kind: PeerAuthentication metadata: name: default namespace: dev spec: mtls: mode: PERMISSIVE
- 为istio-ingressgateway配置dev命名空间范围的DestinationRule,指定网关转发到网格内服务时使用ISTIO_MUTUAL模式的mTLS,强制网关流量先经过后端Sidecar处理:
apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: enable-mtls-for-gateway namespace: istio-system spec: host: "*.dev.svc.cluster.local" trafficPolicy: tls: mode: ISTIO_MUTUAL
- 滚动重启dev命名空间下的后端服务Pod和istio-ingressgateway Pod,让配置生效。
配置生效后再经ALB访问服务,后端服务Sidecar就会正常记录访问日志。
内容的提问来源于stack exchange,提问作者Aladdin Nawasreh
相关产品推荐
相关产品推荐

