前言
一般来说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 [code=500, msg=xxl-rpc remoting error(Can't connect to SOCKS proxy:Connection refused: connect), for url : http://dev-job-admin.dev.svc.cluster.local:8060/api/registry, content=null]
当开启代理后,控制台输入如下内容
>>>>>>>>>>> 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
发表回复