Istio Proxy用于连接虚拟机应用所在的数据平面与ASM提供的控制平面。启用Istio Proxy后,您可以通过服务网格ASM管理虚拟机上的应用。本以Bookinfo应用为例,介绍如何通过服务网格ASM管理虚拟机上的应用。

前提条件

背景信息

启用Istio Proxy后,对Bookinfo应用进行网格化,可以实现在ASM调用ECS虚拟机上的应用。调用

虚拟机环境准备

部署Bookinfo应用前,需要参考表格内容准备虚拟机环境。本文以Bookinfo应用为例,您可以根据实际情况准备虚拟机环境。
名称 发行版本 内核版本 Bookinfo应用包含的微服务
vm1 Ubuntu 20.04.1 LTS 5.4.0-65-generic productpage
vm2 Ubuntu 20.04.1 LTS 5.4.0-65-generic reviews-v1
vm3 CentOS Linux release 8.3.2011 4.18.0-240.15.1.el8_3.x86_64 reviews-v2
vm4 CentOS Linux release 8.3.2011 4.18.0-240.15.1.el8_3.x86_64 reviews-v3
vm5 Alibaba Cloud Linux (Aliyun Linux) release 2.1903 LTS 4.19.91-23.al7.x86_64 details
vm6 Alibaba Cloud Linux (Aliyun Linux) release 2.1903 LTS 4.19.91-23.al7.x86_64 ratings

步骤一:获取虚拟机的私有IP

  1. 登录ASM控制台
  2. 在左侧导航栏,选择服务网格 > 网格管理
  3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理
  4. 在网格管理详情页面选择数据平面(服务发现) > 虚拟机
    虚拟机页面查看目标虚拟机IP列下的IP。

步骤二:在虚拟机上部署Bookinfo

  1. 执行以下命令,部署productpage。
    PRODUCTPAGE_REPO=docker.io/istio/examples-bookinfo-productpage-v1:1.16.2
    
    docker run -d \
        --name=productpage \
        -e SERVICES_DOMAIN=bookinfo \
        --network=host \
        $PRODUCTPAGE_REPO
  2. 执行以下命令,部署reviews-v1。
    REVIEWS_REPO=docker.io/istio/examples-bookinfo-reviews-v1:1.16.2
    docker run -d \
        --name=reviews1 \
        -e SERVICES_DOMAIN=bookinfo \
        --network=host \
        $REVIEWS_REPO
  3. 执行以下命令,部署reviews-v2。
    REVIEWS_REPO=docker.io/istio/examples-bookinfo-reviews-v2:1.16.2
    docker run -d \
        --name=reviews2 \
        -e SERVICES_DOMAIN=bookinfo \
        --network=host \
        $REVIEWS_REPO
  4. 执行以下命令,部署reviews-v3。
    REVIEWS_REPO=docker.io/istio/examples-bookinfo-reviews-v3:1.16.2
    docker run -d \
        --name=reviews3 \
        -e SERVICES_DOMAIN=bookinfo \
        --network=host \
        $REVIEWS_REPO
  5. 执行以下命令,部署details。
    DETAILS_REPO=docker.io/istio/examples-bookinfo-details-v1:1.16.2
    docker run -d \
        --name=details \
        --network=host \
        $DETAILS_REPO
  6. 执行以下命令,部署ratings。
    RATINGS_REPO=docker.io/istio/examples-bookinfo-ratings-v1:1.16.2
    docker run -d \
        --name=ratings \
        --network=host \
        $RATINGS_REPO

