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執行個體的
,用于啟動用于啟動asm_vm_proxyService CIDR
- 擷取使用者的ServiceMesh執行個體
位址,用于啟動asm_vm_proxyistioD
- 擷取使用者的ServiceMesh執行個體中間證書,并生成支援SPIFFE的VM側證書,用于啟動asm_vm_proxy和資料平面通信
4 鏡像
ASM-VM-PROXY鏡像的路徑格式如下:
registry.{地域辨別}.aliyuncs.com/acs/asm-vm-proxy:{版本辨別}-aliyun
舉例說明,地域名稱為
杭州
、版本為
v1.6.9
的鏡像路徑為:
registry.cn-hangzhou.aliyuncs.com/acs/asm-vm-proxy:v1.6.9-aliyun
開放地域
ASM-VM-PROXY鏡像開放了如下地域,請根據就近原則拉取鏡像。
序号 | 地域辨別 | 地域名稱 |
---|---|---|
1 | cn-hangzhou | 華東1(杭州) |
2 | cn-shanghai | 華東2(上海) |
3 | cn-qingdao | 華北1(青島) |
4 | cn-beijing | 華北2(北京) |
5 | cn-zhangjiakou | 華北3(張家口) |
6 | cn-huhehaote | 華北5(呼和浩特) |
7 | cn-shenzhen | 華南1(深圳) |
8 | cn-chengdu | 西南1(成都) |
9 | cn-hongkong | 中國(香港) |
10 | ap-southeast-1 | 新加坡 |
11 | ap-southeast-2 | 澳洲(悉尼) |
12 | ap-southeast-3 | 馬來西亞(吉隆坡) |
13 | ap-southeast-5 | 印度尼西亞(雅加達) |
14 | ap-northeast-1 | 日本(東京) |
15 | eu-central-1 | 德國(法蘭克福) |
16 | eu-west-1 | 英國(倫敦) |
17 | us-west-1 | 美國(矽谷) |
18 | us-east-1 | 美國(弗吉尼亞) |
19 | ap-south-1 | 印度(孟買) |
20 | me-east-1 | 阿聯酋(迪拜) |
版本資訊
ASM-VM-PROXY後續的版本更新将會與ASM管控面一緻。如下圖所示,請進入ASM執行個體頁面,在基本資訊中檢視相關版本資訊。
5 啟動
啟動腳本
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節點。
6 鍊路追蹤
如果我們希望采集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