问题标签 [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.
kubernetes - 在 aks 中安装服务网格 Linkerd 服务网格时出现安装错误
我已按照此处的入门说明进行操作:https : //linkerd.io/2/getting-started/ 用于安装链接器,但我在第 3 步遇到错误。详细信息如下。
请看命令:linkerd install | kubectl 应用 -f -
请看下面的错误:
谁能帮我解决这个问题。
nginx - 在不破坏站点的情况下自动部署 k8s 入口更改的最佳方法是什么?
我帮助维护一个 Web 应用程序,除了我们的 nginx-ingress 更改之外,在 Kubernetes 的部署管道中一切都是完全自动化的。当入口更改确实出现在管道中时,有经验的人将手动审查它并通过 helm 部署它。担心的是,如果开发人员对入口进行了错误的更改,它将被实时升级并导致部分或整个应用程序停止。
我们想要自动化这个过程的能力,但我没有找到关于如何完成这个的好的资源。我查看了 Linkerd、Istio 和 Weaveworks Flagger。Flagger 似乎正是我正在寻找的东西(金丝雀,自动指标检查,自动回滚,甚至像 bash 脚本这样的自定义检查)。但它金丝雀服务,而不是入口本身。我的下一步行动是建议编写一种完全自定义的方法(可能是一个 CRD 或服务,它可以做 flagger 所做的,但用于入口记录,而不是服务),但我想联系互联网,看看是否有人这里可以推荐任何可以做我想做的产品吗?安全地金丝雀(或直接部署)入口更改。
kubernetes - 删除处于“终止”状态的 linkerd kubernetes 命名空间
这是资源状态:
API服务:
我尝试删除终结器,什么也没做。还试图删除--grace-period=0 --force
仍然没有。它不显示命名空间下的任何资源。
我还能做些什么来强制删除?
node.js - 无法将 GRPC 微服务与客户端连接 - 在 k8s 上嵌套 JS 节点
我目前坚持在 kubernetes 中连接 clusterIp 服务。主要目标是使用 grpc 连接一个 pod(微服务)和使用 node 连接另一个 pod(客户端)。我正在使用服务名称来公开并连接到微服务产品-微服务,但是在尝试调用客户端上的微服务时出现此错误。
我查看了我创建的 docker 映像,它指向此地址 url:'0.0.0.0:50051'
但无法正常工作,因为本文建议https://kubernetes.io/blog/2018/11/07/grpc-load-balancing-on-kubernetes-without -tears/
到目前为止,我只有一个用于产品的微服务,其中包含管理产品的逻辑,并且是使用 node-js 和 grpc 开发的(本地运行完美)。xxx-microservice-products-deployment
我在 k8s 中命名并包含它们的定义如下所示:
然后为了连接到它们,我们创建了一个带有 a 的服务,clusterIp
它暴露了50051
,它们在 k8s 中的定义如下所示:
现在,我们也在节点中创建了一个客户端,其中包含在 (get,post)
后台与微服务建立连接的 api 方法。我命名了客户端xxx-api-main-app-deployment
,它们在 k8s 中的定义如下所示:
另外,我创建了一个服务来导出 api,它们的 k8s 定义如下所示:
直到这里,一切看起来都很好。因此,我尝试与服务建立连接,但出现此错误
我没有发现任何有用的东西让它工作。有人有任何线索吗?
因此,在深入研究了该问题的解决方案后,我发现 kubernetes 团队建议使用linkerd
将连接从字面上转换为 http,因为 k8s 在这种情况下不起作用。所以我跟着这篇文章https://kubernetes.io/blog/2018/11/07/grpc-load-balancing-on-kubernetes-without-tears/,然后我去linkerd
指南并按照安装步骤。现在我能够看到linkeird
仪表板,但无法与客户端进行微服务通信。因此,我尝试检查端口是否在客户端 pod 中公开,因此,我使用以下命令进行验证:
这是输出:
如您所见,存在包含服务端口的 env 变量,因为这是有效的。我没有使用 IP 直接,因为当我扩展部署以拥有更多资源时它不会工作。然后,我验证我的微服务正在使用:
这是输出:
一切看起来都不错。然后我重新验证我在代码上使用的端口:
- 微服务
- 客户:
然后,我决定检查linkerd
为客户端运行的 pod 内的日志。
kubectl logs pod/xxx-api-main-app-deployment-5fb5d4bf9f-ttwn5 -c linkerd-init
输出是这样的:
kubernetes - 我是否必须使用 Linkerd 为每个服务定义一个入口?
在这里查看链接器入口文档,它说我需要创建一个带有注释的入口
此注释特定于单个服务,这听起来像是每个服务都必须有一个带有自己注释的新入口。例如,我不能有以下内容:
我可以在单个入口类中定义不同服务的路径。
我对这些文档的阅读准确吗?还是我错过了什么?我希望避免为我在 linkerd 中运行的每个服务创建一个入口。
kubernetes - 如何在 linkerd 中禁用 mTLS?
我坐在公司防火墙后面,它只允许它可以使用 MITM 证书拦截的 https 流量。不幸的是,linkerd 和大多数其他服务网格在所有 pod 代理通信之间都启用了 mTLS。如何禁用 mTLS,以免在我的网络中阻止链接器 pod?
我试过的
有趣的是,使用以下命令收集 linkerd 指标是有效的:
日志
Linkerd 仍在使用这些日志在 linkerd 命名空间中部署 tap
此外,我在 kubeapi 服务器上收到以下错误
让这更奇怪的是我的链接器检查说一切都很好:
我还在其他工作集群中添加了一个 taefik 入口规则,并且无法访问仪表板:
虽然它似乎应该工作:
linkerd - 我可以将 Envoy 与 Linkerd 一起使用吗?
大多数服务网格使用 Envoy 作为 sidecar 代理,但这似乎不是 Linkerd 的默认选项。我们已经在使用 Envoy 作为入口,并且真的不想在混合中添加新的代理。我们可以将 Linkerd 与 Envoy 一起使用吗?
trace - Linkerd 使用 OpenCensus 进行分布式跟踪
语境
我正在尝试使用 OpenCensus 和 Linkerd。尽管 Linkerd 可以选择在其命名空间中自动配置 OpenCensus 和 jaeger,但我不想使用它们。相反,我自己在名为“ops”的命名空间下独立部署了它们。
问题
- OpenCensus 收集器是否应该由 Linkerd 注入。
在官方文档的最后(正好是最后的第 4 行) ,它说,
确保 OpenCensus 收集器注入了 Linkerd 代理。
这是什么意思?
我应该将 linkerd sidecar 注入 OpenCensus 收集器 pod 吗?
如果是这样,为什么?
- 我应该按命名空间为 serviceaccount 名称添加后缀吗?
例如,假设我已经像这样配置了默认命名空间。
my-opencensus-collector
位于ops
命名空间中,因此我将其放在.ops
其服务名称的末尾,结果为my-opencensus-collector.ops:12345
. OpenCensus 收集器的专用服务帐户ops
也存在于命名空间中。在这种情况下,我是否也应该将命名空间名称放在服务帐户名称的末尾?
哪一个是对的?
或者
谢谢!
nginx - Linkerd 使用 Nginx 入口控制器拆分流量
我已经部署了一个 Linkerd 服务网格,并且我的 Kubernetes 集群配置了 Nginx 入口控制器作为 DaemonSet,并且所有入口在 Linkerd 上也可以正常工作。最近,我添加了流量拆分功能来运行我的蓝/绿设置,我可以通过单独的入口资源访问这些服务。我已经创建了一个 apex-web 服务,如此处所述。如果我在内部与您联系此服务,它会完美运行。我创建了另一个入口资源,但无法在集群外部测试蓝/绿功能。我想提一下,我已经将(注入 Linkerd 代理)连接到我所有的 Nginx pod,但它正在503 Service Temporarily Unavailable
从 Nginx 返回“”消息。
我浏览了文档并在此之后创建了入口,我可以确认以下注释已添加到入口资源中。
但是集群的外部仍然没有运气。
我正在使用给定的 emojivoto 应用程序进行测试,所有流量拆分和 apex-web 服务都在这个培训存储库中。
我不太确定出了什么问题以及如何从集群外部解决此问题。如果有人帮助我解决这个 Linkerd、Blue/Green 问题,我将不胜感激。
kubernetes - K8S Ingress:如何限制每个 pod 中的请求
我正在移植一个应用程序以在 k8s 中运行。我遇到了入口问题。我正在尝试找到一种方法来限制在任何给定时间对部署管理的每个后端 pod 的 REST API 请求数量。
请参阅下图显示架构。
Ingress 由 nginx-ingress 管理。对于给定的一组 URL 路径,入口将请求转发到以部署 REST API 后端进程为目标的服务。部署也由基于 CPU 负载的 HPA 管理。
我想要做的是找到一种方法来对入口请求进行排队,这样对于运行我们 API 后端进程的任何 pod 的飞行请求永远不会超过 X 个。(例如,每个 pod 一次只允许 50 个正在运行的请求)
有谁知道如何设置这样的请求限制?
作为一个额外的问题,我需要做的下一件事是让 HPA 监控请求队列并自动扩大/缩小部署,以使 pod 的数量与当前正在处理/排队的请求数量相匹配。例如,如果每个 pod 可以一次处理 100 个正在运行的请求,并且我们当前有 1000 个请求的负载水平要处理,那么自动缩放到 10 个 pod。
如果有用,我还计划为这个集群安装 linkerd。也许它有一种可以提供帮助的能力。