首页 > 解决方案 > etcd v3 API 不可用

问题描述

我正在尝试以 etcd 作为后端部署 CoreDNS。我已经完成了 etcd 和 CoreDNS 的大部分配置,但我正在尝试为开发人员记录如何将记录推送到 CoreDNS 的 etcd 中。

阅读所有 etcd v3 文档,从 etcd v2 中的 v2 API 到 etcd v3 中的 v3 API 发生了变化。有多个页面引用了使用 URL 进行的 API 调用,例如:

curl -L http://localhost:2379/v3beta/kv/put \
  -X POST -d '{"key": "Zm9v", "value": "YmFy"}'

我尝试了多种http://IP:2379/[v3alpha | v3beta | v3]/kv/put 我总是得到一个 not found 或 404 not found 。

这工作正常:

curl http://IPADDRESS:2379/v2/keys/test/local/test -XPUT -d '{"host":"IPADDRESS","ttl":60}'

但这不会:

curl http://IPADDRESS:2379/[v3alpha | v3beta | v3]/keys/test/local/test -XPUT -d '{"host":"IPADDRESS","ttl":60}'

我在文档中遗漏了什么吗?

我正在运行 etcd v 3.3.12。

标签: kubernetesetcdcoredns

解决方案


查了etcd源码,终于找到了这个issue的RC。在 etcd 3.3.0 中,如果 etcd 从 yaml 配置文件加载配置,则配置标志“enable-grpc-gateway”的默认值为 false,但如果 etcd 从命令行加载配置标志,则默认值为 true。所以在你的 etcd 配置文件中添加下面的行可以解决这个问题。

enable-grpc-gateway: true

我尝试了 etcd 3.3.13,它已在此版本中修复。


推荐阅读