偵錯虛擬機器

本頁說明如何排除部署到虛擬機器的 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

代理會將 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
這些資訊對您有幫助嗎?
您有任何改進的建議嗎?

感謝您的回饋!