如何在etcd中访问kubernetes密钥

19

问题

如何从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上 使用kubeadm创建集群 的步骤安装了Kubernetes 1.8.5。当我查看Getting started with etcd时,发现v2/keys看起来是终点。

5个回答

28

通常你需要自己获取etcdctl。只需从etcd版本发布页面下载最新的etcdctl压缩包。

另外,从Kubernetes版本1.6开始,它使用etcd version 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

5
如果涉及证书,这里有一个示例命令:ETCDCTL_API=3 etcdctl --endpoints <etd_ip>:2379 --cacert /etc/kubernetes/ssl/kube-ca.pem --cert /etc/kubernetes/ssl/kube-node.pem --key /etc/kubernetes/ssl/kube-node-key.pem get / --prefix --keys-only。如果以此方式部署,则可以从etcd容器内运行此命令。 - leodotcloud
请查看以下内容,而不是使用Minikube。https://dev59.com/LVYN5IYBdhLWcg3wNVwW#65958307 - tuxErrante

22

访问 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


3

对于Minikube

(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


请返回已翻译的文本内容:或者点击这里 - Eugene

1

我需要在CoreOS(Container Linux)上安装etcdctl并使用它。在我的情况下,以下命令可以正常工作(从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作为权限问题“Error: open /etc/ssl/etcd/etcd/peer.crt: permission denied”的快速解决方案。


0
您也可以尝试以下操作(假设 etcd pod 名称为 etcd-minikube)。 上面已经解释了如何使用 etcdctl 访问 Minikube。
$kubectl -it exec etcd-minikube -n kube-system -- etcdctl --cacert='/var/lib/minikube/certs/etcd/ca.crt' --cert='/var/lib/minikube/certs/etcd/peer.crt' --key='/var/lib/minikube/certs/etcd/peer.key' put foo bar

好的

$kubectl -it exec etcd-minikube -n kube-system -- etcdctl --cacert='/var/lib/minikube/certs/etcd/ca.crt' --cert='/var/lib/minikube/certs/etcd/peer.crt' --key='/var/lib/minikube/certs/etcd/peer.key' get foo

foo
bar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接