求Kubernetes(K8s)服务网格Istio入门教程

作为一个刚接触Istio的新手,想请教几个基础问题:

  1. Istio在K8s中的核心作用是什么?能否用通俗例子说明它与普通Ingress的区别?
  2. 安装Istio时发现多个组件(如Pilot、Citadel),它们各自负责什么功能?最小化部署需要哪些?
  3. 文档中提到的"Sidecar自动注入"具体是如何工作的?如果我的Pod已有其他容器会冲突吗?
  4. 能否通过简单示例演示如何用Istio实现A/B测试流量分发?需要配置哪些关键YAML文件?
  5. 生产环境启用Istio后,常见的性能瓶颈或运维坑点有哪些注意事项?
3 回复

作为屌丝程序员,我可以简单介绍下Istio入门:

首先安装Docker和Minikube。接着部署K8s集群,初始化后安装Istio:

curl -L https://istio.io/downloadIstio | sh -
cd istio-*
export PATH=$PWD/bin:$PATH
istioctl install --set profile=demo -y

然后部署示例应用Bookinfo:

kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml

访问应用可以通过Ingress Gateway:

kubectl get svc istio-ingressgateway -n istio-system

记下外部IP,浏览器访问http://<IP>:31380/productpage

监控方面,启动grafana界面:

kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=grafana -o jsonpath='{.items[0].metadata.name}') 3000:3000

浏览器访问http://localhost:3000,默认用户名密码都是admin。

这只是入门,Istio还有很多高级功能如熔断、限流等。建议先熟悉基本概念和服务网格的作用。


作为程序员,我推荐以下步骤快速入门Istio:

  1. 环境准备:确保已安装Docker、Kubectl和Minikube。使用minikube start --cpus=4 --memory=8192启动带更多资源的K8s集群。

  2. 安装Istio:从Istio官网下载对应版本,解压后执行istioctl install --set profile=demo -y完成安装。

  3. 部署示例应用:运行samples/bookinfo/platform/k8s/下的脚本部署示例应用,如kubectl apply -f samples/bookinfo/platform/k8s/bookinfo.yaml

  4. 注入Sidecar:为命名空间添加Istio sidecar,运行kubectl label namespace default istio-injection=enabled

  5. 验证:访问应用页面,通过istioctl dashboard kiali打开Kiali监控面板查看服务网格拓扑。

  6. 功能体验:尝试流量管理(路由规则)、观测(指标收集)和安全(认证授权)等功能。

通过以上步骤,你可以快速了解Istio的核心功能及如何在K8s中构建服务网格。建议动手实践,深入理解其工作原理。

以下是Istio入门教程的核心内容:

  1. Istio简介 Istio是K8s的服务网格解决方案,提供流量管理、安全、可观测性等功能。

  2. 安装准备

  • Kubernetes集群(推荐v1.16+)
  • kubectl工具
  • Helm(可选)
  1. 安装Istio
# 下载最新版
curl -L https://istio.io/downloadIstio | sh -
cd istio-*

# 安装到K8s
./bin/istioctl install --set profile=demo -y
  1. 核心组件
  • Envoy Proxy:负责流量转发
  • Pilot:配置分发
  • Citadel:安全证书管理
  • Mixer:策略和遥测
  1. 基础功能演示

a) 流量管理示例

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: myapp
spec:
  hosts:
  - "*"
  http:
  - route:
    - destination:
        host: myapp
        subset: v1
      weight: 70
    - destination:
        host: myapp
        subset: v2
      weight: 30

b) 启用自动Sidecar注入

kubectl label namespace default istio-injection=enabled
  1. 常用命令
# 查看服务网格状态
istioctl analyze

# 查看已安装组件
kubectl get pods -n istio-system

# 访问Kiali仪表盘
istioctl dashboard kiali
  1. 学习资源

建议从官方Bookinfo示例开始实践,逐步掌握流量管理、熔断、故障注入等功能。

回到顶部