2017-10-26 2 views
0

, etcd v3의 정보 저장소, 나는 다음과 같은 정보를 얻기 위해 명령을 "얻을 etcdctl"사용 enter image description herekubernetes 1.6으로 etcd v3에서 protobuf 역 직렬화를 수행하는 방법은 무엇입니까? 는 Kubernetes 1.6에서

내 질문은 "protoc에 의한 정보를 역 직렬화하는 방법을 정보를 역 직렬화하는 방법은? 당신은 우리가 잡은 및 방지에 고정 (etcd2하지 저장 을 지원합니까 base64로 인코딩 된 protobuf입니다 etcd2와 저장, protobuf 특이한 데이터가 : --raw? "

명령 나는 웹 사이트에 글을 읽어" 바이너리 값) .1.6에서는 바이너리 값을 지원하는 의 etcd3 모드를 기본값으로 사용한다. runtime.Unknown 의 k8s\x00 protobuf 인코딩 (PKG/실행/types.go #이 - 값

4 바이트의 다음 형태는 "애플리케이션/vnd.kubernetes.protobuf"에 저장하는 ES 및 디폴트 알 수 없음) * "typeMeta"필드는 API에서 반환되는 kind 및 apiVersion 값과 동일하게 설정됩니다. * "원시"필드는 typeMeta에 의해 식별 된 golang 구조체의 protobuf 인코딩 된 바이트로 설정됩니다. - 마법 번호 없음

다음과 같이 디코딩 할 수 있습니다.

head-4 (str ip 매직 넘버) | 하나는 그것을 --raw 알고,

그런 다음

". 아로 protoc를 사용하여 원시 몸을 디코딩 할 수 있지만 그것을 수행하는 방법을 모른다 (프로토 디코드)가되어 protoc?

답변

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 소스에서 관련 proto 파일을 찾지 못했습니다.

관련 문제