雲計算

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

ASM-VM-PROXY是連接ASM和VM的工具,運行在VM節點中,負責與ASM通信獲取xDS信息、劫持非容器應用流量並執行網格化操作(比如上報鏈路追蹤數據、請求安全認證等)。為了支持跨操作系統,以docker image的方式分發。

1-1-asm-vm-proxy.png

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 啟動

啟動腳本

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

1-2-asm-dashboard.png

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

Leave a Reply

Your email address will not be published. Required fields are marked *