定义Kuma/Envoy的分割流量路由



我正在尝试使用Kuma创建一个服务网格的演示,当查看文档中的示例时,我对如何配置流量分割感到困惑。我有两个版本的微服务,它们根据Kubernetes配置中定义的环境变量返回不同的结果。与pod相关联的服务由它的配置来配置使用哪个pod(不确定这样做是否正确):

apiVersion: v1
kind: Pod
metadata:
name: dntapi-mil
namespace: meshdemo
labels:
uservice: dntapi
format: military
spec:
containers:
- name: dntapi
image: meshdemo:dntapi
ports:
- name: http
containerPort: 4000
env:
- name: MILITARY
value: "true"
---
apiVersion: v1
kind: Pod
metadata:
name: dntapi-std
namespace: meshdemo
labels:
uservice: dntapi
format: standard
spec:
containers:
- name: dntapi
image: meshdemo:dntapi
ports:
- name: http
containerPort: 4000
env:
- name: MILITARY
value: "false"
---
apiVersion: v1
kind: Service
metadata:
name: dntapi
namespace: meshdemo
spec:
selector:
uservice: dntapi
format: military
ports:
- protocol: TCP
port: 4000
targetPort: 4000

如果我改变服务上的选择器,这从纯粹的K8s的角度来看是有效的,但是看看Kuma分割流量的例子:

conf:
split:
- weight: 90
destination:
kuma.io/service: redis_default_svc_6379
version: '1.0'
- weight: 10
destination:
kuma.io/service: redis_default_svc_6379
version: '2.0'

到什么是"版本"当与服务关联时引用(我不得不承认我不明白为什么会有两个具有相同标识符的服务)。这些是K8s选择器吗?

我应该补充一下,当我用kumactl检查服务时,我看到这个微服务有两个,其中一个没有端口名:
dntapi-std_meshdemo_svc          Online   1/1
dntapi_meshdemo_svc_4000         Online   1/1

提前感谢。

更改您的Service定义,使其仅使用对工作负载的两个变体通用的标签(看起来像是uservice: dntapi)。然后使用format标签作为"标签"。在Kuma TrafficRoute目的地中,就像示例中使用version标签一样(它可以直接从Kubernetes标签中派生出来)。这将允许您控制发送到标记为format: standard的Pods的流量百分比以及发送到标记为format: military的Pods的流量百分比。

参见https://github.com/kumahq/kuma-demo/tree/master/kubernetes了解另一个示例。向下滚动到"流量路由"部分;这个例子就是我上面描述的。

最新更新