Istio Mixer Custom Template

20th August 2020 at 2:19pm
Istio
Note
这里的尝试是在 Istio 0.7.1 版本时做的,后续新的版本可能会有差异。

这里描述怎样弄一个自定义的 Template。

我的 adapter 名叫 tsfauth,内置的 template 没有合适的,我要弄一个跟它配套使用的 template。

先给 template 建个文件夹:

mkdir mixer/adapter/tsfauth/template/tsfauthcheck

template 目录下又加了一层 tsfauthcheck 目录,是因为 Mixer 的生成代码不好(指下面的 mixgenbootstrap),如果不加 tsfauthcheck 目录,生成的 mixer/template/template.gen.go 里面会有 import 冲突。servicecontrol adapter 也是同样的原因加了最后的目录。

模板名用 tsfauthcheck 而不用 tsfauth,是因为 Mixer 在解析配置文件时,template 和 handler 是用的同个「命名空间」的。如果两者都用同个名字 tsfauth,这时你在 operatorconfig 里面写 kind: tsfauth,Mixer 会把它当作是 handler 而不是 template,这样就你无法定义 template instance。mixer/testdata/config/quota.yaml 中也是同样的问题,所以它把 adapter 定义为 memquota,使用 quota 模板。

然后在这个目录中写你的 template.proto 文件,格式参考内置的几个。

生成 descriptor_set 文件:

cd mixer/adapter/tsfauth/template/tsfauthcheck
protoc --descriptor_set_out template_proto.descriptor_set -I /home/onlyice/go/src/istio.io/istio/vendor/istio.io/api/ -I . template.proto

生成 template.gen.go:

把这行代码加入 mixer/template/inventory.yaml:

../adapter/tsfauth/template/tsfauthcheck/template_proto.descriptor_set: "istio.io/istio/mixer/adapter/tsfauth/template/tsfauthcheck"
cd mixer/template
mixgenbootstrap -f inventory.yaml -o template.gen.go

生成 template_handler.gen.gotemplate_handler_service.proto:

cd mixer/adapter/tsfauth/template/tsfauthcheck
mixgenproc template_proto.descriptor_set -o template_handler.gen.go -t template_handler_service.proto 

生成 template_handler_service.pb.go 和文档:

$GOPATH/src/istio.io/istio/bin/mixer_codegen.sh -f mixer/adapter/tsfauth/template/tsfauthcheck/template_handler_service.proto

大功告成,在你的 adapter 的 GetInfo 函数中,指定它为 template 就可以了。