[英]Why can I decode a protobuf namespace but not a configmap?
我想看看我可以通過解碼 Kubernetes 存儲在 etcd 中的 protobuf 能走多遠。 我遇到了一個奇怪的問題,我可以解碼大部分 protobuf,除了 configmaps:
這給了我有效的 output:
etcdctl get /registry/namespaces/default -w protobuf | protoc --decode_raw
但這給了我一個錯誤:
etcdctl get /registry/configmaps/kube-system/coredns -w protobuf | protoc --decode_raw
Failed to parse input.
如果我不通過protoc pipe output,它看起來像protobuf(許多可讀的字符串,中間有控制字符)。 我究竟做錯了什么? 與其他資源相比,ConfigMap 有什么不同? 有沒有辦法讓它工作?
首先,你應該知道:
Protobufs 是原始二進制數據,它們可以包含
NULL bytes
。
正如你提到的,你有控制字符:
如果我不通過protoc pipe output,它看起來像protobuf(許多可讀的字符串,中間有控制字符)。
我猜不出是什么標志。 但是, NULL byte
可能已在某處結束。 在這種情況下,您將收到錯誤Failed to parse input.
如果您只有控制字符,請嘗試從etcdctl get /registry/configmaps/kube-system/coredns -w protobuf
存儲 output 變量並使用printf
命令,如下所示:
result=`etcdctl get /registry/configmaps/kube-system/coredns -w protobuf`
printf $result | protoc --decode_raw
如果您只有控制字符,這可能會起作用。 但是,如果原型中間有一個 NULL 字節,該原型仍然可能無法使用 --decode_raw 解析。
另外coderanger很好地提到了
順便說一句,這只是為了好玩,對吧? 就像您知道您永遠不應該在真正的集群中執行此操作一樣? :D
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.