从主机系统恢复 kubeconfig

restore kubeconfig from host system

我设置了一个 k8s 集群并成功地杀死了我的 kubeconfig 显然不可恢复:( 我确实可以访问节点,并且可以分别访问 controlplance 和 etcd 上的容器 运行。有什么办法可以从集群中检索工作的 kubeconfig?

我使用 运行cher 来设置这个集群,不幸的是 运行cher 坏得很厉害,当主机系统的 ip 改变并且 letsencrypt 证书 运行 出局时。

所有部署实际上 运行 非常好,我只是无法再访问集群 :(

这是我的 kube 配置:

apiVersion: v1
clusters:
- cluster:
    server: https://[broken-rancher-server]/k8s/clusters/c-7l92q
  name: my-cluster
- cluster:
    certificate-authority-data: UlZMG1VR3VLYUVMT...
    server: https://1.1.1.1:6443
  name: my-cluster-prod-cp-etcd-1
- cluster:
    certificate-authority-data: UlZMG1VR3VLYUVMT...
    server: https://1.1.1.2:6443
  name: my-cluster-prod-cp-etcd-2
contexts:
- context:
    cluster: my-cluster-prod-cp-etcd-1
    user: u-jv5hx
  name: my-cluster-prod-cp-etcd-1
- context:
    cluster: my-cluster-prod-cp-etcd-2
    user: u-jv5hx
  name: my-cluster-prod-cp-etcd-2
current-context: my-cluster
kind: Config
preferences: {}
users:
- name: u-jv5hx
  user:
    token: kubeconfig-u-jv5hx.c-7l92q:z2jjt5wx7xxxxxxxxxxxxxxxxxx7nxhxn6n4q

如果我再次访问该集群,我可以简单地设置一个新的 运行cher 实例并导入该集群,但为此我需要先访问它。

非常感谢任何提示,因为我现在运行几乎没有想法。

RKE v0.1.x 或 Rancher v2.0.x/v2.1.x 自定义集群控制平面节点

Oneliner(RKE 和 Rancher 自定义集群)

如果你知道自己在做什么(需要节点上的 kubectl 和 jq)。

kubectl --kubeconfig $(docker inspect kubelet --format '{{ range .Mounts }}{{ if eq .Destination "/etc/kubernetes" }}{{ .Source }}{{ end }}{{ end }}')/ssl/kubecfg-kube-node.yaml get secret -n kube-system kube-admin -o jsonpath={.data.Config} | base64 -d | sed -e "/^[[:space:]]*server:/ s_:.*_: \"https://127.0.0.1:6443\"_" > kubeconfig_admin.yaml
kubectl --kubeconfig kubeconfig_admin.yaml get nodes

Docker 运行 命令(Rancher 自定义集群)

要在具有控制平面角色的节点上执行,这会使用 rancher/rancher-agent 映像来检索 kubeconfig。

1.Get kubeconfig

docker run --rm --net=host -v $(docker inspect kubelet --format '{{ range .Mounts }}{{ if eq .Destination "/etc/kubernetes" }}{{ .Source }}{{ end }}{{ end }}')/ssl:/etc/kubernetes/ssl:ro --entrypoint bash $(docker inspect $(docker images -q --filter=label=io.cattle.agent=true) --format='{{index .RepoTags 0}}' | tail -1) -c 'kubectl --kubeconfig /etc/kubernetes/ssl/kubecfg-kube-node.yaml get secret -n kube-system kube-admin -o jsonpath={.data.Config} | base64 -d | sed -e "/^[[:space:]]*server:/ s_:.*_: \"https://127.0.0.1:6443\"_"' > kubeconfig_admin.yaml

2.Run kubectl 获取节点

docker run --rm --net=host -v $PWD/kubeconfig_admin.yaml:/root/.kube/config --entrypoint bash $(docker inspect $(docker images -q --filter=label=io.cattle.agent=true) --format='{{index .RepoTags 0}}' | tail -1) -c 'kubectl get nodes'

其他版本的 rancher 和脚本的更多详细信息here