调试虚拟机

此页面介绍如何对部署到虚拟机的 Istio 进行故障排除。在阅读本文档之前,您应该按照虚拟机安装中的步骤操作。此外,虚拟机架构可以帮助您了解组件之间的交互方式。

对 Istio 虚拟机安装进行故障排除类似于对在 Kubernetes 内部运行的代理进行故障排除,但需要注意一些关键区别。

虽然这两个平台上提供了许多相同的信息,但访问这些信息的方式有所不同。

监控健康状况

Istio sidecar 通常作为 systemd 单元运行。要确保其正常运行,您可以检查其状态

$ systemctl status istio

此外,可以通过其健康端点以编程方式检查 sidecar 的健康状况

$ curl localhost:15021/healthz/ready -I

日志

Istio 代理的日志可以在几个地方找到。

要访问包含代理初始化详细信息的 systemd 日志

$ journalctl -f -u istio -n 1000

代理会将 stderrstdout 分别重定向到 /var/log/istio/istio.err.log/var/log/istio/istio.log。要以类似于 kubectl 的格式查看这些日志

$ tail /var/log/istio/istio.err.log /var/log/istio/istio.log -Fq -n 100

可以通过更改 cluster.env 配置文件来修改日志级别。如果 Istio 已经在运行,请确保重新启动它

$ echo "ISTIO_AGENT_FLAGS=\"--log_output_level=dns:debug --proxyLogLevel=debug\"" >> /var/lib/istio/envoy/cluster.env
$ systemctl restart istio

Iptables

要确保已成功应用 iptables 规则

$ sudo iptables-save
...
-A ISTIO_OUTPUT -d 127.0.0.1/32 -j RETURN
-A ISTIO_OUTPUT -j ISTIO_REDIRECT

Istioctl

大多数 istioctl 命令都可以在虚拟机上正常运行。例如,istioctl proxy-status 可用于查看所有连接的代理

$ istioctl proxy-status
NAME           CDS        LDS        EDS        RDS      ISTIOD                    VERSION
vm-1.default   SYNCED     SYNCED     SYNCED     SYNCED   istiod-789ffff8-f2fkt     1.24.0

但是,istioctl proxy-config 依赖于 Kubernetes 中连接到代理的功能,这在虚拟机上将无法使用。相反,可以传递包含来自 Envoy 的配置转储的文件。例如

$ curl -s localhost:15000/config_dump | istioctl proxy-config clusters --file -
SERVICE FQDN                            PORT      SUBSET  DIRECTION     TYPE
istiod.istio-system.svc.cluster.local   443       -       outbound      EDS
istiod.istio-system.svc.cluster.local   15010     -       outbound      EDS
istiod.istio-system.svc.cluster.local   15012     -       outbound      EDS
istiod.istio-system.svc.cluster.local   15014     -       outbound      EDS

自动注册

当虚拟机连接到 Istiod 时,将自动创建 WorkloadEntry。这使虚拟机能够成为 Service 的一部分,类似于 Kubernetes 中的 Endpoint

要检查这些是否正确创建

$ kubectl get workloadentries
NAME             AGE   ADDRESS
vm-10.128.0.50   14m   10.128.0.50

证书

虚拟机处理证书的方式与 Kubernetes Pod 不同,后者使用 Kubernetes 提供的服务帐户令牌来认证和续订 mTLS 证书。相反,使用现有的 mTLS 凭据来对证书颁发机构进行认证并续订证书。

可以像在 Kubernetes 中一样查看这些证书的状态

$ curl -s localhost:15000/config_dump | ./istioctl proxy-config secret --file -
RESOURCE NAME     TYPE           STATUS     VALID CERT     SERIAL NUMBER                               NOT AFTER                NOT BEFORE
default           Cert Chain     ACTIVE     true           251932493344649542420616421203546836446     2021-01-29T18:07:21Z     2021-01-28T18:07:21Z
ROOTCA            CA             ACTIVE     true           81663936513052336343895977765039160718      2031-01-26T17:54:44Z     2021-01-28T17:54:44Z

此外,这些证书会持久保存到磁盘,以确保停机或重启不会丢失状态。

$ ls /etc/certs
cert-chain.pem  key.pem  root-cert.pem
这些信息是否有用?
您是否有任何改进建议?

感谢您的反馈!