阿里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:Userswhx.kube ,两个目录:

  Master节点config所在目录: ~/.kube/

  本地电脑的config存放目录:C:Userswhx.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?#

原文地址:https://www.cnblogs.com/oceanwang/p/13724021.html