乐趣区

关于devops:springcloud本地开发的微服务如何调用远程k8s的微服务

前言

一般来说 k8s 应用的容器网络与开发者的所在的办公网络并不能间接连通,如何在开发环境拜访 k8s 的服务,就成为咱们日常开发绕不开的坎。下边就介绍几种能够不便咱们在本地环境调用 k8s 服务计划

计划一:Telepresence

1、Telepresence 简介

Telepresence 是一款为 Kubernetes 微服务框架提供疾速本地化开发性能的开源软件。它的工作原理是在本地和 Kubernetes 集群中搭建一个通明的双向代理,它将集群中的数据卷、环境变量、网络都代理到了本地。其官网如下

https://www.telepresence.io/

2、Telepresence 能帮咱们实现什么

  • 本地服务能够齐全拜访近程群集中的其余服务;
  • 本地服务能够齐全拜访 Kubernetes 的环境变量,Secrets 和 ConfigMap;
  • K8S 中运行的近程服务也能够齐全拜访本地服务。

3、实际步骤

a装置 kubectl 命令行工具,并配置本地能够拜访 Kubernetes 集群

b装置 Telepresence 工具

c通过 Telepresence 工具启动本地服务

ps: 因为 Telepresence 目前次要反对 Mac 和 linux 环境,对 window 尽管也反对,但用 window 的装置形式,相比其余两种繁琐一些。而我的本地环境是 window 环境,因而我没采纳这种形式。如果对如何利用 Telepresence 拜访 k8s 感兴趣的敌人能够查看如下链接

Telepresence:让微服务本地开发不再难

自从用上 Telepresence 后,本地调试 Kubernetes 中的微服务不再是梦!

计划二:Kt Connect

1、Kt Connect 简介

KT Connect(Kubernetes Developer Tool)是轻量级的面向 Kubernetes 用户的开发测试环境治理辅助工具。其外围是通过建设本地到集群以及集群到本地的双向通道,从而晋升在继续交付生命周期中开发环节的效率问题以及开发测试环境的复用问题。其官网如下

https://alibaba.github.io/kt-connect/#/

2、Kt Connect 能帮咱们实现什么

a、间接拜访 Kubernetes 集群

开发者通过 KT 能够间接连贯 Kubernetes 集群外部网络,在不批改代码的状况下实现本地开发与联调测试

b、转发集群流量到本地

开发者能够将集群中的流量转发到本地,从而使得集群中的其它服务能够联调本地

c、Service Mesh 反对

对于应用 Istio 的开发者,KT 反对创立一个指向本地的 Version 版本

d、基于 SSH 的轻量级 VPN 网络

KT 应用 shhuttle 作为网络连接实现,实现轻量级的 SSH VPN 网络

e、作为 kubectl 插件,集成到 Kubectl

开发者也能够间接将 ktctl 集成到 kubectl 中

3、实际步骤

a装置 kubectl 命令行工具,并配置本地能够拜访 Kubernetes 集群

以在 window 环境装置 kubectl 命令行工具为例(ps:本文的 k8s 是间接应用云厂商的 k8s 服务)

3.1、 下载 kubectl

请到 kubernetes 版本发布页面下载与集群版本对应的或者更新的 kubectl。其下载链接如下

https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/README.md

3.2、 装置 kubectl 后,配置一下环境变量,并用管理员 cmd 命令验证一下装置是否胜利

C:\WINDOWS\system32>kubectl version --client
Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.9", GitCommit:"4fb7ed12476d57b8437ada90b4f93b17ffaeed99", GitTreeState:"clean", BuildDate:"2020-07-15T16:18:16Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"windows/amd64"}

3.2、 配置 config 文件

在 C:UsersAdministrator 目录下新建.kube 文件夹,并在该文件夹下新建 config 文件,并把 kubeconfig 内容拷贝到 config 文件中。

3.3、 验证是否能够拜访 Kubernetes 集群

