我在GKE 1.21.6-GKE.1500上有一个基本的istio.12.2设置,所有的pod都注入了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.1404是预期的响应(
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应用程序pod 的ip
但是当我检查所有abc应用程序的istio-proxy日志时,我没有看到任何关于这个调用的日志。我确实得到了我预期的响应,所以电话一定打到了我的应用程序上,但不知怎么的,我在pod中没有看到日志。
请求是否以某种方式没有路由到istio-proxy?或者我需要做其他设置吗?
您所说的ABC应用程序是什么意思?您也可以重新检查您的配置一次。
此外,您应该选择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"}
有关更多信息,请参阅自定义istio访问日志。
另请参阅收集Anthos服务网格日志。
问题似乎是我打错了端口。我在打对端口后看到了日志。尽管我没有看到特使的日志对我来说仍然很奇怪,即使端口无效,pod ip也是如此,所以我认为数据包通过了特使