驗證雙向 TLS 是否啟用
一旦將應用程式新增至 Ambient 網格,您可以使用以下一種或多種方法輕鬆驗證 mTLS 是否在您的工作負載之間啟用
使用工作負載的 ztunnel 設定驗證 mTLS
使用方便的 istioctl ztunnel-config workloads
命令,您可以查看您的工作負載是否設定為透過 PROTOCOL
欄的值傳送和接收 HBONE 流量。例如
$ istioctl ztunnel-config workloads
NAMESPACE POD NAME IP NODE WAYPOINT PROTOCOL
default details-v1-857849f66-ft8wx 10.42.0.5 k3d-k3s-default-agent-0 None HBONE
default kubernetes 172.20.0.3 None TCP
default productpage-v1-c5b7f7dbc-hlhpd 10.42.0.8 k3d-k3s-default-agent-0 None HBONE
default ratings-v1-68d5f5486b-b5sbj 10.42.0.6 k3d-k3s-default-agent-0 None HBONE
default reviews-v1-7dc5fc4b46-ndrq9 10.42.1.5 k3d-k3s-default-agent-1 None HBONE
default reviews-v2-6cf45d556b-4k4md 10.42.0.7 k3d-k3s-default-agent-0 None HBONE
default reviews-v3-86cb7d97f8-zxzl4 10.42.1.6 k3d-k3s-default-agent-1 None HBONE
在您的工作負載上設定 HBONE 並不代表您的工作負載會拒絕任何純文字流量。如果您希望您的工作負載拒絕純文字流量,請為您的工作負載建立一個 PeerAuthentication
原則,並將 mTLS 模式設定為 STRICT
。
從度量驗證 mTLS
如果您已安裝 Prometheus,您可以使用以下命令設定連接埠轉送並開啟 Prometheus UI
$ istioctl dashboard prometheus
在 Prometheus 中,您可以查看 TCP 度量的值。首先,選取 [圖表] 並輸入度量,例如:istio_tcp_connections_opened_total
、istio_tcp_connections_closed_total
、istio_tcp_received_bytes_total
或 istio_tcp_sent_bytes_total
。最後,點擊 [執行]。資料將包含類似以下的項目
istio_tcp_connections_opened_total{
app="ztunnel",
connection_security_policy="mutual_tls",
destination_principal="spiffe://cluster.local/ns/default/sa/bookinfo-details",
destination_service="details.default.svc.cluster.local",
reporter="source",
request_protocol="tcp",
response_flags="-",
source_app="curl",
source_principal="spiffe://cluster.local/ns/default/sa/curl",source_workload_namespace="default",
...}
驗證 connection_security_policy
值設定為 mutual_tls
以及預期的來源和目的地身分資訊。
從記錄驗證 mTLS
您也可以檢視來源或目的地 ztunnel 記錄,以確認 mTLS 是否已啟用,以及對等身分。以下是從 curl
服務到 details
服務的請求的來源 ztunnel 記錄範例
2024-08-21T15:32:05.754291Z info access connection complete src.addr=10.42.0.9:33772 src.workload="curl-7656cf8794-6lsm4" src.namespace="default"
src.identity="spiffe://cluster.local/ns/default/sa/curl" dst.addr=10.42.0.5:15008 dst.hbone_addr=10.42.0.5:9080 dst.service="details.default.svc.cluster.local"
dst.workload="details-v1-857849f66-ft8wx" dst.namespace="default" dst.identity="spiffe://cluster.local/ns/default/sa/bookinfo-details"
direction="outbound" bytes_sent=84 bytes_recv=358 duration="15ms"
驗證 src.identity
和 dst.identity
值是否正確。它們是用於來源和目標工作負載之間 mTLS 通訊的身份。請參閱透過日誌驗證 ztunnel 流量章節,以了解更多詳細資訊。
使用 Kiali 儀表板驗證
如果您已安裝 Kiali 和 Prometheus,您可以使用 Kiali 的儀表板視覺化 Ambient Mesh 中的工作負載通訊。您可以查看任何工作負載之間的連線是否有鎖圖示,以驗證是否已啟用 mTLS,並同時查看對等身份資訊。
請參閱視覺化應用程式和指標文件,以了解更多詳細資訊。
使用 tcpdump
驗證
如果您可以存取 Kubernetes 工作節點,您可以執行 tcpdump
命令來捕獲網路介面上所有流量,並可選擇專注於應用程式端口和 HBONE 端口。在此範例中,端口 9080
是 details
服務端口,而 15008
是 HBONE 端口。
$ tcpdump -nAi eth0 port 9080 or port 15008
您應該從 tcpdump
命令的輸出中看到加密的流量。
如果您無法存取工作節點,您可以使用 netshoot 容器映像輕鬆執行此命令。
$ POD=$(kubectl get pods -l app=details -o jsonpath="{.items[0].metadata.name}")
$ kubectl debug $POD -i --image=nicolaka/netshoot -- tcpdump -nAi eth0 port 9080 or port 15008