對於部署在雲端的K8S容器編排系統,能夠先經過SSH遠程登陸到K8S所在主機,而後運行kubectl命令工具來控制K8S服務系統。然而,先SSH登陸才能遠程訪問的二階段方式,對於使用Linux桌面或者macOS桌面的同窗來講,Kubectl運行環境脫離了本地桌面環境,感受到使用不方便,心情不爽。node
下面介紹一種從本地桌面遠程直接訪問和控制雲端K8S服務器的方法,有助於恢復愉快心情。該方法對於Windows桌面也適用,只不過本地文件路徑不一樣,須要做適當修改。apache
1、kubectl遠程訪問控制原理 安全
K8S是很是注重安全性的雲計算基礎平臺,各個節點或者組件之間的通訊都通過加密傳輸,發送方先加密通訊報文,接收方解密後還原成明文。節點間通訊經過公鑰、私鑰和數字證書等安全機制進行,能識別節點或用戶身份,並保證通訊和訪問安全。服務器
圖 kubectl遠程訪問和控制K8S工做原理微信
K8S初始化時,kubeadm命令自動建立了管理員用戶kubernetes-admin,並生成用戶公鑰、私鑰和數字證書,證書信息保存在master節點的配置文件/etc/kubernetes/admin.conf中。網絡
持有該證書文件的用戶,不論身在何處,只要網絡互聯互通,就能遠程訪問K8S服務器。由於K8S服務器經過客戶端發送的數字證書等識別遠程用戶的身份,認證經過的遠程訪問視同服務器本地用戶訪問。工具
命令kubectl默認從本機所在$HOME/.kube/config文件讀取配置文件,也支持環境變量$KUBECONFIG指定其餘配置文件。測試
配置文件admin.conf配置文件的server屬性指定遠程服務器的協議、地址和端口。雲端服務器通常擁有內網IP和公網IP兩套地址系統:在雲端內部,雲服務器之間經過內網IP地址相互訪問;而在雲平臺外部,從公網訪問雲服務器,必須使用雲服務器的公網IP地址。阿里雲
配置文件admin.conf複製到本地文件系統後,須要先修改server屬性,替換爲公網地址,才能正確鏈接到雲服務器。雲計算
舉例以下:
將原配置文件config的server屬性:
server: https://192.168.1.191:6443
替換爲公網地址:
server: https://118.31.xo.xo:6443
屬性server也能夠使用域名或者主機名代替IP地址,前提是域名或者主機名已經用配置文件內的數字證書做了數字簽名。不然,kubectl命令運行時會報告數字簽名驗證錯誤。
例如,主機名訪問配置以下:
server: https://myserver:6443
2、 假設前提
爲了方便行文,不涉及到過多的細節,有以下假設前提:
本地桌面已經安裝了K8S客戶端控制程序kubectl,而且與雲端K8S系統版本兼容。
本地已經安裝SSH客戶程序,後面會用到sftp命令下載證書配置文件。
3、 kubectl遠程訪問控制原理
以部署在阿里雲上的K8S dev環境爲例,說明配置過程。已知雲服務器dev-7是K8S的master節點。
先登陸到本地桌面,打開Terminal終端。
修改本地/etc/hosts文件,在最後添加一行:
# vi /etc/hosts...118.31.xo.xo myserver
建立本地目錄:
# mkdir -p ~/.kube
符號~與環境變量$HOME同義。
改變當前工做目錄:
# cd ~/.kube
使用sftp下載雲服務器上的配置文件,按提示輸入root密碼:
# sftp root@dev-7 Sftp> get /etc/kubernetes/admin.conf config Sftp> bye
修改配置文件的server屬性:
# vi config
...
server: https://myserver:6443
...
配置過程就完成了。
主機名myserver已通過數字證書籤名,因此命令kubectl能正確識別。
4、測試驗證
查看config配置文件:
# more ~/.kube/config

使用kubectl命令顯示雲端集羣內的節點:
# kubectl get node
結果代表,從本地桌面能正確鏈接到雲端K8S服務器。讀者們能夠使用kubectl命令工具的豐富子命令集管理和控制K8S服務器。
由於kubectl命令運行在本地桌面,其輸入、輸出和子命令用到的yaml文件能與本地文件系統緊密集成,免除了在本地桌面與雲服務器之間傳輸文件的煩惱,也便於打造個性化的我的工做環境。
感謝各位小夥伴提出需求,激發靈感,或提供技術指導。
在使用過程當中,各位讀者、用戶和微友若有任何問題請隨時與我聯繫。
清如許 : solomonxu@163.com
微信:solomonxu9999
本文是做者原創做品,原文發表在公衆號 技術漫談 | 遠程訪問和控制雲端K8S服務器的方法