mirror of https://github.com/istio/istio.io.git
Add troubleshooting guide for VMs (#8868)
* Add troubleshooting guide for VMs * Update content/en/docs/ops/diagnostic-tools/virtual-machines/index.md Co-authored-by: Jimmy Song <rootsongjc@gmail.com> Co-authored-by: Jimmy Song <rootsongjc@gmail.com>
This commit is contained in:
parent
eb318dd57a
commit
fec7e43e83
|
@ -0,0 +1,121 @@
|
||||||
|
---
|
||||||
|
title: Debugging Virtual Machines
|
||||||
|
description: Describes tools and techniques to diagnose issues with Virtual Machines.
|
||||||
|
weight: 20
|
||||||
|
keywords: [debug,virtual-machines,envoy]
|
||||||
|
owner: istio/wg-environments-maintainers
|
||||||
|
test: n/a
|
||||||
|
---
|
||||||
|
|
||||||
|
This page describes how to troubleshoot issues with Istio deployed to Virtual Machines.
|
||||||
|
Before reading this, you should take the steps in [Virtual Machine Installation](/docs/setup/install/virtual-machine/).
|
||||||
|
|
||||||
|
Troubleshooting an Istio Virtual Machine installation is similar to troubleshooting issues with proxies running inside Kubernetes, but there are some key differences to be aware of.
|
||||||
|
|
||||||
|
While much of the same information is available on both platforms, accessing this information differs.
|
||||||
|
|
||||||
|
## Monitoring health
|
||||||
|
|
||||||
|
The Istio sidecar is typically run as a `systemd` unit. To ensure its running properly, you can check that status:
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ systemctl status istio
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
Additionally, the sidecar health can be programmatically check at its health endpoint:
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ curl localhost:15021/healthz/ready -I
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
## Logs
|
||||||
|
|
||||||
|
Logs for the Istio proxy can be found in a few places.
|
||||||
|
|
||||||
|
To access the `systemd` logs, which has details about the initialization of the proxy:
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ journalctl -f -u istio -n 1000
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
The proxy will redirect `stderr` and `stdout` to `/var/log/istio/istio.err.log` and `/var/log/istio/istio.log`, respectively.
|
||||||
|
To view these in a format similar to `kubectl`:
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ tail /var/log/istio/istio.err.log /var/log/istio/istio.log -Fq -n 100
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
Log levels can be modified by changing the `cluster.env` configuration file. Make sure to restart `istio` if it is already running:
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ echo "ISTIO_AGENT_FLAGS=\"--log_output_level=dns:debug --proxyLogLevel=debug\"" >> /var/lib/istio/envoy/cluster.env
|
||||||
|
$ systemctl restart istio
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
## Iptables
|
||||||
|
|
||||||
|
To ensure `iptables` rules have been successfully applied:
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ sudo iptables-save
|
||||||
|
...
|
||||||
|
-A ISTIO_OUTPUT -d 127.0.0.1/32 -j RETURN
|
||||||
|
-A ISTIO_OUTPUT -j ISTIO_REDIRECT
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
## Istioctl
|
||||||
|
|
||||||
|
Most `istioctl` commands will function properly with virtual machines. For example, `istioctl proxy-status` can be used to view all connected proxies:
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ istioctl proxy-status
|
||||||
|
NAME CDS LDS EDS RDS ISTIOD VERSION
|
||||||
|
vm-1.default SYNCED SYNCED SYNCED SYNCED istiod-789ffff8-f2fkt {{< istio_full_version >}}
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
However, `istioctl proxy-config` relies on functionality in Kubernetes to connect to a proxy, which will not work for virtual machines.
|
||||||
|
Instead, a file containing the configuration dump from Envoy can be passed. For example:
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ 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
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
## Automatic registration
|
||||||
|
|
||||||
|
When a virtual machine connects to Istiod, a `WorkloadEntry` will automatically be created. This enables
|
||||||
|
the virtual machine to become a part of a `Service`, similar to an `Endpoint` in Kubernetes.
|
||||||
|
|
||||||
|
To check these are created correctly:
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ kubectl get workloadentries
|
||||||
|
NAME AGE ADDRESS
|
||||||
|
vm-10.128.0.50 14m 10.128.0.50
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
## Certificates
|
||||||
|
|
||||||
|
Virtual machines handle certificates differently than Kubernetes Pods, which use a Kubernetes-provided service account token
|
||||||
|
to authenticate and renew mTLS certificates. Instead, existing mTLS credentials are used to authenticate with the certificate authority and
|
||||||
|
renew certificates.
|
||||||
|
|
||||||
|
The status of these certificates can be viewed in the same way as in Kubernetes:
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ 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
|
||||||
|
{{< /text >}}
|
||||||
|
|
||||||
|
Additionally, these are persisted to disk to ensure downtime or restarts do not lose state.
|
||||||
|
|
||||||
|
{{< text bash >}}
|
||||||
|
$ ls /etc/certs
|
||||||
|
cert-chain.pem key.pem root-cert.pem
|
||||||
|
{{< /text >}}
|
Loading…
Reference in New Issue