镜像下载地址: registry.cn-shenzhen.aliyuncs.com/rancher/webhook:latest
支持镜像仓库类型:
阿里云镜像仓库:
https://cr.console.aliyun.com
Docker Hub:http://hub.docker.com
自定义 webhooks支持邮件通知
2. 准备配置文件
登录 Rancher UI 切换到
system
项目下,然后依次进入资源\配置映射
,点击页面右上角的添加配置映射
。修改模板中对应的参数:
<webhooks_id>
: 此webhooks-id
具有唯一性,不能重复。建议设置为服务名,比如cnrancher_website
;<token>
: 设置一个 token 值用于匹配校验;<workload>
: 指定一个应用,书写格式为类型/Workload
,例如:deployment/webhooks、daemonset/webhooks
;<namespaces>
: 指定服务所在的命名空间;<container>
: 指定容器名称,对于一个有多容器的 Pod,升级时需要指定容器名称;<MAIL_TO>
: 收件人邮箱地址;<NET_TYPE>
: 如果阿里云的镜像仓库,可在 url 中添加net_type
指定网络类型: 1.公共网络: 不指定默认为公共网络,2.专有网络:net_type=vpc
,3.经典网络:net_type=internal
;
填写
添加配置映射
参数,其中:名称
: 可以随意填写;键
: 以.json
结尾的文件名,比如cnrancher.json
;值
: 设置为上一步中修改的配置文件;- 如果有多个服务,可以添加多个键值对,如图:
依次点击 system项目\工作负载\工作负载
,点击右侧部署服务。
配置服务名称和镜像
registry.cn-shenzhen.aliyuncs.com/rancher/webhook
对外服务
- 服务默认监听端口为
9000
,如果使用 NodePort 提供服务,则安以下方式配置;
- 如果使用负载均衡服务,在负载均衡页面添加相应规则,如果使用 https,记得配置 ssl 证书;
- 服务默认监听端口为
配置健康检查
端口:
9000
配置数据卷
- 选择配置映射卷
配置映射名: 选择前面创建的配置映射;
容器路径:
/etc/webhook/source
;其他参数保持默认;
[](https://github.com/cnrancher/docs-rancher2/blob/master/img/rancher/old-doc/image-20190314174834334.png)
最后点击启动,启动后查看日志,可以看到当前监听的服务
设置
serviceaccounts
这一步相对比较重要,webhooks 服务需要
serviceaccounts
才可以正常的与 K8S 通信。因为目前 Rancher UI 不支持设置serviceaccounts
,所以需要编辑yaml
文件来配置serviceaccounts
。为了方便,这里复用了 rancher 组件使用的serviceaccounts
账号cattle
,具有集群管理员角色,您也可以根据需要定制serviceaccounts
角色。- 如图,选择
查看/编辑YAML
- 在
securityContext: {}
下边添加serviceAccount: cattle
和serviceAccountName: cattle
;
- 最后点击
保存
- 如图,选择
4. webhooks 触发地址
如果是阿里云的镜像仓库,可在 url 中添加
net_type
指定网络类型:公共网络:
如果不指定,则默认为公共网络拉取镜像
专有网络:
net_type=vpc
经典网络:
net_type=internal
其中`<webhooks_id>、<namespaces>、<workload>、<container>`对应模板中的参数,`<repo_type>`支持:`aliyun`、`dockerhub`、`custom`。
浏览器访问;
点击需要添加 webhooks 仓库,然后点击 webhooks;
填写相关参数,点击右侧的加号;
webhooks 触发消息示例:
"push_data": {
"pushed_at": 1552553567,
"images": [],
"tag": "latest",
},
"callback_url": "",
"repository": {
"status": "Active",
"description": "iperf3",
"is_trusted": true,
"full_description": "# iperf3\niperf3\n",
"repo_url": "",
"owner": "hongxiaolu",
"is_official": false,
"is_private": false,
"name": "iperf3",
"namespace": "hongxiaolu",
"star_count": 0,
"comment_count": 0,
"date_created": 1540013520,
"dockerfile": "# ",
"repo_name": "hongxiaolu/iperf3"
}
}
如果是使用 Jenkins 自定义构建镜像,可以设置repo_type
\=custom
。
在 Jenkins 构建task
中,在镜像push
操作后增加一个执行shell命令
的步骤。这个操作主要是在镜像成功推送到镜像仓库后发出POST消息
去触发 webhooks,这步中需要把上一步推送的镜像仓库地址
,镜像命名空间
,镜像名
,以及镜像tag
作为变量传递到这一步,这样在发送POST消息
才可以把相关的镜像信息传递给 webhooks,从而触发服务升级。
示例POST消息
: