KMS Internet VIP资源治理现场变更方案

更新时间:

背景

KMS产品在基线中申请了一个internet VIP,通过基线申请的云平台内解析生效的DNS域名提供服务。

为了提升安全性,该文档提供手动现场变更方案,指导对该Internet VIP进行下线动作。

 

企业版v3.16已进行过修复,方案为:新申请一个intranet类型的不同名vip(kms-internet-inner)及一个相关联的dns(kms-internet-inner),而原先的internet类型的vip(kms-internet)作为在tianji中的残留资源,后续确保无流量后可手动下线。
该方式存在遗留问题:原先旧的internet类型的vip有可能有用户通过配置DNS解析同步,同步解析记录的方式来访问,则切换dns关联的vip为内部以后,该类访问方式可能受影响。

 

 

场景梳理

 

预期所有316版本均已经使用最新修复方案的hotfix版本(v3.16.2r-kms-SP001)。如现场版本为316版本但与该316hotfix版本不一致则请先升级。commitid: `70b67b5f-5223-4205-99e8-5aae3374bcb7`

 

注意:

目前该方案仅适用于场景一及场景二。如下场景三及场景四不需要做治理变更。

场景一:3.16之前历史版本(不包含3.16)

存在kms-internet vip资源,需要下线该资源使用内部intranet类型。

3.16之前历史版本指小于企业版3.16版本(commitid:`fd1bf2c6-eec9-4590-ba50-961b74feb46e`)

方案总览

a.检查kms-internet vip是否有流量使用,确保无流量访问后可执行后续下线操作。

b.删除对应的kms-internet vip资源
c.创建resource.conf配置文件,新申请一个同名的kms-internet vip资源,但是类型设置为intranet。触发rolling

场景二:3.16及之后版本(由低版本升级,且未手动下线外部vip)

 

升级至316版本后kms-internet vip本身为inernet类型,需要确认无流量访问后执行外部vip下线变更方案。

方案总览

a.检查kms-internet vip是否有流量使用,确保无流量访问后可执行后续下线操作。

b.删除对应的kms-internet vip资源
c.创建resource.conf配置文件,新申请一个同名的kms-internet vip资源,但是类型设置为intranet。触发rolling

 

场景三:3.16及之后版本(低版本升级,已手动下线外部vip)

 

升级至316版本后kms-internet vip本身为inernet类型,通过手动变更方案处理后已经更正为intranet类型,无需再重复做修复操作。

 

场景四:3.16及之后版本(全新部署)

 

新申请kms-internet vip资源默认为intranet类型,无需做修复及下线操作。

 

 

 

方案介绍

a.检查原internet vip是否有承载流量

通过SLS日志平台查看

通过SLS日志平台查看

获取天基服务注册表中SLS对应的portal地址。服务变量名为:sls_portal.endpoint

  1. 登录天基控制台,选择报表 > 全部报表。在全部报表页面,搜索 服务注册变量 集群,如下图所示
  2. 在全部报表页面,模糊搜索 服务注册变量 集群,如下图所示。点击后进入
  3. 在服务注册变量页面,点击搜索图标后模糊搜索 sls,找到sls-common服务。
  4. 右键点击sls-common服务对应的服务注册变量,选择查看更多。找到对应的服务变量名为:sls_portal.endpoint的变量值复制至浏览器中访问。示例:
  5. 获取sls portal的登录ak/sk。
  6. 输入ak/sk登录后,选择对应的project:tjm-kmslogstore:monitor_kms_debug/monitor_kms_audit. 并点击 查询日志
  7. 直接填入并搜索对应的外部vip/dns资源值,查看日志中对应的 RequestAddr 属性是否匹配。匹配到的内容即为服务调用的日志记录。注意外部vip/dns的资源值都需要分别搜索检查

外部vip/dns的资源值获取方法可参考下方:获取internet vip对应的vip/dns资源信息

 

 

 

 

获取internet vip对应的vip/dns资源信息

