技术漫谈 | 远程访问和控制云端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-
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服务器的方法
技术漫谈 | 远程访问和控制云端K8S服务器的方法的更多相关文章
- SSH 远程访问及控制 ( 早上好,我是派大星,上帝派来爱你的那颗星)
远程访问及控制 1.SSH远程管理,TCP Wrappers访问控制 2.配置密钥对验证 1.SSH远程管理,TCP访问控制 SSH是一种安全通道协议,主要用来实现字符界面的远程登录.远程复制等功能: ...
- Linux远程访问及控制
Linux远程访问及控制 目录 Linux远程访问及控制 一.SSH远程管理 1. SSH远程管理概述 2. OpenSSH概述 3. 配置OpenSSH服务端 4. sshd服务的验证方式 5. 使 ...
- [转载] Google数据中心网络技术漫谈
原文: http://www.sdnlab.com/12700.html?from=timeline&isappinstalled=0#10006-weixin-1-52626-6b3bffd ...
- Linux网络服务10——远程访问及控制
Linux网络服务10--远程访问及控制 一.SSH概述 1.SSH简介 SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录.远程复制等功能.SSH协议对通信双方的数 ...
- 公钥-私钥 白名单-黑名单 Linux 远程访问及控制(SSH)
远程访问及控制一.SSH远程管理二.OpenSSH服务器① SSH (Secure Shell)协议② OpenSSH三.配置OpenSSH服务器举例四.sshd 服务支持两种验证方式五.使用SSH客 ...
- C#技术漫谈之垃圾回收机制(GC)
GC的前世与今生 虽然本文是以.NET作为目标来讲述GC,但是GC的概念并非才诞生不久.早在1958年,由鼎鼎大名的图林奖得主John McCarthy所实现的Lisp语言就已经提供了GC的功能,这是 ...
- C#技术漫谈之垃圾回收机制(GC)(转)
GC的前世与今生 虽然本文是以.NET作为目标来讲述GC,但是GC的概念并非才诞生不久.早在1958年,由鼎鼎大名的图林奖得主John McCarthy所实现的Lisp语言就已经提供了GC的功能,这是 ...
- 射频识别技术漫谈(10)——识别号的格式变化【worldsing笔记】
从事RDID行业的朋友经常会遇到这样的情况,同一张ID卡,在不同厂家生产的读卡器上读出的识别号完全不一样,有时甚至差之千里.ID卡的识别号一般是在出厂时被固化在卡片的ROM里,本身是不会改变的,问题出 ...
- 客户端软件GUI开发技术漫谈:原生与跨平台解决方案分析
原生开发应用开发 Microsoft阵营的 Winform WinForm是·Net开发平台中对Windows Form的一种称谓. 如果你想深入的美化UI,需要耗费很大的力气,对于目前主流的CSS样 ...
随机推荐
- 用 PYQT5 和 QT Dseingner 写的串口助手
最近公司做项目需要写串口助手,于是从网上找教程着手写了一下,基本的功能可以实现了,但是想要一个表盘的功能一直没有找到教程,有些遗憾.大神们会的话给指导指导 谢谢啦 ! 下边有源码的连接,欢迎大家下载 ...
- 爬虫获取搜狐汽车的配置信息 和swf动态图表的销量数据-------详细教学
前情提要:需要爬取搜狐汽车的所有配置信息,具体配置对应的参数. 以及在动态图表上的历史销量. 比如: 一汽奥迪旗下Q5L 的<40 TFSI 荣享进取型 国VI >的历史销量和该配置的参数 ...
- 【React踩坑记一】React项目中禁用浏览器双击选中文字的功能
常规项目,我们只需要给标签加一个onselectstart事件,return false就可以 例: <div onselectstart="return false;" & ...
- LR有的JMeter也有之二“检查点”
好吧!接着上一篇文章的内容和思路,继续前进. 检查点:简单的来理解一下,上一章讲到,我们对用户名和密码进行了参数化,那么怎样来判断jmeter有没有正确调用test.dat里面的文件呢.当然,我们可以 ...
- 【linux】【qt5界面】【系统托盘图标的实现】
前言: 博主最近在做一个聊天软件,虽然技术不咋滴,但遇到点干货肯定是要跟大家分享的啦.下面就给大家分享一个qt实现程序隐藏才系统托盘的技巧. 装备: 系统:linux, qt版本:5.9.2,GCC: ...
- 发布一个自己的jar包给全球人使用
目录 项目准备 sonatype 注册 申请sonatype工单 gpg配置 项目配置 依赖oss-parent 自定义配置 pom配置 全局settings配置 发布 验证 maven 项目对于我们 ...
- c#小灶——自动类型转换和强制类型转换
前面已经认识了不同的数据类型,你们有没有尝试过让不同的数据类型进行运算呢? ; double b = a; Console.WriteLine(b); 运行结果是:1 我们把一个整型的变量赋值给了一个 ...
- java之异常详解
一.什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错.在java中,阻止当前方法或作用域正常运行的情况,称之为异常. 二.异常体系 Java把异常当作对象来处理,并定义一个基类java. ...
- 最小环-Floyd
floyd求最小环 在Floyd的同时,顺便算出最小环. Floyd算法 :k<=n:k++) { :i<k:i++) :j<k:j++) if(d[i][j]+m[i][k]+m[ ...
- WebSocket和HTTP协议的区别
HTTP: 1,无状态协议. 2,短连接.(Ajax轮询方式或Long poll方式实现“持久连接”状态) 2,被动型. 客户端请求->服务器端响应.服务端不能主动联系客户端,只能有客户端发 ...