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 镜像
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