服务器Service Mesh配置:从零搭建Istio流量治理

Service Mesh(服务网格)解决的核心问题是:在不改动业务代码的前提下,为微服务之间的通信加上流量控制、加密、可观测性。
如果你的服务器已经运行 Kubernetes,想在集群里配置 Service Mesh,最常用的方案是 Istio。
下面以 Istio 为例,讲清楚从零到流量路由生效的完整过程。

先确认你的环境能不能装 Istio

Istio 运行在 Kubernetes 之上,所以前提是你已经有一个可用的 K8s 集群。
执行以下命令确认集群状态:

kubectl cluster-info
kubectl get nodes

预期结果是节点状态为 Ready。
如果这条命令都报错,先解决 K8s 本身的问题,不要继续装 Istio。

还需要确认两件事:

  • kubectl 版本:建议与集群版本差距不超过一个小版本,用 kubectl version --short 查看。
  • 资源余量:Istio 控制面(istiod)本身占用不高,但每个注入 Sidecar 的 Pod 会额外消耗 CPU 和内存。节点剩余内存建议不低于 2 GB。

下载 istioctl 命令行工具:

curl -L https://istio.io/downloadIstio | sh -
cd istio-*
export PATH=$PWD/bin:$PATH
istioctl version

istioctl version 能输出版本号,说明工具可用。

安装控制面并开启自动注入

Istio 官方提供多种安装配置档(profile),生产环境常用 default,资源紧张可以用 demo 先跑通。
执行:

istioctl install --set profile=demo -y

安装完成后检查关键组件:

kubectl get pods -n istio-system

istiod 应为 Running。
如果 istio-ingressgateway 处于 Pending,通常是节点没有可用端口或云厂商 LoadBalancer 未就绪,可先用 NodePort 验证。

下面给目标命名空间打标签,让 Istio 自动注入 Sidecar:

kubectl label namespace default istio-injection=enabled

验证标签是否生效:

kubectl get namespace -L istio-injection

default 一行应显示 enabled。

部署示例应用并验证 Sidecar 注入

用官方 bookinfo 示例验证最直接:

kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
kubectl get pods

关键看 READY 列,正常应该显示 2/2,说明业务容器和 istio-proxy 两个容器都在运行。
如果显示 1/1,说明 Sidecar 没有注入。

常见原因是命名空间标签没打对,或者 Pod 是在打标签之前就已经创建的。已存在的 Pod 不会自动补注入,需要重建:

kubectl rollout restart deployment -n default

配置流量路由并观察效果

Service Mesh 的价值要通过路由规则体现。
假设你想把 90% 流量发给 v1、10% 发给 v2,先定义 DestinationRule 和 VirtualService:

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: reviews
spec:
  host: reviews
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v1
      weight: 90
    - destination:
        host: reviews
        subset: v2
      weight: 10

应用后检查规则是否被 istiod 接受:

kubectl apply -f destination-rule.yaml
kubectl apply -f virtual-service.yaml
istioctl analyze

istioctl analyze 没有输出 Error 或 Warning,说明配置语法和引用关系正常。
再通过 ingress gateway 访问几次,观察是否按权重返回不同版本页面。

容易踩的坑和排查思路

  • Sidecar 没注入:先查命名空间标签,再确认 Pod 是否在打标签后创建。
  • 端口冲突:Istio 默认接管 15001、15006 等端口,如果节点上有其他程序占用,Sidecar 会启动失败,用 kubectl logs -c istio-proxy 查看。
  • DNS 解析失败:Sidecar 注入后,Pod 的 DNS 请求会经过 istio-proxy,确保 kube-dns 或 coredns 服务正常运行。
  • 资源不足导致 OOM:Sidecar 默认内存限制较低,高流量场景需要在 Deployment 的 annotation 中调整 sidecar.istio.io/proxyMemory。
  • 卸载不干净:直接删除 istio-system 命名空间可能残留 webhook,正确做法是 istioctl uninstall --purge。

如果只是学习验证,
装完后建议用 kubectl delete -f samples/bookinfo/platform/kube/bookinfo.yaml 清理示例应用,
避免长期占用资源。

后续可以继续深入的方向

跑通基础路由后,可以再尝试 mTLS 加密、请求超时与重试、Prometheus 指标采集。
这些能力都不需要改业务代码,但每一步都建议先在测试命名空间验证,确认无误再推到生产。

分享到:
上一篇
服务器微服务治理:从零搭建到服务注册与熔断实操
下一篇
服务器链路追踪配置:从零搭建到验证的完整流程
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意