文章目錄
- 1、Rancher UI 和執行 kubectl 命令之間的關系
- 1.1、Rancher 的架構和 kubectl
- 1.2、Rancher 內置 kubectl 的位置
- 1.3、執行權限和安全
- 2、Rancher UI 的使用操作
- 2.1、UI 界面內置的 Kubectl 命令工具
- 2.2、在服務節點執行 kubectl 命令的方法
- 2.3、創建一個集群上下文文件 config
- 2.4、安裝 kubectl 命令
- 3、總結
1、Rancher UI 和執行 kubectl 命令之間的關系
1.1、Rancher 的架構和 kubectl
Rancher 本身并不是 kubectl,而是一個 集群管理平臺。
當你在 Rancher 的 UI 界面(Cluster Explorer 或者 Cluster Manager)里點開 kubectl Shell 或者 Execute Shell 的時候,其實 Rancher 會通過 API 調用到它內部的 rancher-webhook / rancher-api-server,再轉發到對應的 Kubernetes API server。
換句話說:
UI 顯示出來的 kubectl 終端并不是真的直接在你本地執行,而是 Rancher 在服務節點(運行 Rancher Server 的容器)里內置了一個 kubectl 客戶端,通過 Rancher 的訪問權限去執行命令。
你看到的結果是 Rancher 把 kubectl 輸出通過 WebSocket 回傳到瀏覽器。
1.2、Rancher 內置 kubectl 的位置
Rancher Server 鏡像(如 rancher/rancher:v2.12.0)里內置了一個 kubectl 二進制文件。
當你進入 rancher 容器執行:
# 查看 Rancher 容器
docker ps | grep rancher# 進入容器
docker exec -it rancher-2-11-3 bashwhich kubectl
kubectl version --client
你能看到 Rancher 自帶的 kubectl。
UI 打開的 kubectl shell,就是調用了這個內置 kubectl,并且帶上了 Rancher 給的 kubeconfig。
1.3、執行權限和安全
Rancher 的 kubectl 命令使用的是當前登錄用戶在 Rancher 內的 RBAC 權限。
例如你是 cluster-admin,就能執行所有命令。
普通用戶則只能執行有限的 kubectl 操作。
這樣保證了 UI 和 CLI 行為一致,不會繞過 Rancher 的權限管理。
Rancher UI 里的 kubectl 并不是直接在 Kubernetes 節點上跑的命令,而是 在 Rancher 服務容器內置的 kubectl 客戶端執行,再通過 Rancher 的 API 轉發到集群。
- 方法1:宿主機直接執行
如果你在宿主機安裝了 kubectl:
export KUBECONFIG=/opt/rancher/kubeconfig.yaml
kubectl get nodes
- 方法2:Rancher 容器內執行
如果你在 Rancher 容器內執行:
# 上傳 kubeconfig 到容器
docker cp /opt/rancher/kubeconfig.yaml rancher-2-11-3:/root/kubeconfig.yaml# 進入容器
docker exec -it rancher-2-11-3 bash# 設置環境變量
export KUBECONFIG=/root/kubeconfig.yaml# 測試連接
kubectl get nodes
kubectl get pods -A
2、Rancher UI 的使用操作
2.1、UI 界面內置的 Kubectl 命令工具
選擇 K8S 集群 “cluster-dev” ,點擊右上角帶箭頭的圖標,在下面會彈出一個CLI的輸入框,稍等后連接成功后,就可以執行 kubectl 命令
2.2、在服務節點執行 kubectl 命令的方法
Rancher Server 容器內置了 kubectl
當你進入運行 Rancher 的容器時,就可以直接用它
獲取 kubeconfig 文件內容
如下圖標:左邊是直接下載 kubeconfig 文件,右邊是直接復制文件的內容 ,二選一即可
2.3、創建一個集群上下文文件 config
Rancher 運行時,會把各個集群的 kubeconfig 保存在 Rancher 的數據庫里,并通過 API 下發給 UI。
如果你要在服務節點(宿主機或者 Rancher 容器里)直接用 kubectl 管理某個集群,需要導出 kubeconfig:
在 Rancher UI 里 → 點擊集群 → Kubeconfig File → 下載。
把下載的文件保存為 ~/.kube/config,然后在 Rancher 容器或宿主機直接執行:
apiVersion: v1
kind: Config
clusters:
- name: "vm-k8s"cluster:server: "https://192.168.31.203/k8s/clusters/c-xb85q"certificate-authority-data: "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJ2VENDQ\VdPZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQkdNUnd3R2dZRFZRUUtFeE5rZVc1aGJXbGoKY\kdsemRHVnVaWEl0YjNKbk1TWXdKQVlEVlFRRERCMWtlVzVoYldsamJHbHpkR1Z1WlhJdFkyRkFNV\GMxTlRFMQpOVEl5T0RBZUZ3MHlOVEE0TVRRd056QTNNRGhhRncwek5UQTRNVEl3TnpBM01EaGFNR\Vl4SERBYUJnTlZCQW9UCkUyUjVibUZ0YVdOc2FYTjBaVzVsY2kxdmNtY3hKakFrQmdOVkJBTU1IV\1I1Ym1GdGFXTnNhWE4wWlc1bGNpMWoKWVVBeE56VTFNVFUxTWpJNE1Ga3dFd1lIS29aSXpqMENBU\VlJS29aSXpqMERBUWNEUWdBRVFXNmpxQmJlM09sRwp4aDlldHJ6d1BubVlWc3hCQ3RHZ2RFNHBzZ\HZsbHBYOFJyOGRWekdRM2hsV2JmNW5LZ1ovQ1Y5ZDh5ak9kTTR1CkdNUjMySjlNQjZOQ01FQXdEZ\1lEVlIwUEFRSC9CQVFEQWdLa01BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0hRWUQKVlIwT0JCWUVGR\09seGVRbDYwVGNnSy9RS1I4YWRtdU1mWDdhTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdwpOb\ERnRFI1TTdoYitFbTY3cTJ0R084cEpicVlyN2tYV05QZzEvNUoyekFJZ09WVE9sNmw4OXFwOXR0S\lZpT0o5ClJBNTI0Sy8xQ2VMZUlrZUMzWVFQSmpFPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t"users:
- name: "vm-k8s"user:token: "kubeconfig-user-66m4vfkwh9:4dmw9pdl6lp7dtqkkgj7xp6vddvrzl5d9fjgp2bs4ks8lwpbwrcgb7"contexts:
- name: "vm-k8s"context:user: "vm-k8s"cluster: "vm-k8s"current-context: "vm-k8s"
2.4、安裝 kubectl 命令
首先查看kubernetes倉庫的yum/源地址
cat /etc/yum.repos.d/kubernetes.repo
然后運行安裝命令
yum install kubectl-1.33.3 -y ### 注意版本要相同
3、總結
-
Rancher UI 的 kubectl → 調用的是 Rancher 容器里自帶的 kubectl,通過 WebSocket 回傳到 UI。
-
Rancher 服務節點 → 可以直接進入 Rancher 容器執行 kubectl,但必須指定 kubeconfig。
-
宿主機 → 安裝 kubectl 后,也可以用 Rancher 下發的 kubeconfig 文件操作集群。
這樣,你就能在 Rancher 的服務節點(容器內或宿主機)直接執行 kubectl,和 Rancher UI 里看到的結果完全一致。
“人的一生會經歷很多痛苦,但回頭想想,都是傳奇”。