多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

第三篇:《在 Kubernetes 中部署 Istio:安装、配置与 Sidecar 注入》

第三篇:《在 Kubernetes 中部署 Istio:安装、配置与 Sidecar 注入》 理解了 Istio 的架构之后是时候亲手搭建一个 Istio 环境了。在 Kubernetes 集群中安装 Istio 有多种方式最常用的是 istioctl 命令行工具和 Helm。本文将详细介绍使用 istioctl 安装 Istio 的完整流程涵盖环境准备、安装配置文件的选型、命名空间 Sidecar 自动注入的配置以及通过 Bookinfo 示例应用验证 Istio 的核心功能。跟着操作你将拥有一个可用的 Istio 服务网格环境。一、环境准备在安装 Istio 之前需要确保以下条件已满足Kubernetes 集群一个可用的 Kubernetes 集群版本 1.19且 kubectl 已配置好与集群的通信。资源充足Istio 控制平面和 Sidecar 代理需要一定的计算资源。建议集群至少分配 4GB 内存和 2 个 CPU 核心。 本地开发建议如果你没有现成的 Kubernetes 集群可以使用 Minikube 或 Kind 在本地快速搭建一个测试环境。Minikube 启动命令minikube start --cpus4 --memory8192。二、使用 istioctl 安装 Istioistioctl 是 Istio 官方提供的命令行工具用于安装、配置和调试 Istio 服务网格。2.1 下载 istioctl# 下载最新版本的 Istiocurl-Lhttps://istio.io/downloadIstio|sh-# 进入 Istio 包目录cdistio-1.23.0# 将 istioctl 添加到 PATHexportPATH$PWD/bin:$PATH 版本选择建议使用最新的稳定版本。你可以访问 Istio 官方发布页面查看当前最新版本号并替换上述命令中的版本号。2.2 验证 istioctlistioctl version如果安装成功会显示客户端版本信息。2.3 安装 IstioIstio 提供了多种安装配置文件Profile每个 Profile 针对不同的使用场景进行了预配置Profile 说明 适用场景demo 功能齐全资源消耗适中包含 Jaeger、Grafana、Kiali 等附加组件 学习与测试推荐default 核心功能不含附加组件 生产环境的最小化部署minimal 仅包含控制平面不含 Ingress/Egress Gateway 自定义部署的基础remote 用于多集群架构中的远程集群 多集群部署对于学习和测试推荐使用 demo Profileistioctlinstall--setprofiledemo-y该命令会在 Kubernetes 集群的 istio-system 命名空间中部署 Istio 控制平面istiod和 Ingress Gateway。⚠️ 生产环境建议生产环境不建议直接使用 demo Profile。建议从 default Profile 开始根据实际需求逐步开启功能并通过 IstioOperator CRD 进行声明式配置管理。2.4 验证安装# 检查 Istio 控制平面 Pod 是否正常运行kubectl get pods-nistio-system# 检查 Istio 服务kubectl get svc-nistio-system预期输出应包含 istiod-xxx PodRunning和 istio-ingressgateway Service。三、配置 Sidecar 自动注入要让 Istio 接管服务的流量需要为每个 Pod 注入 Envoy Sidecar 容器。Istio 提供了自动注入机制大大简化了这一过程。3.1 为命名空间启用自动注入为需要启用服务网格的命名空间添加 istio-injectionenabled 标签# 为 default 命名空间启用自动注入kubectl label namespace default istio-injectionenabled 命名空间隔离建议将启用服务网格的服务放在独立的命名空间中例如 prod、staging 等。通过命名空间标签可以精细控制哪些服务加入网格。3.2 验证自动注入是否生效当命名空间被正确标记后新创建的 Pod 将自动注入 Envoy Sidecar 容器。# 创建一个测试 Podkubectl run nginx--imagenginx:alpine--restartNever# 查看 Pod 中的容器kubectl get pod nginx-ojsonpath{.spec.containers[*].name}预期输出应包含 nginx 和 istio-proxy 两个容器。如果没有 istio-proxy可能是 Pod 创建时命名空间尚未启用注入需要重启 Pod。3.3 手动注入备选方案如果不想为整个命名空间启用自动注入也可以使用 istioctl kube-inject 手动为 Deployment YAML 注入 Sidecaristioctl kube-inject-fdeployment.yaml|kubectl apply-f- 生产建议生产环境推荐使用自动注入因为它与 GitOps 工作流更契合且不需要修改原始的 Deployment YAML。四、部署 Bookinfo 示例应用Bookinfo 是 Istio 官方提供的示例应用用于演示服务网格的各项功能。它是一个简单的图书信息展示系统由四个微服务组成。4.1 部署 Bookinfo 应用确保 default 命名空间已启用自动注入后部署 Bookinfo 应用# 应用 Bookinfo 部署清单kubectl apply-fsamples/bookinfo/platform/kube/bookinfo.yaml4.2 验证部署# 查看所有 Pod每个 Pod 应有 2 个容器业务容器 istio-proxykubectl get pods# 查看服务kubectl get services预期输出应包含 details、productpage、ratings、reviews 四个服务以及各自对应的 Pod。4.3 配置 Ingress Gateway为了让外部能够访问 Bookinfo 应用需要配置 Istio Ingress Gateway# 应用 Ingress Gateway 配置kubectl apply-fsamples/bookinfo/networking/bookinfo-gateway.yaml4.4 访问 Bookinfo 应用方式一端口转发本地测试kubectl port-forward svc/istio-ingressgateway-nistio-system8080:80然后访问 http://localhost:8080/productpage。方式二获取外部 IP如果集群支持 LoadBalancer可以直接获取 Ingress Gateway 的外部 IP# 获取 Ingress Gateway 的外部 IPkubectl get svc istio-ingressgateway-nistio-system然后访问 http://EXTERNAL_IP/productpage。4.5 验证流量管理Bookinfo 应用的 reviews 服务有三个版本v1、v2、v3默认情况下请求会在这三个版本之间轮询。可以观察到每次刷新页面时“Reviews”部分的显示会变化v1 无星标、v2 有黑色星标、v3 有红色星标这证明了 Istio 的负载均衡功能正在工作。五、卸载 Istio如果需要清理 Istio 环境# 卸载 Istioistioctl uninstall--purge-y# 删除 Istio 命名空间kubectl delete namespace istio-system# 删除 Bookinfo 应用kubectl delete-fsamples/bookinfo/platform/kube/bookinfo.yaml六、小结安装方式istioctl install 是最快捷的安装方式demo Profile 适合学习测试。Sidecar 注入为命名空间添加 istio-injectionenabled 标签即可启用自动注入。Bookinfo 示例官方示例应用是验证 Istio 功能的最佳起点。验证要点检查 Pod 中是否包含 istio-proxy 容器以及 Ingress Gateway 是否正常工作。
返回列表