使用Nginx入口控制器拆分链接器流量
我已经部署了一个Linkerd服务网格,我的Kubernetes集群配置了Nginx入口控制器作为守护程序集,并且所有入口在Linkerd中也可以正常工作。最近,我添加了流量分割功能来运行我的蓝/绿设置,我可以通过单独的入口资源访问这些服务。如前所述,我创建了一个apex web服务。如果我在内部联系您,这项服务将非常有效。我已经创建了另一个入口资源,无法在集群之外测试蓝色/绿色功能。我想提到的是,我已经将Linkedr代理注入到我所有的Nginx pod中,但它正在从Nginx返回503服务暂时不可用的消息 我浏览了文档并创建了以下入口,我可以确认以下注释已添加到入口资源中使用Nginx入口控制器拆分链接器流量,nginx,kubernetes,kubernetes-ingress,linkerd,servicemesh,Nginx,Kubernetes,Kubernetes Ingress,Linkerd,Servicemesh,我已经部署了一个Linkerd服务网格,我的Kubernetes集群配置了Nginx入口控制器作为守护程序集,并且所有入口在Linkerd中也可以正常工作。最近,我添加了流量分割功能来运行我的蓝/绿设置,我可以通过单独的入口资源访问这些服务。如前所述,我创建了一个apex web服务。如果我在内部联系您,这项服务将非常有效。我已经创建了另一个入口资源,无法在集群之外测试蓝色/绿色功能。我想提到的是,我已经将Linkedr代理注入到我所有的Nginx pod中,但它正在从Nginx返回503服务暂
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/configuration-snippet: |
proxy_set_header l5d-dst-override $service_name.$namespace.svc.cluster.local:$service_port;
grpc_set_header l5d-dst-override $service_name.$namespace.svc.cluster.local:$service_port;
但在集群的外侧仍然没有运气
我正在使用给定的emojivoto应用程序进行测试,所有流量分割和apex web服务都在培训库中
我不太确定出了什么问题,以及如何从集群外部解决这个问题。如果有人能帮助我解决这个Linkerd蓝色/绿色问题,我将不胜感激。我在Linkerd Slack频道提出了这个问题,并在社区的大力支持下得到了解决。Nginx似乎不喜欢没有端点的服务。我的配置是正确的,要求将流量拆分中指向的服务更改为具有端点的服务,解决了该问题 简而言之,我的流量拆分配置了web svc和web-svc-2服务。我已经将流量拆分规范服务更改为同一个web svc,它成功了 以下是更新后的流量拆分配置
apiVersion: split.smi-spec.io/v1alpha1
kind: TrafficSplit
metadata:
name: web-svc-ts
namespace: emojivoto
spec:
# The root service that clients use to connect to the destination application.
service: web-svc
# Services inside the namespace with their own selectors, endpoints and configuration.
backends:
- service: web-svc
# Identical to resources, 1 = 1000m
weight: 500m
- service: web-svc-2
weight: 500m
感谢支持我解决此问题的Linkedr团队。它工作起来很有魅力。我在Linkedr Slack频道提出了这个问题,并在社区的大力支持下得到了解决。Nginx似乎不喜欢没有端点的服务。我的配置是正确的,要求将流量拆分中指向的服务更改为具有端点的服务,解决了该问题 简而言之,我的流量拆分配置了web svc和web-svc-2服务。我已经将流量拆分规范服务更改为同一个web svc,它成功了 以下是更新后的流量拆分配置
apiVersion: split.smi-spec.io/v1alpha1
kind: TrafficSplit
metadata:
name: web-svc-ts
namespace: emojivoto
spec:
# The root service that clients use to connect to the destination application.
service: web-svc
# Services inside the namespace with their own selectors, endpoints and configuration.
backends:
- service: web-svc
# Identical to resources, 1 = 1000m
weight: 500m
- service: web-svc-2
weight: 500m
感谢支持我解决此问题的Linkedr团队。它就像一个魔咒;dr:nginx进入服务资源以拥有端点资源,从而被视为有效的通信目的地。repo中的体系结构创建了三个服务资源,其中一个充当apex,没有端点资源,因为它没有选择器,因此nginx入口不会向其发送流量,而叶服务也不会因此获得流量
repo中的示例遵循SMI规范,定义了一个apex服务和两个leaf服务。web apex服务没有任何端点,因此nginx不会向其发送流量
根据服务可以是自参考的,这意味着服务可以是apex和叶服务,因此,要在本例中使用nginx入口,您可以修改TrafficSplit以将spec.service值从web apex更改为web svc:
apiVersion:split.smi-spec.io/v1alpha1
种类:交通分流
元数据:
名称:web svc ts
名称空间:emojivoto
规格:
客户端用于连接到目标应用程序的根服务。
服务:web svc
命名空间内的服务具有自己的选择器、端点和配置。
后端:
-服务:web svc
与资源相同,1=1000m
重量:500米
-服务:web-svc-2
重量:500米
tl;dr:nginx进入服务资源以拥有端点资源,从而被视为有效的通信目的地。repo中的体系结构创建了三个服务资源,其中一个充当apex,没有端点资源,因为它没有选择器,因此nginx入口不会向其发送流量,而叶服务也不会因此获得流量
repo中的示例遵循SMI规范,定义了一个apex服务和两个leaf服务。web apex服务没有任何端点,因此nginx不会向其发送流量
根据服务可以是自参考的,这意味着服务可以是apex和叶服务,因此,要在本例中使用nginx入口,您可以修改TrafficSplit以将spec.service值从web apex更改为web svc:
apiVersion:split.smi-spec.io/v1alpha1
种类:交通分流
元数据:
名称:web svc ts
名称空间:emojivoto
规格:
客户端用于连接到目标应用程序的根服务。
服务
e:WebSVC
命名空间内的服务具有自己的选择器、端点和配置。
后端:
-服务:web svc
与资源相同,1=1000m
重量:500米
-服务:web-svc-2
重量:500米