.NET Core API网关Ocelot(八)【Kubernetes】

此功能是问题345的一部分。 添加对kubernetes提供商的支持。

Ocelot将在给定的命名空间中调用k8s端点API,以获取pod的所有端点,然后在它们之间进行负载平衡。 Ocelot曾经使用服务api将请求发送到k8s服务,但是在PR 1134中对此进行了更改,因为该服务未达到预期的负载平衡。

您需要做的第一件事是安装在Ocelot中提供kubernetes支持的NuGet软件包。

Install-Package Ocelot.Provider.Kubernetes

然后将以下内容添加到您的ConfigureServices方法中。

s.AddOcelot()
 .AddKubernetes();

如果您在kubernetes中部署了服务,则通常将使用命名服务来访问它们。 默认usePodServiceAccount = True,这意味着使用Pod来访问k8s集群服务的ServiceAccount必须是基于RBAC授权的ServiceAccount

您可以复制许可的。 使用RBAC角色绑定。 许可的RBAC权限k8s api服务器和令牌将从pod中读取。

kubectl create clusterrolebinding permissive-binding –clusterrole=cluster-admin –user=admin –user=kubelet –group=system:serviceaccounts

以下示例显示了如何设置将在kubernetes中运行的路由。 最重要的是ServiceName,它由kubernetes服务名称组成。 我们还需要在GlobalConfiguration中设置ServiceDiscoveryProvider。 此处的示例显示了典型配置。
假设kubernetes api服务器在192.168.0.13上运行,并且api服务在端口443上。

  {
"ReRoutes": [
  {
    "DownstreamPathTemplate": "/api/values",
    "DownstreamScheme": "http",
    "UpstreamPathTemplate": "/values",
    "ServiceName": "downstreamservice",
    "UpstreamHttpMethod": [ "Get" ]
  }
],
"GlobalConfiguration": {
  "ServiceDiscoveryProvider": {
    "Host": "192.168.0.13",
    "Port": 443,
    "Token": "txpc696iUhbVoudg164r93CxDTrKRVWG",
    "Namespace": "dev",
    "Type": "kube"
  }
}
}

Namespace Dev中部署服务,ServiceDiscoveryProvider类型为kube,也可以设置pollkube ServiceDiscoveryProvider类型。
注意:主机,端口和令牌已不再使用。

您可以使用Ocelot轮询kubernetes以获得最新的服务信息,而不是根据每个请求。 如果要轮询kubernetes的最新服务而不是按请求轮询(默认行为),则需要设置以下配置。

“ServiceDiscoveryProvider”: {
“Host”:192.168.0.13,
“Port”: 443, 
“Token”: “txpc696iUhbVoudg164r93CxDTrKRVWG”, 
“Namespace”: “dev”, 
“Type”: “pollkube”, 
“PollingInterval”: 100
}

轮询间隔以毫秒为单位,告诉Ocelot多久调用一次kubernetes来更改服务配置。

请注意,这里需要权衡。 如果对kubernetes进行轮询,则Ocelot可能会根据轮询间隔不知道服务是否关闭,并且与每个请求获得最新服务相比,您可能会遇到更多错误。 这实际上取决于您的服务的不稳定程度。 我怀疑这对大多数人来说是否重要,而轮询可能会比按请求调用kubernetes带来微小的性能提升。 Ocelot无法为您解决这些问题。

如果下游服务位于其他名称空间中,则可以通过指定ServiceNamespace在路由级别覆盖全局设置。

{
  "Routes": [
    {
      "DownstreamPathTemplate": "/api/values",
      "DownstreamScheme": "http",
      "UpstreamPathTemplate": "/values",
      "ServiceName": "downstreamservice",
      "ServiceNamespace": "downstream-namespace",
      "UpstreamHttpMethod": [ "Get" ]
    }
  ]
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值