• 阿里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?#

  • 相关阅读:
    grep: Linux基础命令及用法 -- grep
    [功能集锦] 003
    [功能集锦] 002
    [mysql相关集锦] 001
    [eclipse中使用Git插件] 008
    [eclipse相关] 001
    [代码优化集锦]
    [功能集锦] 001
    [java基础] 002
    [java基础] 001
  • 原文地址:https://www.cnblogs.com/oceanwang/p/13724021.html
Copyright © 2020-2023  润新知