Webhooks

    镜像下载地址: registry.cn-shenzhen.aliyuncs.com/rancher/webhook:latest

    1. 支持镜像仓库类型:

      阿里云镜像仓库: https://cr.console.aliyun.com\ Docker Hub: http://hub.docker.com\ 自定义 webhooks

    2. 支持邮件通知

    2. 准备配置文件

    1. 登录 Rancher UI 切换到system项目下,然后依次进入 资源\配置映射,单击页面右上角的添加配置映射

    2. 修改模板中对应的参数:

      • <webhooks_id>: 此webhooks-id具有唯一性,不能重复。建议设置为服务名,比如cnrancher_website
      • <token>: 设置一个 token 值用于匹配校验;
      • <workload>: 指定一个应用,书写格式为类型/Workload,例如: deployment/webhooks、daemonset/webhooks
      • <namespaces>: 指定服务所在的命名空间;
      • <container>: 指定容器名称,对于一个有多容器的 Pod,升级时需要指定容器名称;
      • <MAIL_TO>: 收件人邮箱地址;

      Copy

    3. 填写添加配置映射参数,其中:

      • : 可以随意填写;
      • : 以.json结尾的文件名,比如cnrancher.json;
      • : 设置为上一步中修改的配置文件;
      • 如果有多个服务,可以添加多个键值对,如图:

    依次单击 system项目\工作负载\工作负载,单击右侧部署服务。

    1. 配置服务名称和镜像

      registry.cn-shenzhen.aliyuncs.com/rancher/webhook

      image-20190314173915552

    2. 对外服务

      • 服务默认监听端口为9000,如果使用 NodePort 提供服务,则安以下方式配置;

      • 如果使用负载均衡服务,在负载均衡页面添加相应规则,如果使用 https,记得配置 ssl 证书;

      image-20190923184601819

    3. 配置环境变量

      WEBHOOK_CMD=-template: 系统命令;\ MAIL_SMTP_PORT=: 邮箱 SMTP 服务器端口;\ MAIL_SMTP_SERVER=: 邮箱 SMTP 服务器地址,(需要 base64 加密: echo <SMTP 服务器地址> | base64 );\ MAIL_FROM= : 发件人邮箱,(需要 base64 加密: echo <发件人邮箱> | base64 );\ MAIL_PASSWORD=: 发件人邮箱密码,(需要 base64 加密: echo <密码> | base64 );\ MAIL_CACERT=: 自签名 CA 证书,邮箱服务器采用自签名 ssl 证书时使用(需要 base64 加密: cat <ca 文件> | base64 );\ MAIL_TLS_CHECK=: 是否开启 TLS 认证(false/true,默认 true);

      请以文字说明为准,图片是早期版本截图,图片中有些地方未做 base64 加密

      • 常用邮箱配置(qq,163 等)

      • 自签名证书邮箱服务器

      image-20190315233201822

      • 不启用 TLS 认证邮箱

    4. 端口: 9000

      image-20190314174424562

    5. 配置数据卷

      • 选择配置映射卷

      • 配置映射名: 选择前面创建的配置映射;

      • 容器路径: /etc/webhook/source;

      • 其他参数保持默认;

      image-20190314174834334

    6. 设置serviceaccounts

      这一步相对比较重要,webhooks 服务需要serviceaccounts才可以正常的与 K8S 通信。因为目前 Rancher UI 不支持设置serviceaccounts,所以需要编辑yaml文件来配置serviceaccounts。为了方便,这里复用了 rancher 组件使用的serviceaccounts账号cattle,具有集群管理员角色,您也可以根据需要定制serviceaccounts角色。

      • 如图,选择

      • securityContext: {} 下边添加serviceAccount: cattleserviceAccountName: cattle

      image-20190314212124745

      • 最后单击保存

    4. webhooks 触发地址

    Copy

    1. 如果是阿里云的镜像仓库,可在 url 中添加net_type指定网络类型:

      • 公共网络:

        如果不指定,则默认为公共网络拉取镜像

      • 专有网络:

        net_type=vpc

      • 经典网络:

        net_type=internal

      其中<webhooks_id>、<namespaces>、<workload>、<container>对应模板中的参数,<repo_type>支持:aliyundockerhubcustom

    1. 选择一个需要添加自动触发功能的仓库,单击右侧的管理;

    2. 在切换的新窗口左上角选择触发器;

    3. webhooks 触发消息示例:

      Copy

    1. 浏览器访问https://cloud.docker.com/repository/list,输入账号和密码后将进入仓库列表;

    2. 单击需要添加 webhooks 仓库,然后单击 webhooks;

      image-20190314182034766

    3. 填写相关参数,单击右侧的加号;

    4. webhooks 触发消息示例:

      Copy

    如果是使用 Jenkins 自定义构建镜像,可以设置repo_type\=custom

    在 Jenkins 构建task中,在镜像push操作后增加一个执行shell命令的步骤。这个操作主要是在镜像成功推送到镜像仓库后发出POST消息去触发 webhooks,这步中需要把上一步推送的镜像仓库地址,镜像命名空间,镜像名,以及镜像tag作为变量传递到这一步,这样在发送POST消息才可以把相关的镜像信息传递给 webhooks,从而触发服务升级。

    示例:

    Copy

    6. 触发 webhooks

    1. 配置完以上参数,提交代码到 git 仓库后将会自动触发阿里云仓库或者 dockerhub 的自动构建,创建自动构建方法请自行查阅相关文档。

      image-20190314212701691

    2. 当镜像构建完成并推送到仓库后,会触发 webhooks 消息到预先配置的地址,从触发器也可以查看历史记录。

      image-20190314213215303

    3. webhooks 服务收到消息后,会马上触发服务的升级。查看 webhooks 服务的日志,可以看到已经成功升级。