当前位置:首页 > 技术 > 正文内容

Kubernetes 集群中使用 Linkerd 和 Traefik 部署服务网格应用

访客 技术 2026年5月23日 3

Linkerd 是专为 Kubernetes 设计的服务网格解决方案。它能够在无需修改应用程序代码的前提下,提供运行时调试、可观测性、可靠性和安全性的增强功能。

服务网格作为处理服务间通信的基础设施层,通过一组轻量级网络代理实现服务间的可靠请求传递,这些代理与应用程序共同部署但彼此独立。

环境准备

  • Kubernetes 集群(腾讯云 TKE 或自建集群)
  • CentOS 7.x 操作系统

检查 Kubernetes 版本

kubectl version --short

安装 Linkerd CLI 工具

从 GitHub 下载最新版本的 Linkerd CLI:

wget -c https://github.com/linkerd/linkerd2/releases/download/edge-21.6.1/linkerd2-cli-edge-21.6.1-linux-amd64
mv linkerd2-cli-edge-21.6.1-linux-amd64 /usr/local/bin/linkerd
chmod 755 /usr/local/bin/linkerd

部署 Linkerd 控制平面

首先验证集群兼容性:

linkerd check --pre

安装控制平面组件:

linkerd install | kubectl apply -f -

检查部署状态:

kubectl get po -n linkerd

安装监控扩展组件

部署可视化和监控工具:

linkerd viz install | kubectl apply -f -
kubectl get po -n linkerd-viz

解决镜像拉取问题

对于无法访问外部仓库的情况,创建 kustomization.yaml 文件:

resources:
- linkerd-multicluster.yaml
patchesStrategicMerge:
- patch-linkerd-multicluster.yaml

使用本地镜像替换方案:

spec:
  containers:
    - name: pause
      image: ccr.ccs.tencentyun.com/cloud-native/google-pause

重新部署:

kustomize build . | kubectl apply -f -

配置 Traefik Ingress 访问控制台

创建认证密钥:

apiVersion: v1
kind: Secret
metadata:
  name: linkerd-authsecret
  namespace: linkerd-viz
type: Opaque
stringData:
  users: # 使用 htpasswd -nb 生成

配置 IngressRoute 路由规则:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: linkerd-web-ingress-route
  namespace: linkerd-viz
spec:
  entryPoints:
    - websecure
  tls:
    secretName: hacker-linner-cert-tls
  routes:
    - match: Host(`linkerd-web.hacker-linner.com`)
      kind: Rule
      services:
        - name: web
          port: 8084
      middlewares:
        - name: l5d-header-middleware
        - name: linkerd-basic-auth

部署示例应用 Emojivoto

安装测试应用:

curl -sL https://run.linkerd.io/emojivoto.yml | kubectl apply -f -

配置应用访问路由:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: emojivoto-web-ingress-route
  namespace: emojivoto
spec:
  entryPoints:
    - websecure
  tls:
    secretName: hacker-linner-cert-tls
  routes:
    - match: Host(`emojivoto.hacker-linner.com`)
      kind: Rule
      services:
        - name: web-svc
          port: 80

启用服务网格注入

为应用添加 Linkerd 代理:

kubectl get -n emojivoto deploy -o yaml | linkerd inject - | kubectl apply -f -

验证代理注入状态:

linkerd -n emojivoto check --proxy

完成部署后,可通过 Grafana 面板查看各项监控指标。

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。