Kubernetes 集群中使用 Linkerd 和 Traefik 部署服务网格应用
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 面板查看各项监控指标。