---
# System prepended metadata

title: GCP指令
tags: [GCP]

---

# 重建K8s憑證後, 出現權限異常狀況
###### tags: `GCP`

 

## 更新憑證後的失敗情境
背景：Kubernetes憑證過期，重新頒發憑證後，使用kubeadm alpha certs check-expiration命令檢視憑證有效時間，相關憑證都已重新核發。

但在Kubernetes叢集master節點上執行kubectl指令報如下錯誤：

```bash= 
error: You must be logged in to the server (Unauthorized)
```
---
原因：這是權限問題，設定認證的檔案為/etc/kubernetes/admin.conf，颁发证书时/etc/kubernetes/admin.conf文件重新生成，但是$HOME/.kube/config並沒有被替換。


解決方案：

```bash=
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
```
---
解釋：當我們使用kubeadm成功引導啟動(init)一個Kubernetes叢集的控制平面後，kubeadm會在init的輸出結果中給予我們下面這樣的「指示」：
```bash=
`... ...
Your Kubernetes master has initialized successfully!
 
To start using your cluster, you need to run the following as a regular user:
 
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
  ... ...

```

kubeadm init在結尾處輸出的這些資訊是在告知我們如何設定kubeconfig檔。
依照上述指令配置後，master節點上的kubectl就可以直接使用$HOME/.kube/config的資訊存取k8s cluster了。
並且，透過這種設定方式，kubectl也擁有了整個叢集的管理員(root)權限。

## 其他狀況
> 非必要

如果上述都更新完畢+未更新ssh憑證的情況,登入後還出現以下訊息
```bash=
Permission denied (publickey,password).
```

可能也需要作重置.ssh憑證目錄權限更新

```bash=
--可查看ssh log
cat /var/log/auth.log
cat /var/log/secure

--更新目錄權限
chmod 600 /home/{用戶}/.ssh/authorized_keys
chmod 700 /home/{用戶}/.ssh
```


 ---
 參考:
 https://blog.csdn.net/luanpeng825485697/article/details/83955721