ETCD 使用

訪問ETCD要使用證書

k8s現在使用的是etcd v3,必須提供ca、key、cert,否則會出現Error: context deadline exceeded

不加--endpoint參數時,默認訪問的127.0.0.1:2379,而使用--endpoint參數時,必須提供ca,key,cert。

[root@k8s-test2 ~]# etcdctl endpoint health 
127.0.0.1:2379 is healthy: successfully committed proposal: took = 939.097µs

[root@k8s-test2 ~]# etcdctl --endpoints=https://10.0.26.152:2379 endpoint health 
https://10.0.26.152:2379 is unhealthy: failed to connect: context deadline exceeded

[root@k8s-test2 ~]# etcdctl --endpoints=https://10.0.26.152:2379 --cacert=/etc/k8s/ssl/etcd-root-ca.pem --key=/etc/k8s/ssl/etcd-key.pem  --cert=/etc/k8s/ssl/etcd.pem  endpoint health 
https://10.0.26.152:2379 is healthy: successfully committed proposal: took = 1.001505ms

注意:使用etcd v3的版本時,需要設置環境變量ETCDCTL_API=3(寫入/etc/profile或者.bash_profile文件中)

否則,默認使用的是ETCDCTL_API=3。或者,使用命令式顯示聲明ETCDCTL_API=3。

Ex:

ETCDCTL_API=3 etcdctl get /registry/namespaces --prefix -w=json|python -m json.tool

目前發現,獲取etcd中flannel的配置,只能使用ETCDCTL_API=2,而獲取etcd中kubernetes的元數據,只能使用ETCDCTL_API=3

獲取etcd中flannel的配置

[root@k8s-test2 ~]# ETCDCTL_API=2 etcdctl --endpoints=https://10.0.26.152:2379 --cert-file=/etc/k8s/ssl/etcd.pem --key-file=/etc/k8s/ssl/etcd-key.pem --ca-file=/etc/k8s/ssl/etcd-root-ca.pem ls /kube-centos/network/subnets
/kube-centos/network/subnets/172.18.78.0-24
/kube-centos/network/subnets/172.18.18.0-24

獲取etcd中kubernetes的元數據

使用腳本


#!/bin/bash
# Get kubernetes keys from etcd
export ETCDCTL_API=3
keys=`etcdctl get /registry --prefix -w json|python -m json.tool|grep key|cut -d ":" -f2|tr -d '"'|tr -d ","`
for x in $keys;do
  echo $x|base64 -d|sort
done

注: key的值是經過base64編碼,需要解碼後才能看到實際值

注: 使用--prefix可以看到所有的子目錄

注: ETCDCTL_API=2和ETCDCTL_API=3兩個API版本中證書的參數不一樣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章