偵錯虛擬機器
本頁說明如何排除部署到虛擬機器的 Istio 問題。在閱讀本文之前,您應該先執行虛擬機器安裝中的步驟。此外,虛擬機器架構可以幫助您了解元件如何互動。
排除 Istio 虛擬機器安裝問題與排除在 Kubernetes 內部執行的 Proxy 問題類似,但有一些關鍵差異需要注意。
雖然在兩個平台上都提供許多相同的資訊,但存取此資訊的方式有所不同。
監控健康狀況
Istio sidecar 通常以 systemd
單元的形式運行。為了確保它正常運行,您可以檢查其狀態。
$ systemctl status istio
此外,可以通過其健康檢查端點以程式化的方式檢查 sidecar 的健康狀況。
$ curl localhost:15021/healthz/ready -I
記錄
Istio 代理的日誌可以在幾個地方找到。
要訪問 systemd
日誌,其中包含有關代理初始化的詳細資訊。
$ journalctl -f -u istio -n 1000
代理會將 stderr
和 stdout
重定向到 /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