在kubernetes 1.6中,信息存储在etcd v3中,我使用" etcdctl获取"命令获取如下信息:
我的问题是如何反序列化信息?如何通过" protoc --raw"来反序列化信息。命令?我在网站上看到了这篇论文:
"您有我们捕获并在Prevent protobuf中修复的异常数据 使用etcd2存储,这是base64编码的protobuf(etcd2没有 支持存储二进制值)。在1.6中我们默认为etcd3模式, 它支持二进制值,默认为存储 "应用/ vnd.kubernetes.protobuf"这是以下形式 值
4个字节 - 运行时的
k8s\x00
protobuf编码。未知 (PKG /运行/ types.go#未知) *" typeMeta"字段设置为将从API返回的kind和apiVersion的相同值 *" raw"字段设置为由typeMeta标识的golang结构的protobuf编码字节 - 没有幻数您可以使用以下方法解码:
头-4(剥离幻数)| protoc --raw(解码原型)
然后您可以使用protoc解码原始身体。"
但我不知道如何表演,有人知道吗?
答案 0 :(得分:1)
尝试这个
ETCDCTL_API=3 etcdctl get /registry/namespaces/default -w protobuf | protoc --decode_raw
输出应该如下
1 {
1: 14841639068965178418
2: 10276657743932975437
3: 7839988
4: 2
}
2 {
1: "/registry/namespaces/default"
2: 11
3: 11
4: 1
5: "k8s\000\n\017\n\002v1\022\tNamespace\022c\nI\n\007default\022\000\032\000\"\000*$20b6cdfa-9929-11e7-8b62-005056b549b62\0008\000B\014\010\305\203\351\315\005\020\221\356\217\314\003z\000\022\014\n\nkubernetes\032\010\n\006Active\032\000\"\000"
}
4: 1
BTW,我没有在kubernetes源中找到相关的proto文件。