
# 创建节点时使用OBS桶实现自定义脚本注入
#### 应用现状
对于需要在节点上提前安装一些工具或者做用户自定义的安全加固等操作时，需要在创建节点的时候注入一些脚本。CCE创建节点提供了Kubernetes安装前和安装后两处注入脚本的功能。但是使用通常碰到如下限制：
- 注入脚本的字符有限。
- 各种需求、场景的多样性可能会经常修改注入的脚本内容，而对于CCE节点池的注入脚本是固定的，不适合经常修改。
 
#### 解决方案
本文提供CCE+OBS结合的方式，提供了一种简化、可扩展、易维护的最佳实践方式，方便用户在CCE节点上做一些自定义操作。
将安装前和安装后脚本存放在OBS中，在创建节点池的时候，安装前和安装后注入脚本直接拉取OBS对应脚本的地址并执行即可。对于CCE节点池这处的配置基本来就可以不用变化了，后期如果有新的需求只需要更新OBS的脚本内容即可。
![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001214598479.png "点击放大")
#### OBS桶维护建议
- 若无单独用于运维的OBS的桶，建议单独创建一个专用于运维的桶，方便后续整体运维组使用。
- 建议在桶中新建多级目录tools/cce，表示工具集合中的cce部分下，方便维护，后续还可以放其他的工具脚本。
 
#### 注意事项
- 脚本实现的自定义操作如果失败，会影响正常业务运行，建议在脚本最后添加检查程序。若检查失败，可以在安装后脚本中将kubelet进程停止掉，避免业务调度到该节点上。
  ```
  systemctl stop kubelet-monit
  systemctl stop kubelet
  ```
  
- 脚本中尽量不要放敏感信息，避免泄露。
 
#### 操作步骤
1. 创建OBS桶。
2. 上传安装前和安装后脚本。以pre_install.sh和post_install.sh为例。 
   图1上传脚本   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001168957708.png "点击放大")
   
   
3. 为脚本配置只读安全策略，保证CCE节点可以免密下载的同时，外网不可以下载。 
   1. 配置tools/cce目录的策略，选择"只读模板"。
      图2配置对象策略   
      ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001169436224.png "点击放大") 
   
   2. 修改匿名用户、指定对象、条件的配置信息。
      图3匿名用户   
      ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001214597123.png "点击放大")
      图4指定对象   
      ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001214597125.png "点击放大")
      图5设置条件   
      ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001169118786.png "点击放大")
      设置的条件中主要包含两个：UserAgent和源IP。
      - UserAgent类似密钥的作用，访问时必须带上指定的User-Agent请求头以及对应的设置的key值。
      
      - 源IP主要防止外网访问，配置了100.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,214.0.0.0/8。其中，100.0.0.0/8和214.0.0.0/8是内网地址；10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16是通常的私网地址。
       
      OBS的策略的详细配置方法请参见[配置对象策略](https://support.huaweicloud.com/usermanual-obs/obs_03_0075.html)和[桶策略参数说明](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0041.html#section4)。
      
   
   
   
   
4. 在CCE创建节点池时配置安装前执行脚本和安装后执行脚本。 
   在创建节点池的云服务器高级配置中填写如下命令。
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001237974048.png "点击放大")
   如下命令是先使用curl命令从OBS中下载pre_install.sh和post_install.sh到/tmp目录，然后执行pre_install.sh和post_install.sh。
   安装前执行脚本：
   ```
   curl -H "User-Agent: ccePrePostInstall" https://ops-cce.obs.cn-north-4.myhuaweicloud.com/tools/cce/pre_install.sh -o  /tmp/pre_install.sh && bash -x /tmp/pre_install.sh > /tmp/pre_install.log 2>&1
   ```
   安装后执行脚本：
   ```
   curl -H "User-Agent: ccePrePostInstall" https://ops-cce.obs.cn-north-4.myhuaweicloud.com/tools/cce/post_install.sh -o  /tmp/post_install.sh && bash -x /tmp/post_install.sh > /tmp/post_install.log 2>&1
   ```
   ![](https://support.huaweicloud.com/bestpractice-cce/public_sys-resources/note_3.0-zh-cn.png)
   - User-Agent的实际取值根据OBS桶策略中配置
   
   - 链接中的桶和地址均需要按实际链接地址配置
    
   
   
 
