簡體   English   中英

為什么我可以解碼 protobuf 命名空間但不能解碼 configmap?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM