对于部署在容器服务Kubernetes版中的Java应用,可以使用AHAS应用防护对其配置流控、降级和系统规则来保证系统稳定性。本文将介绍如何将容器服务Kubernetes版中的应用接入AHAS应用防护。

前提条件

快速创建Kubernetes托管版集群

步骤一:安装AHAS组件

在容器服务Kubernetes中安装AHAS组件后才能将Java应用接入AHAS应用防护。

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中选择市场 > 应用目录
  3. 应用目录页面单击阿里云应用页签,选中ack-ahas-sentinel-pilot应用。

    阿里云应用包含较多应用,您可在页面右上角搜索ack-ahas-sentinel-pilot,支持关键字搜索。

  4. 应用目录 - ack-ahas-sentinel-pilot页面右侧创建区域,选择目标集群,然后单击创建cluster_ahas_sentinel_pilot_02
    参数 描述 备注
    region_id
    • 如果集群和VPC之间有专线,该参数为专线连接的region。
    • 如果集群和VPC之间没有专线,该参数填入cn-public
    根据所选集群自动生成。
    cluster_id 您的集群ID。
    cluster_name 您的集群名称。

步骤二:为Java应用开启AHAS应用防护

您可以按需为新建的应用或已有的应用开启AHAS应用防护。

  • 如需在创建新应用的同时开启AHAS应用防护,具体步骤如下:
    1. 登录容器服务管理控制台
    2. 在控制台左侧导航栏中,单击集群
    3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
    4. 在集群管理页左侧导航栏中,选择工作负载 > 无状态
    5. 无状态(Deployment)页面右上角单击使用模板创建
    6. 创建页面上选择示例模板,并在模板中将以下annotations添加到spec > template > metadata层级下,然后单击创建
      annotations:
        # 是否开启AHAS插件,on、true表示开启,off、false表示关闭。
        ahasPilotAutoEnable: "on"
        # 将 <your-deployment-name> 替换为应用名称。
        ahasAppName: "<your-deployment-name>"
        #命名空间默认为default。
        ahasNamespace: "default"
        # 将 <your-license> 替换为真实license。
        ahasLicenseKey: "<your-license>"  
      annotations:
        # 是否开启AHAS插件,on、true表示开启,off、false表示关闭。
        ahasPilotAutoEnable: "on"
        # 将 <your-deployment-name> 替换为应用名称。
        ahasAppName: "<your-deployment-name>"
        #命名空间默认为default。
        ahasNamespace: "default"
       

      如需修改YAML文件中其它配置项,配置项说明如下:

      表 1. 配置项
      Parameter Description Default
      image.imageTag pilot镜像tag。 0.1.1
      image.imagePullPolicy 镜像拉取策略,必须是Always、IfNotPresent、Never三者中的一个。 Always
      controller.logLevel pilot日志级别,1表示INFO,2表示DEBBUG。 1
      controller.region_id 目标集群所在的region,如cn-hangzhou、cn-beijing、cn-shenzhen、cn-shanghai。如果是公网,则为cn-public。 cn-hangzhou

      完整YAML示例模板如下:

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: agent-foo
        labels:
          name: agent-foo
      spec:
        replicas: 1
        selector:
          matchLabels:
            name: agent-foo
        template:
          metadata:
            labels:
              name: agent-foo
            annotations:
              ahasPilotAutoEnable: "on"
              ahasAppName: "K8sFooTest"
              ahasNamespace: "default"
          spec:
            containers:
            - name: foo
              image: registry.cn-hangzhou.aliyuncs.com/sentinel-docker-repo/foo:0.1.1
              imagePullPolicy: Always          
  • 如需为现有应用开启AHAS应用防护,操作步骤如下。
    1. 登录容器服务管理控制台
    2. 在控制台左侧导航栏中,单击集群
    3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
    4. 在集群管理页左侧导航栏中,选择工作负载 > 无状态工作负载 > 有状态
    5. 无状态(Deployment)有状态(StatefulSet)页面上,单击目标应用右侧操作列中选择更多 > 查看YAML
    6. 编辑YAML对话框中将以下annotations添加到spec > template > metadata层级下,并单击更新
      annotations:
        # 是否开启AHAS插件,on、true表示开启,off、false表示关闭。
        ahasPilotAutoEnable: "on"
        #将 <your-deployment-name> 替换为应用名称。
        ahasAppName: "<your-deployment-name>" 
        #命名空间默认为default。
        ahasNamespace: "default"
        #将 <your-license> 替换为真实license,在公网环境中AHAS控制台 > 流量防护 >应用防护 > 新应用接入页面获取。
        ahasLicenseKey: "<your-license>"
      annotations:
        # 是否开启AHAS插件,on、true表示开启,off、false表示关闭。
        ahasPilotAutoEnable: "on"
        #将 "<your-deployment-name>" 替换为应用名称。
        ahasAppName: "<your-deployment-name>"
        #命名空间默认为default。
        ahasNamespace: "default"

结果验证

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 在集群管理页左侧导航栏中,选择工作负载 > 无状态工作负载 > 有状态

在目标应用的操作列将出现应用流控按钮。单击应用流控即可跳转至AHAS控制台

result_k8s