在 Kuma/Envoy 中定义拆分交通路线
Defining a split traffic route in Kuma/Envoy
我正在尝试使用 Kuma 创建服务网格的演示,但在查看文档中的 example 时,我对如何配置流量流量拆分感到困惑。我有两个版本的微服务,它们 return 不同的结果取决于 Kubernetes 配置中定义的环境变量。与 pods 关联的服务由其配置配置使用哪个 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 选择器吗?
我应该补充一点,当我使用 kuactl 检查服务时,我看到这个微服务有两个,一个没有端口名称:
dntapi-std_meshdemo_svc Online 1/1
dntapi_meshdemo_svc_4000 Online 1/1
提前致谢。
更改您的服务定义以仅使用两种工作负载变体共有的标签(看起来应该是 uservice: dntapi
)。然后在 Kuma TrafficRoute 目标中使用 format
标签作为“标签”,就像示例使用 version
标签(is/can 直接从 Kubernetes 标签派生)一样。这将允许您控制发送到标记为 format: standard
的 Pods 的流量百分比以及发送到标记为 format: military
.
的 Pods 的流量百分比。
参见 https://github.com/kumahq/kuma-demo/tree/master/kubernetes 的另一个例子。向下滚动到“流量路由”部分;该示例完全符合我上面的描述。
我正在尝试使用 Kuma 创建服务网格的演示,但在查看文档中的 example 时,我对如何配置流量流量拆分感到困惑。我有两个版本的微服务,它们 return 不同的结果取决于 Kubernetes 配置中定义的环境变量。与 pods 关联的服务由其配置配置使用哪个 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 选择器吗?
我应该补充一点,当我使用 kuactl 检查服务时,我看到这个微服务有两个,一个没有端口名称:
dntapi-std_meshdemo_svc Online 1/1
dntapi_meshdemo_svc_4000 Online 1/1
提前致谢。
更改您的服务定义以仅使用两种工作负载变体共有的标签(看起来应该是 uservice: dntapi
)。然后在 Kuma TrafficRoute 目标中使用 format
标签作为“标签”,就像示例使用 version
标签(is/can 直接从 Kubernetes 标签派生)一样。这将允许您控制发送到标记为 format: standard
的 Pods 的流量百分比以及发送到标记为 format: military
.
参见 https://github.com/kumahq/kuma-demo/tree/master/kubernetes 的另一个例子。向下滚动到“流量路由”部分;该示例完全符合我上面的描述。