问题标签 [linkerd]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linkerd - Unable to prevent requests reaching the endpoint after circuit breaking is in action
I am trying to verify linkerd's circuit breaking configuration by requesting through simple error prone endpoint deployed as a pod in the same k8s cluster where linkerd is deployed as a daemonset.
I have noticed circuit breaking happening by observing the logs but when I try to hit the endpoint again I still recieve the response from the endpoint.
Setup and Test
I used below configs to setup linkerd and its endpoint,
https://raw.githubusercontent.com/zillani/kubex/master/examples/simple-err.yml
endpoint behaviour:
endpoint always return 500 internal server error
failure accrual setting: default responseClassifier: retryable5XX
proxy curl:
Observations
1. At the Admin Metrics
2. At the log
Problem
After the node being marked as dead, a new request to the linkerd (same http_proxy command above) is hitting the endpoint and returning the response.
linkerd - linkerd Dtab 表达式未按预期转换
我已经根据此入门页面在本地运行了linkerd,并且基本代理示例有效。我的用例要求我将 Web 请求代理到多个 .NET WebApi 服务之一,因此我制作了一个在本地运行的具有两条路由的小示例 WebApi 项目:
- 本地主机:58371 返回
hello world
- localhost:58371/api/values 返回
["value1", "value2"]
使用匹配的路由映射请求
如果我让我的linkerd.yaml
文件开箱即用:
routers:
- protocol: http
dtab: |
/svc => /#/io.l5d.fs
然后映射路由直接起作用:
curl -H "Host: web" http://localhost:4140/
-->hello world
curl -H "Host: web" http://localhost:4140/api/values
-->["value1", "value2"]
映射不匹配的路线
现在,我想映射localhost:4140/tacos
--> localhost:58371/api/values
。因此,我将 .yaml 文件更新为:
routers:
- protocol: http
dtab: |
/svc => /#/io.l5d.fs;
/tacos => /api/values;
并重新启动链接器。
然而,http://localhost:4140/
似乎总是下决心http://localhost:58371/tacos
,不是http://localhost:58371/api/values
。我不明白什么?
我已经阅读了 linkerd 网站上的一堆示例 dtab 转换,并且在我的 yaml 文件中使用了一堆不同的配置。当然,我缺少的只是一些愚蠢的事情,因为这似乎是一个非常简单的用例。
service-discovery - 基于 LinkerD 文件的服务发现不起作用
我无法在 LinkerD 中使用基于文件的服务发现。
这是我的目录结构:
LinkerD 配置文件如下所示:
这是我的初始 dcs 配置文件副本:
现在,如果我在 dcs 下添加任何新服务器,例如:
除非我重新启动 LinkerD,否则请求不会路由到新 VM。请建议这里可能有什么问题?
linkerd - 如何使用 linkerd 插件中的标识符设置 HTTP 状态代码
我正在使用 linkerD 在 Java 中设置授权插件。目前我正在使用标识符来拦截请求并检查用户是否被授权。(以https://github.com/linkerd/linkerd-examples/tree/master/plugins/header-classifier为例)
如果用户未经授权,则请求不应到达后端服务。在这种情况下,我会抛出运行时异常(如果有其他方法可以阻止请求到达后端,请告诉我)。Linkerd 将响应作为 502 Bad Gateway 发送。Linkerd 应该有一种机制,通过它我可以指定我想要发回的 HTTP 状态代码。
我尝试将 responseClassifier 与标识符一起使用,但看起来在引发异常时未调用 responseClassifier。
nginx - 支持动态路由到 Kubernetes 服务的反向代理:端口名和 WebSockets
我想对支持 WebSocket 的 Kubernetes 服务执行基于路径的动态路由。
例如,这条路径:
应该使用路径foo将流量路由到命名端口myport(默认命名空间)上的服务myservice。
我使用以下 ConfiMap 路由器条目(使用 io.l5d.k8s 命名器)通过 Linkerd接近实现了这一点:
除了我需要在 Linkerd 中不可用的 WebSocket 支持之外,它可以工作。
我尝试使用正则表达式来定位NGINX并重写规则。这看起来像这样:
除了 NGINX 不会路由到 NGINX 启动后创建的服务之外,这很有效。我不确定这是否与 nginx 中的 DNS 缓存问题或对SRV DNS 记录的支持有关。这种情况应该在NGINX Plus中工作,但我必须只依赖开源软件。
反向代理/服务网格支持动态路由到 K8s service:port 以及 WebSockets 的任何想法?
编辑 这可以用Istio完成吗?似乎必须在Istio 路由配置中指定一个硬编码的目的地。我可以在源(请求)上指定一个正则表达式,但不能使用正则表达式捕获组来指定目标。
scala - 如何构建简单的 Linkerd 命名器插件?
我正在尝试使用一些自定义命名器插件运行 linkerd,但在启动时失败。我已经获得了 io.l5d.fs 的源代码,并切断了所有业务逻辑,以获得一些带有硬编码地址的简约示例。
初始化器:
配置:
姓名:
构建.sbt
我还暴露了 META-INF/services/io.buoyant.namer.NamerInitializer 下的“com.consg.MyInitializer”服务
然后我构建插件 jar 并将其放在插件下 (linkerd-1.3.1/plugins)
现在我正在尝试使用配置运行 linkerd:
结果我得到了:
所以看起来插件根本没有加载。需要一些帮助。
nginx - 为 DNS 使用 namerd?(或者:如何用 Linkerd 配置一个 nginx 入口服务)
我目前在 上部署了一个 hello world 服务/svc/hello
,并且在我的 namerd internal
dtab 中添加了一个 dentry 为/svc/app => /svc/hello
.
我还部署了一个nginx
服务,它将作为我的入口控制器,并将所有流量转发到相关服务。最终它将进行标头剥离,仅向白名单 IP 范围内的开发人员公开管理服务等,但现在我通过以下配置使其保持非常简单:
但是,这些nginx
pod 无法启动,并出现错误
nginx:在 /etc/nginx/conf.d/default.conf:3 的上游“app”中找不到 [emerg] 主机
我需要做什么才能让 nginx 服务能够通过 linkerd 转发到应用程序服务?
routing - 链接器、kubernetes 和 dtab
我对 Kubernetes 中的 linkerd 非常陌生,我对 dtab 和路由不太熟悉。
我一步一步地遵循了这个非常简单的“入门指南”:https ://blog.buoyant.io/2016/10/04/a-service-mesh-for-kubernetes-part-i-top-line-service-指标/
一切正常,但它并没有对整个事情的工作方式给出深入的解释。
所以,我有这些“传入”规则:
/srv=>/#/io.l5d.k8s/default/http;
/host=>/srv;
/svc=>/host;
/host/world=>/srv/world-v1
在本教程中,为了测试它是否有效,我需要发出这个 curl 请求:
$ http_proxy=$INGRESS_LB:4140 curl -s http://hello
..它有效!但我真的不知道我是如何http://hello
成为一个/svc/hello
……这种魔法是如何以及在哪里发生的?
我看到“默认”命名空间是“硬编码”的/#/io.l5d.k8s/default/http
,所以我想我无法访问位于另一个命名空间中的服务。我怎样才能更新规则来做这样的事情?
感谢您帮助我在 linkerd 上取得进步 ^^
kubernetes - 如何为 AWS Kubernetes 服务设置 gRPC
知道如何为 Kubernetes 公开的服务设置 gRPC 吗?我们已经在我们的集群中部署了 Linkerd,它似乎运行良好,并在 Kubernetes 中为我们提供了 gRPC。但是,我们还没有找到从集群外部为我们提供 gRPC 连接的解决方案。