C:\WINDOWS\system32>kubectl cluster-info
Kubernetes master is running at https://apiserver 地址
CoreDNS is running at https:/apiserver 地址 /api/v1/namespaces/kube-system/services/coredns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

其具体的装置步骤能够查看如下文档

https://www.kubernetes.org.cn/installkubectl

如果是应用云厂商的 k8s 服务,比方是应用华为云 cce,则能够依据如下文档进行装置

https://support.huaweicloud.com/usermanual-cce/cce_01_0107.html

如果是应用阿里云的 k8s 服务,则能够依据如下文档进行装置

https://help.aliyun.com/document_detail/86494.html

b、装置 KT Connect

以在 window 装置为例,下载 Windows 可执行文件,并解压.exe 文件到 PATH 门路下。其下载地址如下

https://alibaba.github.io/kt-connect/#/zh-cn/nightly

把下载的 ktctl_windows_amd64.exe 重命名为 ktctl.exe

c、验证 KT Connect 是否装置胜利

C:\WINDOWS\system32>ktctl -v
KT Connect version 0.0.10

d、通过 KT Connect 创立 SOCKS5 代理,其执行命令如下

ktctl --debug --image=registry.cn-hangzhou.aliyuncs.com/rdc-incubator/kt-connect-shadow:stable --namespace=dev connect --method=socks5

ps: 不指定镜像的话,默认就是

registry.cn-hangzhou.aliyuncs.com/rdc-incubator/kt-connect-shadow:stable


e、在 idea 如何进行联调

这边有两种形式,一种是在 IDEA 的工作目录下应用 ktctl 启动本地到集群的 socks5 代理服务:

ktctl --debug --image=registry.cn-hangzhou.aliyuncs.com/rdc-incubator/kt-connect-shadow:stable --namespace=dev connect --method=socks5

在运行实现后 ktctl 会主动在当前工作区生成.jvmrc 文件,如下所示:

-DsocksProxyHost=127.0.0.1
-DsocksProxyPort=2223

IDEA 应用.jvmrc 主动设置 Java 启动参数,下载并装置最新版本的 JVM Inject 插件

JVM Inject 插件会在 Java 程序启动时主动读取.jvmrc 文件,并追加到程序的启动参数中,如下所示:

java ... 省略的其余输入... -Djava.rmi.server.hostname=127.0.0.1 -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=2223 "-javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=58609:/Applications/IntelliJ IDEA.app/Contents/bin" ... 省略的其余输入...  sample.Application

另外一种咱们也能够采纳如下配置

通过设置 -Dhttp.proxyHost 和 -Dhttp.proxyPort 启动参数,在 Java 程序中所有网络申请齐全通过 KT Connect 进行转发。从而能够间接在代码中拜访 Kubernetes 集群中的服务。

f、验证

示例中 xxl-job 是部署在 k8s 集群内,当咱们本地服务没有应用 kt-connect 代理,启动我的项目,则报了如下错

>>>>>>>>>>> xxl-job registry fail, registryParam:RegistryParam{registryGroup='EXECUTOR', registryKey='stock-service-executor', registryValue='http://192.168.1.2:9993/'}, registryResult:ReturnT 

当开启代理后,控制台输入如下内容

 >>>>>>>>>>> xxl-job register jobhandler success, name:shardingJobHandler, jobHandler:com.xxl.job.core.handler.impl.MethodJobHandler@35f35c59[class com.linyb.stock.handler.SampleXxlJob#shardingJobHandler]

阐明咱们本地服务曾经胜利拜访 k8s 集群中的服务

其余计划

通过 vpn 或者相似 iptable 工具来进行转发

总结

以上的计划,我在理论落地时,是选用 kt-connect,感兴趣的敌人能够尝试一下。其实在开发环境时,也能够间接应用 docker-compose 来进行服务编排,复杂度也不是那么高

参考文档

https://www.telepresence.io/

https://alibaba.github.io/kt-…

https://www.kubernetes.org.cn/

https://www.v2ex.com/t/584314

退出移动版