登录tianji,在天基资源报表中查询资源"kms-internet"的vip/dns资源,点击显示更多查看资源详情

 

查看vip信息

 

 

查看dns信息

b. 切换公网域名

因为产品侧注册的域名,后端vip挂载的都是intranet的“kms-intranet”vip资源,因此原有的internet vip,有两种可能的引流方式:

  • 客户侧使用云平台提供的internet-domain域名,(云平台内部不应依赖internet-domain)
  • 客户侧的自有公网域名,后端挂载的internet vip
  • client端通过指定host的方式,通过ip直接访问

当通过sls查询internet vip统计信息,日志调用记录为0时,需要确认上述三种情况,要求客户:

  • 取消调用云平台侧提供的internet-domain域名
  • 取消原有公网域名的注册
  • 去除可能存在的client端的host ip绑定

修改之后再次通过sls查询internet vip统计信息,直到调用记录为0为止。

 

注意:sls portal中可查看访问的源端地址信息,例如 logstore为monitor_kms_debug时,ClientIp对应的值=源端地址信息。
需要排除掉健康检查或产品内部集群IP的访问记录,一般包含tianji上查看的集群物理机器(一般为3台)及service_test所在的VM机器(1台)。

 

c. slb上将vip置为inactive

登录slb-ag容器

  1. 登录天基控制台,选择运维 > 集群运维
  2. 集群运维页面,模糊搜索 slb 集群,选择 监控 > 集群运维中心,如下图所示。
  3. 集群运维中心 页面,选择 slb-controller 服务,SlbAg# 服务角色,如下图所示。
  4. 单击 Terminal,进入SlbAg#服务角色对应的机器,如下图所示。
  5. 执行如下命令,查找容器ID。
docker ps | grep slb-ag
  1. 执行如下命令,进入容器。
docker exec -it [$Docker_ID] bash

注:[$Docker_ID]为容器ID。

 

进入slb api cli工具

cli

1

查询对应的internet vip地址

获取对应的lb_id和user-id

info admin eip_or_lb address_or_lb_id [$internet_vip]

注:[$internet_vip]为internet VIP地址。

将internet vip置为inactive

config loadbalancer inactive user_id [$user_id] lb_id [$lb_id]

注:[$lb_id]为查询到的lb_id,[$user_id]为查询到的user_id

 

观察期:sls查看日志调用记录为0后,需要保持一个观察期,建议时间为7天。

d. 将vip置为active(用于方案回滚)

进入slb api cli工具,将internet vip置为active

config loadbalancer active user_id [$user_id] lb_id [$lb_id]

注:[$lb_id]为查询到的lb_id,[$user_id]为查询到的user_id

e. 删除原有internet vip资源

在确认原有vip不再使用,并且在观察期内(建议设置7天)无使用记录的前提下:(删除后无法回滚)

  • 调用天基API,delete原internet vip资源
    • 先获取资源的id,然后调用tianji的api设置deleting状态
    • 获取资源id可以根据资源名,如:curl "127.0.0.1:7070/api/v3/column/service.res.*?service.res.name=$vip_name&service.res.type=vip"
    • curl 'localhost:7070/api/v5/UpdateServiceResInfo?service=resmgr&instance_id=$service_id' -d '{"status": "deleting"}'

f. 修改tianji resource.conf文件

i、在tianji portal中添加resource.conf,如果没有可以直接提交。如果有建议人工处理,要看下之前这个文件做什么,自动处理的话可以把当前的vip配置更新进去,不丢掉已有配置就可以。

文件路径:services/${service_name}/resource.conf

ii、点击“预览并提交”,之后,天基会触发rolling,重新申请资源

文件路径:services/${service_name}/resource.conf

resource.conf的格式:

KmsInit#:

  db_init:
    vip:
      - name: kms-internet
        port: 443
        src_port: 5555
        protocol: tcp
        check_type: http
        uri: /status.html
        type: intranet
        hosts: ${myService.KmsHost:IP_LIST}
        open_tcp_session: false
        ha_apply_type: active-active
        bid: cloudbiz