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服务器的方法

  • 相关阅读:
    实用机器学习 跟李沐学AI
    Explicitly drop temp table or let SQL Server handle it
    dotnettransformxdt and FatAntelope
    QQ拼音输入法 禁用模糊音
    (技术八卦)Java VS RoR
    Ruby on rails开发从头来(windows)(七)创建在线购物页面
    Ruby on rails开发从头来(windows)(十三)订单(Order)
    Ruby on rails开发从头来(windows)(十一)订单(Order)
    新员工自缢身亡,华为又站到了风口浪尖
    死亡汽油弹(Napalm Death)乐队的视频和来中国演出的消息
  • 原文地址:https://www.cnblogs.com/solomonxu/p/11484844.html
Copyright © 2011-2022 走看看