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了解更多信息。
问题似乎是我打错了端口。一旦我访问了正确的端口,我就看到了日志。虽然我没有看到特使的日志对我来说仍然很奇怪,即使端口无效 pod ip 是所以我假设数据包通过特使
我在 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了解更多信息。
问题似乎是我打错了端口。一旦我访问了正确的端口,我就看到了日志。虽然我没有看到特使的日志对我来说仍然很奇怪,即使端口无效 pod ip 是所以我假设数据包通过特使