常规手段:通过 service 访问对应的 pod
-
通常情况下,从外部访问 kubernetes 内部 pod 服务的方法是创建 service,再通过访问 service 的方式来访问对应的 Pod,但是这样做会变更 kubernetes 环境现有配置,例如原本注册中心对应的 service type 是 ClusterIP,这里只有改成 NodePort 或者 LoadBalancer 才能让外部访问到,又例如服务 A 原本没有 service,这里为了外部访问只能为其创建 service。
-
如果这个 Kubernetes 环境是生产环境,上述改动都是不允许的,如果是开发环境,又会造成开发和生产环境有大量不一样的配置,因此,创建 service 虽然可行但并不是好方案。
更适合本地开发的方案:kubefwd 服务
-
比 service 更适合本地开发的方案是使用 kubectl port-forward 命令在本地电脑创建 kubefwd 服务,例如将对当前电脑 8081 端口的请求,可以 kubefwd 转发到 kubernetes 上的注册中心 Pod 的 8080 端口;
-
有了 kubefwd,我们在开发服务 B 的时候,只要把发往注册中心和服务 A 的请求都 kubefwd 服务转发到 kubernetes 上去就可以了,如下图:
-
理论分析就到此吧,接下来一起实战本地服务调用 K8S 环境中的微服务。
实战环境
-
以下是本次实战所需的环境,请确保您的 kubernetes 是正常可用的:
-
kubernetes:
-
kubectl:1.7.0
-
kubernetes 所在 Linux 服务器:CentOS7.4
-
本地环境:win10 专业版 64 位
-
SpringCloud:Edgware.SR1
-
如果您还没有搭建 kubernetes 环境,
-
windows 环境配置 kubectl 远程操作 kubernetes 的方法
-
实战所需的注册中心和服务 A 对应的是两个 maven 工程(eureka-server 和 s