如何访问etcd中的kubernetes密钥

时间:2017-12-14 07:20:37

标签: kubernetes etcd

问题

如何从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看起来是终点。

4 个答案:

答案 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)

对于 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

答案 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:权限被拒绝”的快速解决方案。