天天看點

非容器應用與K8s工作負載的服務網格化實踐-1 ASM-VM-PROXY的安裝

ASM-VM-PROXY是連接配接ASM和VM的工具,運作在VM節點中,負責與ASM通信擷取xDS資訊、劫持非容器應用流量并執行網格化操作(比如上報鍊路追蹤資料、請求安全認證等)。為了支援跨作業系統,以Docker Image的方式分發。

非容器應用與K8s工作負載的服務網格化實踐-1 ASM-VM-PROXY的安裝

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級别的名稱

用途聲明

  1. 擷取使用者的Kubernetes執行個體的

    Service CIDR

    ,用于啟動用于啟動asm_vm_proxy
  2. 擷取使用者的ServiceMesh執行個體

    istioD

    位址,用于啟動asm_vm_proxy
  3. 擷取使用者的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執行個體頁面,在基本資訊中檢視相關版本資訊。

非容器應用與K8s工作負載的服務網格化實踐-1 ASM-VM-PROXY的安裝

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節點。

非容器應用與K8s工作負載的服務網格化實踐-1 ASM-VM-PROXY的安裝

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           

繼續閱讀