zoukankan      html  css  js  c++  java
  • 技术漫谈 | 远程访问和控制云端K8S服务器的方法

    对于部署在云端的K8S容器编排系统,可以先通过SSH远程登录到K8S所在主机,然后运行kubectl命令工具来控制K8S服务系统。然而,先SSH登录才能远程访问的二阶段方式,对于使用Linux桌面或者macOS桌面的同学来说,Kubectl运行环境脱离了本地桌面环境,感觉到使用不方便,心情不爽。

    下面介绍一种从本地桌面远程直接访问和控制云端K8S服务器的方法,有助于恢复愉快心情。该方法对于Windows桌面也适用,只不过本地文件路径不同,需要作适当修改。

    一、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

    二、 假设前提

    为了方便行文,不涉及到过多的细节,有如下假设前提:

    本地桌面已经安装了K8S客户端控制程序kubectl,并且与云端K8S系统版本兼容。

    本地已经安装SSH客户程序,后面会用到sftp命令下载证书配置文件。

    三、 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能正确识别。

      

    四、测试验证

    查看config配置文件:

    # more ~/.kube/config

     使用kubectl命令显示云端集群内的节点:

    # kubectl get node

     

    结果表明,从本地桌面能正确连接到云端K8S服务器。读者们可以使用kubectl命令工具的丰富子命令集管理和控制K8S服务器。

    因为kubectl命令运行在本地桌面,其输入、输出和子命令用到的yaml文件能与本地文件系统紧密集成,免除了在本地桌面与云服务器之间传输文件的烦恼,也便于打造个性化的个人工作环境。

    感谢各位小伙伴提出需求,激发灵感,或提供技术指导。

    在使用过程中,各位读者、用户和微友如有任何问题请随时与我联系。

    清如许 : solomonxu@163.com

    微信:solomonxu9999

    本文是作者原创作品,原文发表在公众号  技术漫谈 | 远程访问和控制云端K8S服务器的方法

  • 相关阅读:
    查看文件的首尾行
    快捷键
    lua中奇葩用法
    lua中特殊用法
    CVPR2015一些文章整理
    hdu5371 最长回文子串变形(Manacher算法)
    SVN合并(merge)的使用
    atitit. 集合groupby 的实现(2)---自己定义linq查询--java .net php
    王立平--SQLite,SQLiteOpenHelper的简单应用
    Vim 经常使用快捷键及键盘图
  • 原文地址:https://www.cnblogs.com/solomonxu/p/11484844.html
Copyright © 2011-2022 走看看