ASM-VM-PROXY是連接ASM和VM的工具,運行在VM節點中,負責與ASM通信獲取xDS信息、劫持非容器應用流量並執行網格化操作(比如上報鏈路追蹤數據、請求安全認證等)。為了支持跨操作系統,以docker image的方式分發。
1 示例環境
為了演示跨操作系統的能力,本文使用三種最常見的Linux分發版本創建ECS實例。詳情見下表。
實驗名稱 | VM名稱 | 公網IP | 內網IP | OS-release版本 | 內核版本 |
---|---|---|---|---|---|
VM1 | asm-vm-proxy-alios | 59.110.66.99 | 192.168.0.250 | alinux 2.1903 | 4.19.91-21.al7.x86_64 |
VM2 | asm-vm-proxy-centos | 39.106.112.48 | 192.168.0.251 | centos 8 | 4.18.0-193.14.2.el8_2.x86_64 |
VM3 | asm-vm-proxy-ubuntu | 47.94.151.60 | 192.168.0.252 | ubuntu 20.04 | 5.4.0-31-generic |
2 安裝Docker
為了啟動ASM-VM-PROXY,以及本系列的非容器應用示例,我們需要安裝docker。安裝腳本示意如下。
alios (19.03.12)
yum install -y yum-utils
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
yum update && yum install -y docker-ce docker-ce-cli containerd.io
systemctl start docker
docker version
centos (19.03.12)
yum install -y https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm
yum install -y yum-utils
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
yum update && yum install -y docker-ce docker-ce-cli containerd.io
systemctl start docker
docker version
ubuntu(19.03.8)
apt-get update && apt-get install -y docker.io
docker version
3 啟動參數
填寫如下變量,將文件保存到3個VM節點,路徑為/opt/asm_vm_proxy/asm_vm_proxy.env
。
ACCESS_KEY_ID=
ACCESS_KEY_SECRET=
REGION=
MESH_ID=
NS=
SA=
POD_NAME=
參數說明
- ACCESS_KEY_ID 阿里雲賬號ID
- ACCESS_KEY_SECRET 阿里雲賬號密碼
- REGION 地域標識 請參考https://api.aliyun.com/?#/region
- MESH_ID ServiceMesh實例ID
- NS 虛機要加入的命名空間(Namespace)
- SA 虛機要使用的服務賬號(ServiceAccount)
- POD_NAME 虛機要使用的POD級別的名稱
用途聲明
- 獲取用戶的Kubernetes實例的
Service CIDR
,用於啟動用於啟動asm_vm_proxy - 獲取用戶的ServiceMesh實例
istioD
地址,用於啟動asm_vm_proxy - 獲取用戶的ServiceMesh實例中間證書,並生成支持SPIFFE的VM側證書,用於啟動asm_vm_proxy和數據平面通信
4 啟動
啟動腳本
docker run -d \
--name=asm_vm_proxy \
--network=host \
--restart=always \
--env-file /opt/asm_vm_proxy/asm_vm_proxy.env \
--cap-add=NET_ADMIN \
registry.cn-beijing.aliyuncs.com/asm_repo/asm_vm_proxy
檢測
容器啟動後,可以執行如下命令進行檢測。
iptables -t nat -L -v |grep -A5 "Chain ISTIO_INBOUND"
Chain ISTIO_INBOUND (1 references)
pkts bytes target prot opt in out source destination
28 1428 RETURN tcp -- any any anywhere anywhere tcp dpt:ssh
0 0 RETURN tcp -- any any anywhere anywhere tcp dpt:15020
5 300 ISTIO_IN_REDIRECT tcp -- any any anywhere anywhere
iptables -t nat -L -v |grep -A3 "Chain ISTIO_IN_REDIRECT"
Chain ISTIO_IN_REDIRECT (3 references)
pkts bytes target prot opt in out source destination
6 360 REDIRECT tcp -- any any anywhere anywhere redir ports 15006
iptables -t nat -L -v |grep -A10 "Chain ISTIO_OUTPUT"
Chain ISTIO_OUTPUT (1 references)
pkts bytes target prot opt in out source destination
0 0 RETURN all -- any lo 127.0.0.6 anywhere
0 0 ISTIO_IN_REDIRECT all -- any lo anywhere !localhost owner UID match 1337
7 420 RETURN all -- any lo anywhere anywhere ! owner UID match 1337
0 0 RETURN all -- any any anywhere anywhere owner UID match 1337
0 0 ISTIO_IN_REDIRECT all -- any lo anywhere !localhost owner GID match 1337
0 0 RETURN all -- any lo anywhere anywhere ! owner GID match 1337
0 0 RETURN all -- any any anywhere anywhere owner GID match 1337
0 0 RETURN all -- any any anywhere localhost
6 360 ISTIO_REDIRECT all -- any any anywhere 172.19.0.0/20
這裡的172.19.0.0/20
是ASM-VM-PROXY中獲取的用戶Kubernetes實例的Service CIDR
診斷
如果啟動出現問題,請使用如下命令查看容器啟動和proxy運行的日誌。
查看容器啟動日誌
docker logs asm_vm_proxy
查看proxy日誌
docker exec -it asm_vm_proxy tail -n 100 /var/log/istio/istio.log
驗證
ASM監控
ASM-VM-PROXY啟動成功後,會與ASM通信,在ASM的管控臺大盤頁面可以看到我們示例的3個ECS節點。
5 鏈路追蹤
如果我們希望採集ECS各節點的鏈路追蹤數據,請配置zipkin的SLB域名到/etc/hosts
。示意腳本如下。關於鏈路追蹤的詳情,請見本系列的最後一篇文章。
zipkin_clusterIp=$(k get svc zipkin-slb -n istio-system | grep zipkin | awk -F ' ' '{print $4}')
echo "$zipkin_clusterIp zipkin.istio-system" >dns_record
for vm in "${VMS[@]}"; do
ssh root@"$vm" "sed -i '/zipkin.istio-system/d' /etc/hosts"
ssh root@"$vm" "cat >> /etc/hosts" <dns_record
done