跳转至

通过网关访问服务

本文演示如何将微服务接入 云原生网关并通过网关访问该服务。

前提条件

  • 准备一个服务。本文使用的是 my-otel-demo-adservice 服务,部署在 skoala-dev 集群下的 webstore-demo 命名空间。
  • 访问 my-otel-demo-adservice 服务根路径 / 理论上应该返回 adservice-springcloud: hello world!。

服务接入网关

云原生网关支持通过手动接入和自动发现两种方式导入服务,操作时根据自身情况二选一即可。

自动发现服务

  1. 参考文档创建网关创建一个网关。 将服务所在的命名空间添加为网关的管辖命名空间 。 此次演示使用的服务位于 webstore-demo 命名空间。所以创建网关时应该做如下配置:

    管辖命名空间

  2. 服务所在的命名空间被添加为管辖命名空间之后,该命名空间下的所有服务都会自动接入网关,无需手动添加。

    自动发现

  3. 参考添加域名在网关下面创建域名,例如adservice.virtualhost。

  4. 参考添加 API在网关下面创建 API。 需要将服务添加为 API 的后端服务 。

    添加后端服务时,筛选自动发现类型的服务,然后勾选目标服务,点击 确定 即可。

    后端服务

手动接入服务

  1. 参考创建网关创建网关。

  2. 参考手动接入文档将服务接入网关

    手动接入网关

  3. 参考添加域名在网关下面创建域名,例如adservice.virtualhost。

  4. 参考添加 API在网关下面创建 API。

需要将服务添加为 API 的后端服务 。

添加后端服务时,筛选手工接入类型的服务,然后勾选目标服务,点击 确定 即可。

后端服务

获取网关地址

  1. 登录到网关所在集群的控制节点,使用 kubectl get po -n $Namespace 命令查看网关所在的节点。 以 envoy 开头的 Pod 是网关的数据面,查看这个 Pod 的位置即可。

  2. 使用 ping 命令和网关所在节点通信,根据返回的数据得知该节点的 IP。

    在本次演示情形下,网关所在节点的 IP 为10.6.222.24。

    ping

  3. 使用 kubectl get svc -n $Namespace 命令查看网关暴露的端口。

    以 envoy 开头且以 gtw 结尾的便是网关对应的 Service。在本次演示情形下,网关 Service 的端口为 30040。

    nodeport

  4. 根据上述信息得出,网关的访问地址为 10.6.222.24:30040。

配置本地域名

使用 vim /etc/hosts 命令修改本地 hosts 文件,为网关访问地址配置本地域名。

hosts

访问服务

配置本地域名之后,即可使用域名通过外部和内部网络访问网关服务。此时应该可以正常访问,返回服务根路径下的 hello world 内容。

外部访问

在本次演示情形下,可以使用 curl adservice.virtualhost:30040/。

internal visit

内部访问

在网关所在集群的任意节点上都可以通过网关成功访问 adservice 服务。

在本次演示情形下,网关所在集群中有三个工作节点,分别名为 dev-worker1、dev-worker2、dev-worker3, 在这三个节点上,使用内网 IP 均可以访问成功。

public visit

评论