如何使用kubernetes 1.6在etcd v3中执行protobuf反序列化?

时间:2017-10-26 12:40:16

标签: kubernetes protocol-buffers etcd3

在kubernetes 1.6中,信息存储在etcd v3中,我使用" etcdctl获取"命令获取如下信息: enter image description here

我的问题是如何反序列化信息?如何通过" 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解码原始身体。"

但我不知道如何表演,有人知道吗?

1 个答案:

答案 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文件。