tke集群搭建Linkerd2

2021-11-17 17:07:31 浏览数 (1)

Linkerd 是 Kubernetes 的服务网格。它通过为您提供运行时调试、可观察性、可靠性和安全性,使运行服务更轻松、更安全——所有这些都不需要对您的代码进行任何更改。

有关服务网格模型的简要介绍,我们建议阅读服务网格:每个软件工程师都需要了解的关于世界上最被过度炒作的技术。Linkerd 是完全开源的,在 Apache v2 下获得许可,是一个云原生计算基金会毕业的项目。

Linkerd 具有三个基本组件:UI、数据平面和控制平面。您通过以下方式运行 Linkerd:

  • 在本地系统上安装 CLI;
  • 将控制平面安装到您的集群中;
  • 将您的服务添加到 Linkerd 的数据平面。

一旦服务与 Linkerd 一起运行,您就可以使用 Linkerd 的 UI 来检查和操作它。linkerd的安装部署方式和istioctl类型,具体安装文档可以参考文档https://linkerd.io/2.11/getting-started/

第 1 步:安装 CLI

如果这是您第一次运行 Linkerd,则需要将 CLI 下载到本地机器上。CLI 将允许您与您的林克德部署进行交互。linkerd

要手动安装 CLI,操作:

代码语言:javascript复制
curl -fsL https://run.linkerd.io/install | sh

请务必按照说明将其添加到路径中。

(或者,如果您使用自制,您可以安装 CLI。您也可以直接通过Linkerd 版本页面下载 CLI。brew install linkerd

安装后,验证 CLI 运行正确,包括:

代码语言:javascript复制
linkerd version

你应该看看CLI版本,也。这是因为您没有在集群上安装控制平面。别担心,我们会尽快解决这个问题的。Server version: unavailable

第 2 步:验证您的Kubernetes 集群

Kubernetes集群可以以许多不同的方式配置。在安装 Linkerd 控制平面之前,我们需要检查并验证所有内容是否配置正确。要检查集群是否已准备好安装 Linkerd,请运行:

代码语言:javascript复制
linkerd check --pre

如果有任何检查没有通过,请务必遵循所提供的链接,并在继续之前解决这些问题。

第 3 步:将控制平面安装到集群上

现在,您已经将 CLI 本地运行,并且已准备好运行的集群,是时候安装控制平面了。要做到这一点,运行:

代码语言:javascript复制
linkerd install | kubectl apply -f -

该命令生成一个Kubernetes 表单与所有的核心控制平面资源(请随时检查此输出,如果你好奇)。将此表单插入然后指示 Kubernetes 将这些资源添加到您的集群中。

根据集群的互联网连接速度,控制平面完成安装需要一两分钟。等待控制平面已准备就绪(并通过运行验证您的安装):

代码语言:javascript复制
linkerd check

第 4 步:安装演示应用程序

让我们安装一个演示应用程序称为表情符号。表情符号是一个简单的独立库伯内特应用程序,使用 gRPC 和 HTTP 呼叫的组合,允许用户投票他们最喜欢的表情符号。

通过运行将表情符号安装到命名空间中:emojivoto

代码语言:javascript复制
curl -fsL https://run.linkerd.io/emojivoto.yml | kubectl apply -f -

部署好之后,在数据面的pod注入下sidecar

代码语言:javascript复制
kubectl get -n emojivoto deploy -o yaml 
  | linkerd inject - 
  | kubectl apply -f -

现在已将 Linkerd 添加到应用程序中!与控制平面一样,可以验证数据平面一侧的一切工作方式。用:

代码语言:javascript复制
linkerd -n emojivoto check --proxy

问题:

当你在tke上按照官方文档部署linkerd2.11版本会存在一个问题,就是linkerd-destination的policy容器会一直起不来,查看容器日志一直报错,policy起不来会导致linkerd-proxy-injector这个pod也无法启动

代码语言:javascript复制
# k logs linkerd-destination-549f568447-mlbfb policy
2021-11-04T05:51:38.191602Z  INFO linkerd_policy_controller: Admission controller server listening addr=0.0.0.0:9443
2021-11-04T05:51:38.192177Z  INFO serve{addr=0.0.0.0:9990}: linkerd_policy_controller::admin: HTTP admin server listening addr=0.0.0.0:9990
2021-11-04T05:51:38.192831Z  INFO grpc{addr=0.0.0.0:8090 cluster_networks=[10.0.0.0/8, 100.64.0.0/10, 172.16.0.0/12, 192.168.0.0/16]}: linkerd_policy_controller: gRPC server listening addr=0.0.0.0:8090
2021-11-04T05:51:38.201214Z  WARN servers: rustls::session: Sending fatal alert DecodeError
2021-11-04T05:51:38.201272Z ERROR servers: kube::client: failed with error error trying to connect: invalid certificate: BadDER
2021-11-04T05:51:38.201284Z  INFO servers: linkerd_policy_controller_k8s_api::watch: Failed error=failed to perform initial object list: HyperError: error trying to connect: invalid certificate: BadDER
2021-11-04T05:51:38.201387Z  WARN serverauthorizations: rustls::session: Sending fatal alert DecodeError
2021-11-04T05:51:38.201436Z ERROR serverauthorizations: kube::client: failed with error error trying to connect: invalid certificate: BadDER
2021-11-04T05:51:38.201452Z  INFO serverauthorizations: linkerd_policy_controller_k8s_api::watch: Failed error=failed to perform initial object list: HyperError: error trying to connect: invalid certificate: BadDER
2021-11-04T05:51:38.202124Z  WARN pods: rustls::session: Sending fatal alert DecodeError
2021-11-04T05:51:38.202184Z ERROR pods: kube::client: failed with error error trying to connect: invalid certificate: BadDER
2021-11-04T05:51:38.202194Z  INFO pods: linkerd_policy_controller_k8s_api::watch: Failed error=failed to perform initial object list: HyperError: error trying to connect: invalid certificate: BadDER
2021-11-04T05:51:39.202667Z  INFO serverauthorizations: linkerd_policy_controller_k8s_api::watch: Restarting
2021-11-04T05:51:39.202714Z  INFO servers: linkerd_policy_controller_k8s_api::watch: Restarting
2021-11-04T05:51:39.203709Z  INFO pods: linkerd_policy_controller_k8s_api::watch: Restarting

后面在github上找到这个问题发现是linkerd的一个bug,具体issue参考链接

https://github.com/linkerd/linkerd2/issues/7217

里面临时提供了一个解决方案就是替换下policy的镜像版本,采用下面镜像,开发人员也说最终会在stable-2.11.2版本彻底修复。

代码语言:javascript复制
ghcr.io/olix0r/policy-controller:nativetls.40ab223a

0 人点赞