ASM-VM-PROXY是连接ASM和虚拟机的工具,负责与ASM通信并执行网格化操作。本文介绍如何安装部署ASM-VM-PROXY。

背景信息

ASM-VM-PROXY是连接ASM和虚拟机的工具,运行在虚拟机节点中,负责与ASM通信获取xDS信息、劫持非容器应用流量并执行网格化操作,如上报链路追踪数据、请求安全认证等。为了支持跨操作系统,以Docker镜像的方式进行分发。VM-proxy

安装前环境准备

为了演示跨操作系统的能力,本文使用三种最常见的Linux分发版本创建ECS实例,详情见下表。

名称 虚拟机名称 公网IP 内网IP OS-release版本 内核版本
虚拟机1 asm-vm-proxy-alios 59.110.**.** 192.168.*.*** alinux 2.1903 4.19.91-21.al7.x86_64
虚拟机2 asm-vm-proxy-centos 39.106.1**.** 192.168.*.*** centos 8 4.18.0-193.14.2.el8_2.x86_64
虚拟机3 asm-vm-proxy-ubuntu 47.94.1**.** 192.168.*.*** ubuntu 20.04 5.4.0-31-generic

步骤一:安装Docker

ASM-VM-PROXY以Docker镜像的方式进行分发,因此需要在虚拟机上安装Docker。

  1. 在虚拟机1中安装v19.03.12版本Docker。
    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
  2. 在虚拟机2中安装v19.03.12版本Docker。
    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
  3. 在虚拟机3中安装v19.03.8版本Docker。
    apt-get update && apt-get install -y docker.io
    docker version

步骤二:设置启动参数

设置启动参数,步骤四:启动ASM-VM-PROXY将使用该启动参数实现以下功能。
  • 使用启动参数获取Kubernetes实例的Service CIDR,用于启动ASM-VM-PROXY。
  • 使用启动参数获取服务网格实例istioD地址,用于启动ASM-VM-PROXY。
  • 使用启动参数获取服务网格实例中间证书,并生成支持SPIFFE的虚拟机侧证书,用于启动ASM-VM-PROXY和数据平面通信。
分别在3个虚拟机的/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 地域标识,请参考地域标识
MESH_ID 服务网格实例ID
NS 虚拟机要加入的命名空间(Namespace)
SA 虚拟机要使用的服务账号(ServiceAccount)
POD_NAME 虚拟机要使用的Pod的名称

步骤三:获取镜像路径

以下为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

  1. 确定地域标识。
    ASM-VM-PROXY镜像开放了如下地域,请根据就近原则拉取镜像。
    地域标识 地域名称
    cn-hangzhou 华东1(杭州)
    cn-shanghai 华东2(上海)
    cn-qingdao 华北1(青岛)
    cn-beijing 华北2(北京)
    cn-zhangjiakou 华北3(张家口)
    cn-huhehaote 华北5(呼和浩特)
    cn-shenzhen 华南1(深圳)
    cn-chengdu 西南1(成都)
    cn-hongkong 中国(香港)
    ap-southeast-1 新加坡
    ap-southeast-2 澳大利亚(悉尼)
    ap-southeast-3 马来西亚(吉隆坡)
    ap-southeast-5 印度尼西亚(雅加达)
    ap-northeast-1 日本(东京)
    eu-central-1 德国(法兰克福)
    eu-west-1 英国(伦敦)
    us-west-1 美国(硅谷))
    us-east-1 美国(弗吉尼亚)
    ap-south-1 印度(孟买)
    me-east-1 阿联酋(迪拜)
  2. 确定版本标识。

    ASM-VM-PROXY后续的版本升级将会与ASM管控面一致。您可以在网格实例详情页获取版本信息。

    1. 登录ASM控制台
    2. 在左侧导航栏,选择服务网格 > 网格管理
    3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理
    4. 在网格实例详情页获取版本信息。版本信息

步骤四:启动ASM-VM-PROXY

执行以下命令,启动ASM-VM-PROXY。
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.{地域标识}.aliyuncs.com/acs/asm-vm-proxy:{版本标识}-aliyun

步骤五:检测ASM-VM-PROXY

  1. 检测ISTIO_INBOUND信息。
    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
  2. 检测ISTIO_IN_REDIRECT信息。
    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
  3. 检测ISTIO_OUTPUT信息。
    说明 172.**.*.*/20是ASM-VM-PROXY中获取的Kubernetes实例的Service CIDR。
    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.**.*.*/20

步骤六:诊断ASM-VM-PROXY

如果启动出现问题,您可以执行以下命令查看容器启动和Proxy运行的日志,定位启动问题。

  1. 查看容器启动日志。
    docker logs asm_vm_proxy
  2. 查看Proxy日志。
    docker exec -it asm_vm_proxy tail -n 100 /var/log/istio/istio.log

结果验证

  • ASM-VM-PROXY启动成功后,会与ASM通信。登录ASM控制台,单击概览,在概览页面可以看到3个ECS节点。概览
  • 登录ECS管理控制台,选择实例与镜像 > 实例。在实例列表页面单击目标实例操作列的管理,在实例详情页可以看到ASM-VM-PROXY为ECS实例标注了asm.cluster.id的标签,标签的值为ASM实例的ID。ECS