如何从etcd获取Kubernetes相关密钥?试图列出etcd中的键,但无法看到相关的键。还在哪里安装了etcdctl?
$ etcdctl
bash: etcdctl: command not found..
$ sudo netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:2379 0.0.0.0:* LISTEN 386/etcd
tcp 0 0 127.0.0.1:2380 0.0.0.0:* LISTEN 386/etcd
$ curl -s http://localhost:2379/v2/keys | python -m json.tool
{
"action": "get",
"node": {
"dir": true
}
}
在CentOS 7上按照Using kubeadm to Create a Cluster安装Kubernetes 1.8.5。当我查看Getting started with etcd时,v2 / keys看起来是终点。
答案 0 :(得分:14)
通常你需要自己获得etcdctl
。只需从etcd releases page下载最新的etcdctl
存档。
此外,从Kubernetes 1.6版本开始,它使用etcd版本3,因此获取所有密钥的列表是:
ETCDCTL_API=3 etcdctl --endpoints=<etcd_ip>:2379 get / --prefix --keys-only
您可以使用以下命令查找所有etcdctl v3
个操作:
ETCDCTL_API=3 etcdctl --endpoints=<etcd_ip>:2379 --help
编辑(感谢@leodotcloud):
如果ETCD配置了TLS证书支持:
ETCDCTL_API=3 etcdctl --endpoints <etcd_ip>:2379 --cacert <ca_cert_path> --cert <cert_path> --key <cert_key_path> get / --prefix --keys-only
答案 1 :(得分:5)
访问docker容器,并运行以下命令:
ETCDCTL_API=3 etcdctl --endpoints 127.0.0.1:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key get / --prefix --keys-only
答案 2 :(得分:1)
(v1.17.0)
您可以看到探索 pod 的参数:kubectl describe pod -n kube-system etcd-PODNAME |less
您可以在此处查看证书路径等。
要快速查询您的 etcd 字典,您可以使用此别名:
alias etcdctl_mini="MY_IP=$(hostname -I |awk '{print $1}'|tr -d ' '); \
ETCDCTL_API=3; \
sudo -E etcdctl --endpoints ${MY_IP}:2379 \
--cacert='/var/lib/minikube/certs/etcd/ca.crt' \
--cert='/var/lib/minikube/certs/etcd/peer.crt' \
--key='/var/lib/minikube/certs/etcd/peer.key'"
$ etcdctl_mini put foo bar
答案 3 :(得分:0)
我需要在CoreOS(容器Linux)上将etcdctl与etcd一起使用。 就我而言,以下工作有效(从CoreOS Shell提示符执行):
$ sudo ETCDCTL_API=3 etcdctl --cacert /etc/ssl/etcd/etcd/peer-ca.crt --cert /etc/ssl/etcd/etcd/peer.crt --key /etc/ssl/etcd/etcd/peer.key get --prefix / --keys-only
我使用sudo
作为权限问题“错误:打开/etc/ssl/etcd/etcd/peer.crt:权限被拒绝”的快速解决方案。