步骤三:在ASM配置Bookinfo路由规则

  1. 在ASM配置productpage。
    1. 登录ASM控制台
    2. 在左侧导航栏,选择服务网格 > 网格管理
    3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理
    4. 在网格详情页面左侧导航栏选择流量管理 > 服务条目,然后在右侧页面单击新建
    5. 新建面板选择命名空间,将以下内容复制到文本框,然后单击确定
      使用服务条目将productpage服务添加到ASM内部维护的服务注册表。
      apiVersion: networking.istio.io/v1beta1
      kind: ServiceEntry
      metadata:
        name: mesh-expansion-productpage
        namespace: bookinfo
      spec:
        hosts:
          - productpage.bookinfo.svc.cluster.local
          - productpage.bookinfo
        location: MESH_INTERNAL
        ports:
          - name: http-9080
            number: 9080
            protocol: HTTP
        resolution: STATIC
        workloadSelector:
          labels:
            app: productpage
    6. 在网格详情页面左侧导航栏选择流量管理 > 工作负载条目,然后在右侧页面单击新建
    7. 新建面板选择命名空间,将以下内容复制到文本框,然后单击确定
      使用工作负载条目定义了productpage服务的工作负载属性。
      apiVersion: networking.istio.io/v1beta1
      kind: WorkloadEntry
      metadata:
        name: mesh-expansion-productpage-1
        namespace: bookinfo
      spec:
        address: 10.0.*.**
        labels:
          app: productpage
        serviceAccount: bookinfo-productpage

      address:虚拟机私有IP,本列输入productpage的虚拟机IP。关于productpage的虚拟机IP获取方式,请参见步骤一:获取虚拟机的私有IP

  2. 在ASM配置reviews。
    1. 使用以下内容,创建服务条目。具体操作,请参见步骤1
      使用服务条目将reviews服务添加到ASM内部维护的服务注册表。
      apiVersion: networking.istio.io/v1beta1
      kind: ServiceEntry
      metadata:
        name: mesh-expansion-reviews
        namespace: bookinfo
      spec:
        hosts:
          - reviews.bookinfo.svc.cluster.local
          - reviews.bookinfo
        location: MESH_INTERNAL
        ports:
          - name: http-9080
            number: 9080
            protocol: HTTP
        resolution: STATIC
        workloadSelector:
          labels:
            app: reviews
                                      
    2. 使用以下内容,创建工作负载条目。具体操作,请参见步骤1
      使用工作负载条目定义了reviews服务的工作负载属性。
      apiVersion: networking.istio.io/v1beta1
      kind: WorkloadEntry
      metadata:
        name: mesh-expansion-reviews-1
        namespace: bookinfo
      spec:
        address: 10.0.**.**
        labels:
          app: reviews
        serviceAccount: bookinfo-reviews
      ---
      apiVersion: networking.istio.io/v1beta1
      kind: WorkloadEntry
      metadata:
        name: mesh-expansion-reviews-2
        namespace: bookinfo
      spec:
        address: 10.0.**.**
        labels:
          app: reviews
        serviceAccount: bookinfo-reviews
      ---
      apiVersion: networking.istio.io/v1beta1
      kind: WorkloadEntry
      metadata:
        name: mesh-expansion-reviews-3
        namespace: bookinfo
      spec:
        address: 10.0.**.**
        labels:
          app: reviews
        serviceAccount: bookinfo-reviews

      address:虚拟机私有IP,本列输入reviews-v1、reviews-v2、reviews-v3的虚拟机IP。关于reviews的虚拟机IP获取方式,请参见步骤一:获取虚拟机的私有IP

  3. 在ASM配置details。
    1. 使用以下内容,创建服务条目。具体操作,请参见步骤1
      使用服务条目将details服务添加到ASM内部维护的服务注册表。
      apiVersion: networking.istio.io/v1beta1
      kind: ServiceEntry
      metadata:
        name: mesh-expansion-details
        namespace: bookinfo
      spec:
        hosts:
          - details.bookinfo.svc.cluster.local
          - details.bookinfo
        location: MESH_INTERNAL
        ports:
          - name: http-9080
            number: 9080
            protocol: HTTP
        resolution: STATIC
        workloadSelector:
          labels:
            app: details
    2. 使用以下内容,创建工作负载条目。具体操作,请参见步骤1
      使用工作负载条目定义了details服务的工作负载属性。
      apiVersion: networking.istio.io/v1beta1
      kind: WorkloadEntry
      metadata:
        name: mesh-expansion-details-1
        namespace: bookinfo
      spec:
        address: 10.0.**.**
        labels:
          app: details
        serviceAccount: bookinfo-details

      address:虚拟机私有IP,本列输入details的虚拟机IP。关于details的虚拟机IP获取方式,请参见步骤一:获取虚拟机的私有IP

  4. 在ASM配置ratings。
    1. 使用以下内容,创建服务条目。具体操作,请参见步骤1
      使用服务条目将ratings服务添加到ASM内部维护的服务注册表。
      apiVersion: networking.istio.io/v1beta1
      kind: ServiceEntry
      metadata:
        name: mesh-expansion-ratings
        namespace: bookinfo
      spec:
        hosts:
          - ratings.bookinfo.svc.cluster.local
          - ratings.bookinfo
        location: MESH_INTERNAL
        ports:
          - name: http-9080
            number: 9080
            protocol: HTTP
        resolution: STATIC
        workloadSelector:
          labels:
            app: ratings
    2. 使用以下内容,创建工作负载条目。具体操作,请参见步骤1
      使用工作负载条目定义了ratings服务的工作负载属性。
      apiVersion: networking.istio.io/v1beta1
      kind: WorkloadEntry
      metadata:
        name: mesh-expansion-ratings-1
        namespace: bookinfo
      spec:
        address: 10.0.**.**
        labels:
          app: ratings
        serviceAccount: bookinfo-ratings

      address:虚拟机私有IP,本列输入ratings的虚拟机IP。关于ratings的虚拟机IP获取方式,请参见步骤一:获取虚拟机的私有IP

  5. 设置Bookinfo的网关。
    1. 在网格详情页面左侧导航栏选择流量管理 > 网关规则,然后在右侧页面单击新建
    2. 新建面板选择命名空间,将以下内容复制到文本框,然后单击确定
      apiVersion: networking.istio.io/v1alpha3
      kind: Gateway
      metadata:
        name: bookinfo-gateway
      spec:
        selector:
          istio: ingressgateway
        servers:
        - port:
            number: 80
            name: http
            protocol: HTTP
          hosts:
          - "*"
  6. 设置Bookinfo的路由规则。
    1. 在网格详情页面左侧导航栏选择流量管理 > 虚拟服务,然后在右侧页面单击新建
    2. 新建面板选择命名空间,将以下内容复制到文本框,然后单击确定
      使用VirtualService定义来自productpage、static、login、logout、api/v1/products可以访问到productpage服务。
      apiVersion: networking.istio.io/v1alpha3
      kind: VirtualService
      metadata:
        name: bookinfo
      spec:
        hosts:
        - "*"
        gateways:
        - bookinfo-gateway
        http:
        - match:
          - uri:
              exact: /productpage
          - uri:
              prefix: /static
          - uri:
              exact: /login
          - uri:
              exact: /logout
          - uri:
              prefix: /api/v1/products
          route:
          - destination:
              host: productpage
              port:
                number: 9080
  7. 查看入口网关地址。
    1. 登录ASM控制台
    2. 在左侧导航栏,选择服务网格 > 网格管理
    3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理
    4. 在网格详情页面左侧导航栏单击ASM网关页面,查看入口网关端口映射列下的IP地址。

结果验证

在浏览器中访问<入口网关IP地址>/productpage,显示以下页面,说明使用ASM管理虚拟机上的Bookinfo应用成功。bookinfo