Как выполнить десериализацию protobuf в etcd v3 с kubernetes 1.6?
В kubernetes 1.6, хранилище информации в etcd v3, я использую команду "etcdctl get", чтобы получить информацию следующим образом:
Мой вопрос: как десериализовать информацию? Как десериализовать информацию командой "protoc --raw"? Я прочитал статью на веб-сайте:
"У вас есть необычные данные, которые мы перехватили и исправили в хранилище Prevent protobuf с помощью etcd2, который является затуфом в кодировке base64 (etcd2 не поддерживает хранение двоичных значений). В 1.6 мы по умолчанию используем режим etcd3, который поддерживает двоичные значения, и по умолчанию сохраняем в "application/vnd.kubernetes.protobuf", которая является следующей формой для значений
4 байта -
k8s\x00
кодировка protobuf для runtime.Unknown (pkg/runtime/types.go#Unknown) * в поле "typeMeta" установлены те же значения типа и apiVersion, которые будут возвращены из API * в поле "raw", установленное для закодированного protobuf байты для структуры golang, идентифицированной typeMeta - без магического числаВы можете расшифровать это с помощью:
голова -4 (лишить магического числа) | protoc --raw (декодирует прото)
Затем вы можете декодировать необработанное тело, используя также протокол. "
но я не знаю, как это сделать, кто-нибудь знает это?
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
Кстати, я не нашел соответствующего файла прото в источнике kubernetes.