阿里devops实验课2-继续改进微服务及本地环境使用Kt-connect进行服务暴露
接下来第2课的大概任务是:
1、将项目中 alpd-bot-ssh 服务的json配置文件改为ConfigMap的形式
2、将三个服务部署到一个pod中
3、使用Kt-connect本地连接K8s集群内网
第一步:我们将本地json配置写到ConfigMap里面,并更改deployment-local.yaml文件
ConfigMap的介绍(抄了一段):
在生产环境中经常会遇到需要修改配置文件的情况,传统的修改方式不仅会影响到服务的正常运行,而且操作步骤也很繁琐。 为了解决这个问题,kubernetes项目从1.2版本引入了ConfigMap功能,用于将应用的配置信息与程序的分离。这种方式不仅可以实现应用程序被的复用,而且还可以通过不同的配置实现更灵活的功能。 在创建容器时,用户可以将应用程序打包为容器镜像后,通过环境变量或者外接挂载文件的方式进行配置注入。 ConfigMap是以key:value的形式保存配置项,既可以用于表示一个变量的值(例如config=info),也可以用于表示一个完整配置文件的内容(例如server.xml=<?xml…>…)。ConfigMap在容器使用的典型用法如下。
ConfigMap使用场景:
将配置项设置为容器内的环境变量。
将启动参数设置为环境变量。
以Volume的形式挂载到容器内部的文件或目录。
我使用的是第3种,使用Volume的挂载方式,操作如下:
1、创建configmap-local.yaml文件,编辑文件准备创建ConfigMap,主要将 ALPD-BOT-SSH 项目conf文件夹中的local-k8s.json 中的配置信息全部放到Configmap-local.yaml中
local-k8s.json 配置文件内容:
{ "port": "2222", "authAddr": "alpd-bot-auth-svc:9001", "authTimeout": 2000, "execAddr": "alpd-bot-query-svc:9099", "execTimeout": 5000, "hostKeyFile": "/id_rsa" }
创建configmap-local.yaml 这里需要注意Json文本的格式(采坑:json文本多了一个逗号,虽然configmap可以创建出来,但是项目引用读取的时候一直报错,最后就是因为json文本多了一个逗号)iVersion: v1
kind: ConfigMap metadata: name: albotssh-local-k8s namespace: default data: local-k8s: | { "port": "2222", "authAddr": "alpd-bot-auth-svc:9001", "authTimeout": 2000, "execAddr": "alpd-bot-query-svc:9099", "execTimeout": 5000, "hostKeyFile": "/id_rsa" }
编辑好 configmap-local.yaml文件后,执行命令创建configmap
kubectl apply-f configmap-local.yaml
通过命令也可以查看整个json配置信息均放在configmap中
2、配置deployment-local.yaml 将配置文件改为configmap的形式读取,这里采用volumes挂载方式进行配置:
更改完成后,即可直接部署,部署完成后可以查看相关pod及进行相关测试,这里就不在截图。
第二步:是将三个服务放到一个pod中,主要就是讲三个服务的 deployment-local.yaml 文件的container 放到一起,这个没有什么难度直接贴结果了:
配置完成后,直接部署。
第三步:使用kt-connect 将服务暴露在本地直接访问。介绍:
简介: 研发侧利器,云原生 VPN:Kt Connect,可在本地调用 Kubernetes 集群服务,或将 Kubernetes 集群流量转发到本地。
https://developer.aliyun.com/article/751321?scm=20140722.184.2.173
https://alibaba.github.io/kt-connect/?spm=a2c6h.12873639.0.0.50ea29e9Ur2QAa#/zh-cn/
1、我用的是windows环境,下载kt x64zip包,解压到本地,并按照文档配置环境变量
2、下载kubectl zip包,并配置环境变量,并从Master节点中将k8s的config文件下载到本地目录
a:Master节点进入目录 : cd ~/.kube/ 将config文件复制到本地电脑 C:\Users\whx\.kube ,两个目录:
Master节点config所在目录: ~/.kube/
本地电脑的config存放目录:C:\Users\whx\.kube
配置完成后可以在本地直接使用kubectl访问集群pod等服务
3、根据“快速开始”,在k8s环境中部署指定应用,查看pod运行状态,确保正常运行
3、本地运行ktctl 命令打开服务,我使用的是Socks5代理模式
.\ktctl.exe -d connect --method socks5
以上代表Socks5已启动,可以通过本地2223端口进行访问,每次运行启动命令在k8s集群中都会创建一个pod进行代理,命令结束后会自动Terminating掉
服务启动后,在本地直接使用ssh访问k8s中的微服务还是不通。。。
在钉钉群里面各位大虾的尝试解答下发现,有两种方式可以解决:
1、ssh协议,直接用kubectl的port-forward
通过端口转发映射本地端口到指定的应用端口
使用方式:
把本地的port 映射到pod的port kubectl port-forward redis-master-765d459796-258hz 6379:6379 或者 kubectl port-forward pods/redis-master-765d459796-258hz 6379:6379 或者 kubectl port-forward deployment/redis-master 6379:6379 或者 kubectl port-forward rs/redis-master 6379:6379 或者 kubectl port-forward svc/redis-master 6379:6379
这里要启用两个命令窗口
2、使用MobaXtermch 工具使用代理Socket5 进行访问
第三节课打开任务,已经有人记录了,直接贴地址了
https://www.yuque.com/docs/share/332ba56b-c73a-45b6-adcc-27a72b19d7ab?#