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

前提条件

快速创建Kubernetes托管版集群

步骤一:安装AHAS组件

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

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中选择市场 > 应用市场
  3. 应用目录页面的搜索框中输入ack-ahas-sentinel-pilot应用并单击。
  4. ack-ahas-sentinel-pilot页面右上角单击一键部署,在弹出的创建面板选择目标集群,单击下一步然后单击确定efgh
    参数描述备注
    region_id
    • 如果集群和VPC之间有专线,该参数为专线连接的region。
    • 如果集群和VPC之间没有专线,该参数填入cn-public
    根据所选集群自动生成。
    cluster_id您的集群ID。
    cluster_name您的集群名称。

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

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

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

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

      表 1. 配置项
      ParameterDescriptionDefault
      image.imageTagpilot镜像tag。0.1.1
      image.imagePullPolicy镜像拉取策略,必须是Always、IfNotPresent、Never三者中的一个。Always
      controller.logLevelpilot日志级别,1表示INFO,2表示DEBUG。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
      公网
      annotations:
        ahasPilotAutoEnable: "on"   # 是否开启AHAS插件,on、true表示开启,off、false表示关闭。 
        ahasAppName: "<your-deployment-name>"   # 将 <your-deployment-name> 替换为应用名称。 
        ahasNamespace: "default"   #命名空间默认为default。 
        ahasLicenseKey: "<your-license>"  #将 <your-license> 替换为真实license,在公网环境中AHAS控制台 > 流量防护 >应用防护 > 新应用接入页面获取。 
      非公网
      annotations:
        ahasPilotAutoEnable: "on"  # 是否开启AHAS插件,on、true表示开启,off、false表示关闭。
        ahasAppName: "<your-deployment-name>"   # 将<your-deployment-name>替换为应用名称。
        ahasNamespace: "default"   #命名空间默认为default。

结果验证

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

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

result_k8s