istio-proxy 不记录集群内流量

istio-proxy not logging in-cluster traffic

我在 GKE 1.21.6-gke.1500 上有一个基本的 istio1.12.2 设置,所有 pods 都注入了​​ istio-proxy。我已经设置了 meshConfig accessLogFile。

我自己安装了 istio

istioctl install -f istioOperator.yaml
# The default API gateway facing ingress gateway
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
  namespace: istio-system
  name: default-installation
  annotations:
    config.kubernetes.io/local-config: "true"
spec:
  profile: default
  hub: gcr.io/istio-release
  meshConfig:
    accessLogFile: /dev/stdout
  components:
    base:
      enabled: true
    pilot:
      enabled: true
    ingressGateways:
    - name: istio-ingressgateway
      enabled: true
      label:
        app: istio-ingressgateway
        istio: ingressgateway
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: istio-ingressgateway
  namespace: istio-system
spec:
  selector:
    istio: ingressgateway
  servers:
    - port:
        number: 80
        name: http
        protocol: HTTP
      hosts:
        - "abc.com"
apiVersion: apps/v1
kind: Deployment
metadata:
  name: abc
  labels:
    app: abc
spec:
  selector:
    matchLabels:
      app: abc
  template:
    metadata:
      labels:
        app: abc
    spec:
      containers:
      - name: abc
        image: "abc"
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: abc
spec:
  selector:
    app: abc
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: virtual-abc-service
  namespace: default
spec:
  hosts:
    - abc.com
    - abc.default.svc.cluster.local
  gateways:
    - istio-system/istio-ingressgateway
    - mesh
  http:
    - route:
        - destination:
            host: abc.default.svc.cluster.local
            port:
              number: 80

我尝试访问负载均衡器并在 ingressgateway pod 中看到日志(由于某些防火墙我无法访问负载均衡器但我将其端口转发到 127.0.0.1:8080,因此 127.0. 0.1,404 是预期的响应)

GET / HTTP/1.1" 404 - via_upstream - "-" 0 47 8 8 "10.32.4.9" "curl/7.77.0" "generatedlbname" "abc.com:8080" "10.32.0.24:8080" outbound|80||abc.default.svc.cluster.local 10.32.4.9:36756 127.0.0.1:8080 127.0.0.1:42412

10.32.4.9是入口的ip

10.32.0.24是abc app pod的ip

但是当我检查所有 abc 应用程序的 istio-proxy 日志时,我没有看到此调用的任何日志。我确实得到了预期的响应,所以调用一定打到了我的应用程序,但不知何故我没有在 pods.

中看到日志

请求是否以某种方式未路由到 istio-proxy?或者我需要做其他设置吗?

ABC Apps 是什么意思?你也可以 re-check 你的 configuration 一次。

此外,您应该 select yaml 中的日志记录格式。您还可以通过将 accessLogEncoding 设置为 JSON 或 TEXT,在 JSON 和文本之间进行选择。当使用自定义配置安装时,您可能还想通过编辑 IstioOperator 的 meshConfig.accessLogFormat 字段来自定义访问日志的格式。

可以设置为IstioOperator的meshConfig.accessLogFormat字段的值,如下所示:

meshConfig:
    accessLogFile: /dev/stdout
    accessLogEncoding: JSON
    accessLogFormat: |
      {
        "accessLogFormat": "{\"a\": \"access_log\",\"start_time\": \"%START_TIME%\"}"
      }

这将从您的应用程序 sidecar 和入口网关生成日志,如下所示:

{"start_time":"2020-09-08T07:16:08.326Z","a":"access_log"}

参考Customising istio access logs了解更多信息。

另请参阅Collecting Anthos service Mesh Logs

问题似乎是我打错了端口。一旦我访问了正确的端口,我就看到了日志。虽然我没有看到特使的日志对我来说仍然很奇怪,即使端口无效 pod ip 是所以我假设数据包通过特使