楼主 Go 和 Etcd 都不是很熟,用程序可以读 etcd 的配置,但是 etcdctl 就有问题。
详情如下:
一个 Go/GPRC 服务注册到 etcd 里面 如果用 Go/JAVA 去读,类似下面,是没问题的
cli, err := clientv3.New(clientv3.Config{
Endpoints: endpoints,
DialTimeout: 5 * time.Second,
})
if err != nil {
// handle error!
}
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
//resp, err := cli.Put(ctx, "sample_key", "sample_value")
resp, err := cli.Get(ctx, "/api/v1.0/", clientv3.WithPrefix())
但是如果用 etcdctl 就读不出
etcdctl --version
etcdctl version: 3.3.13
API version: 2
因为之前配置了 SSL ,所以要加上相关的证书之类
ETCDCTL_API=3
etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints=XXXXX ls /api/v1.0/
直接报错:
Error: 100: Key not found (/api) [293]
直接 etcdctl ls:
/discovery
/jwnicrsevxblovcfybibmzlmqsgyxgeh
/terrmiilhczjihcdhbvsvusssss
是我的理解有问题吗?
1
inza9hi OP 知道怎么回事了。
export ETCDCTL_API=3 这样才能生效。 然后就可以了,原来 V2 和 V3 的数据差这么大 |