通过数据面集群KubeAPI访问Istio资源

ASM支持通过数据面集群的Kubernetes API(KubeAPI)对Istio资源进行增删改查操作,支持使用Helm管理应用。本文介绍如何使用数据面集群KubeAPI访问Istio资源。

前提条件

背景信息

Kubernetes API是通过HTTP提供的基于资源的编程接口,支持通过标准HTTP谓词(POST、PUT、PATCH、DELETE、GET)检索、创建、更新和删除集群的主资源,例如Deployment、Service等。更多信息,请参见Kubernetes API

注意事项

  • 强烈建议在单集群模式下使用集群KubeAPI访问Istio资源功能。如果ASM的数据平面有多个集群,则任意一个数据平面集群都可以对ASM上的Istio资源进行增删改查操作。

  • 开启数据面集群KubeAPI访问Istio资源功能后,数据面集群将无法删除istio-system命名空间。如果要删除,您需要先从ASM实例中移出数据面集群。

  • 开启数据面集群KubeAPI访问Istio资源功能后,数据平面需要等待1~2分钟的时间进行准备。

  • 删除数据平面的某一命名空间,不会删除ASM控制平面的对应命名空间,以及该命名空间下的Istio资源。

  • 如果ASM控制平面有某一命名空间,但是数据平面没有此命名空间,您需要先在数据平面创建出此命名空间,然后才能在这个命名空间下对Istio资源进行增删改查操作。否则会提示以下错误信息:

    Error from server (NotFound): error when creating "xx.yaml": namespaces "daily-01" not found
  • 如果在数据平面创建的Istio资源对应的命名空间在ASM控制平面不存在,则会在控制平面自动创建该命名空间。

  • 使用数据面集群KubeAPI创建的控制面Istio资源实际存储在控制面中。因此,请勿在通过数据面KubeAPI创建或更新Istio资源时,为资源增加属主为数据面资源的属主引用(owner references)字段,避免控制面的Istio资源因无法找到属主而被垃圾回收。

启用集群KubeAPI访问Istio资源功能

创建ASM实例时启用该功能

  1. 登录ASM控制台

  2. 在左侧导航栏,选择服务网格 > 网格管理

  3. 网格管理页面,单击创建新网格

  4. 创建服务网格页面,选中启用数据面集群KubeAPI访问Istio资源,仔细阅读并选中服务协议,然后单击创建服务网格

    关于其他配置项的说明,请参见创建ASM实例

为已有ASM实例时启用该功能

  1. 登录ASM控制台

  2. 在左侧导航栏,选择服务网格 > 网格管理

  3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理

  4. 基本信息页面,单击启用数据面KubeAPI访问右侧的启用

  5. 确认启用数据面集群KubeAPI访问对话框,单击确定

场景示例一:使用kubectl管理Istio资源

启用集群KubeAPI访问Istio资源功能,使用kubectl连接集群后,您可以使用集群的KubeConfig创建、查询、修改和删除Istio资源,本文以虚拟服务为例。

  • 使用以下命令,可以创建虚拟服务。

    kubectl apply -f <虚拟服务YAML文件名称>
  • 使用以下命令,可以查询虚拟服务。

    kubectl get Virtualservice
  • 使用以下命令,可以修改虚拟服务。

    kubectl edit Virtualservice <虚拟服务的名称>
  • 使用以下命令,可以删除虚拟服务。

    kubectl delete Virtualservice <虚拟服务的名称>

场景示例二:使用Helm安装软件

启用集群KubeAPI访问Istio资源功能后,Helm可以使用集群的KubeConfig同时安装软件至集群,安装Istio资源至ASM。

  1. 获取集群KubeConfig并通过kubectl工具连接集群

  2. 在本地安装Helm。具体操作,请参见Helm

    说明

    使用kubectl连接集群后,Helm客户端会自动使用KubeConfig连接集群。

  3. 下载Helm Chart示例istio-bookinfo至本地,然后对文件进行解压。

  4. 进入到istio-bookinfo目录下,执行以下命令,安装istio-bookinfo。

    helm install -f values.yaml istio-bookinfo ./

    预期输出:

    NAME:istio-bookinfo
    LAST DEPLOYED:THU May 26 16:44:19 2022
    NAMESPACE:default
    STATUE:deployed
    REVISION:1
    TEST SUITE:None
  5. 验证使用Helm安装软件是否成功。

    1. 在ACK控制台查看Bookinfo应用。

      1. 登录容器服务管理控制台

      2. 在控制台左侧导航栏中,单击集群

      3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情

      4. 在集群管理页面左侧导航栏,选择工作负载 > 无状态

      5. 无状态页面,设置命名空间为default。

        可以看到使用Helm安装的details、productpage、ratings等应用。

        说明

        在集群管理页面左侧导航栏选择应用 > Helm,在Helm页面可以查看Helm安装包。

        应用

    2. 在ASM控制台查看虚拟服务和网关规则。

      1. 登录ASM控制台

      2. 在左侧导航栏,选择服务网格 > 网格管理

      3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理

      4. 在网格详情页面左侧导航栏,选择流量管理中心 > 虚拟服务

        虚拟服务页面,可以看到使用Helm安装的名为bookinfo的虚拟服务。虚拟服务

      5. 在网格详情页面左侧导航栏,选择ASM网关 > 网关规则

        网关规则页面,可以看到使用Helm安装的名为bookinfo-gateway的网关规则。网关规则

相关操作

  • 执行以下命令,可以查看Helm安装列表。

    helm list
  • 执行以下命令,可以更新Helm Chart。

    helm upgrade -f values.yaml istio-bookinfo ./