15 - 恢复kubectl配置文件


分析Rancher UI生成的kubecfg文件可以发现,第一个server与Rancher server的url 域名或者IP相同。当kubectl访问API SERVER的时候,请求是先发送到rancher,然后再通过cluster agent转发给API SERVER

image-20190514185322798

在v2.2.2版本以前,Rancher UI生成的kubecfg文件中只设置了一个server

从v2.2.2开始,在创建集群时开启授权集群访问地址,创建好集群后,Rancher UI生成的kubecfg文件中将显示多个master 节点IP的server

image-20190514185026706

image-20190514184126478

恢复kubecfg文件

当rancher agent与rancher server端口连接,rancher ui将无法查看kubecfg。如果需要对K8S集群做操作,将需要使用kubectl去操作集群。如果是v2.2.2之前的版本或者v2.2.2没有开启授权集群访问地址功能,那么需要恢复内置kubecfg配置文件。

操作方法

因工具兼容性问题,以下命令仅支持linux下执行

  • docker run安装的单容器Rancher Server
  1. # 进入容器
  2. docker exec -ti <容器ID> bash
  3. # 集群ID,可通过浏览器地址栏查询
  4. cluster_id=c-xxx
  5. kubectl get secret c-${cluster_id} -n cattle-system -o=jsonpath='{.data.cluster}' \
  6. | base64 --decode | jq .metadata.state | awk '{print substr($0,2,length($0)-2)}' \
  7. > ${cluster_id}-kube-config.yml
  8. sed -i 's/\\n/\n/g' ${cluster_id}-kube-config.yml && \
  9. sed -i 's/\\"/"/g' ${cluster_id}-kube-config.yml
  • Rancher HA
  1. # 依赖工具: jq、awk
  2. # local集群的kube配置文件
  3. local_kube_config=xxx
  4. # 集群ID,可通过浏览器地址栏查询
  5. cluster_id=c-xxx
  6. kubectl --kubeconfig=$local_kube_config get secret c-${cluster_id} \
  7. -n cattle-system \
  8. -o=jsonpath='{.data.cluster}' | base64 --decode | \
  9. jq .metadata.state | awk '{print substr($0,2,length($0)-2)}' \
  10. > ${cluster_id}-kube-config.yml
  11. sed -i 's/\\n/\n/g' ${cluster_id}-kube-config.yml && \
  12. sed -i 's/\\"/"/g' ${cluster_id}-kube-config.yml