当前位置: 首页 > news >正文

Istio服务网格方案

Istio 是什么?

https://istio.io/latest/zh/

Istio 是一种开源服务网格,可透明地分层到现有的分布式应用程序上。 Istio 的强大功能提供了一种统一且更高效的方式来保护、连接和监控服务。 Istio 是实现负载均衡、服务到服务身份验证和监控的途径 - 几乎无需更改服务代码。它为您提供:

  • 使用双向 TLS 加密、强大的基于身份的身份验证和鉴权在集群中保护服务到服务通信
  • HTTP、gRPC、WebSocket 和 TCP 流量的自动负载均衡
  • 使用丰富的路由规则、重试、故障转移和故障注入对流量行为进行细粒度控制
  • 支持访问控制、限流和配额的可插入策略层和配置 API
  • 集群内所有流量(包括集群入口和出口)的自动指标、日志和链路追踪

Istio 专为可扩展性而设计,可以处理各种部署需求。Istio 的控制平面在 Kubernetes 上运行, 您可以将部署在该集群中的应用程序添加到您的网格中,将网格扩展到其他集群, 甚至连接在 Kubernetes 之外运行的虚拟机或其他端点。

Istio 扩展了 Kubernetes,以建立可编程、应用程序感知的网络。Istio 可与 Kubernetes 和传统工作负载配合使用,为复杂的部署带来标准、通用的流量管理、可观测和安全性。

选择所需的功能,Istio 会根据需要部署代理基础设施。使用零信任隧道实现四层性能和安全性,或添加强大的 Envoy 服务代理实现七层功能。

Istio 解决了开发人员和运维人员在分布式或微服务架构中面临的挑战。无论您是从头开始构建、将现有应用程序迁移到云原生,还是保护现有资产,Istio 都可以提供帮助。

Istio 介绍

服务网格是一个基础设施层,它为应用程序提供零信任安全、可观察性和高级流量管理等功能, 而无需更改代码。Istio 是最受欢迎、最强大、最值得信赖的服务网格。 Istio 由 Google、IBM 和 Lyft 于 2016 年创立,是云原生计算基金会的一个毕业项目, 与 Kubernetes 和 Prometheus 等项目并列。

Istio 可确保云原生和分布式系统具有弹性,帮助现代企业在保持连接和保护的同时跨不同平台维护其工作负载。 它启用安全和治理控制,包括 mTLS 加密、策略管理和访问控制、 支持网络功能,例如金丝雀部署、A/B 测试、负载平衡、故障恢复, 并增加对整个资产流量的可观察性。

Istio 并不局限于单个集群、网络或运行时的边界——在 Kubernetes 或 VM、多云、混合或本地上运行的服务都可以包含在单个网格中。

Istio 经过精心设计,具有可扩展性,并受到贡献者和合作伙伴的广泛生态系统的支持, 它为各种用例提供​​打包的集成和分发。您可以独立安装 Istio,也可以选择由提供基于 Istio 的解决方案的商业供应商提供的托管支持。

快速入门

https://istio.io/latest/zh/docs/overview/quickstart/

Istio 有两种主要模式:Ambient 模式和 Sidecar 模式

  • Ambient 模式是一种全新改进的模型, 旨在弥补 Sidecar 模式的不足。在 Ambient 模式下,每个节点都会安装一个安全隧道, 您可以选择安装代理(通常按命名空间安装)来启用其全部功能。
  • Sidecar 模式是 Istio 于 2017 年首创的传统服务网格模型。在 Sidecar 模式下, 代理会与每个 Kubernetes Pod 或其他工作负载一起部署。

Istio 社区的大部分精力都投入到了 Ambient 模式的改进上, 尽管 Sidecar 模式仍然得到全面支持。任何贡献给项目的主要新功能都有望在两种模式下运行。

一般来说,我们建议新用户从 Ambient 模式开始。它速度更快、 成本更低,而且更易于管理。有些高级用例仍然需要使用 Sidecar 模式, 但弥补这些不足是我们 2025 年路线图上的目标。

Ambient模式(k8s集群下)

https://istio.io/latest/zh/docs/ambient/getting-started/

本指南可让您快速评估 Istio 的 Ambient 模式。 您需要一个 Kubernetes 集群才能继续。如果您没有集群, 则可以使用 kind 或任何其他受支持的 Kubernetes 平台。

这些步骤要求您拥有一个集群, 其中运行 Kubernetes 受支持的版本 (1.29, 1.30, 1.31, 1.32, 1.33)。

下载 Istio CLI

Istio 使用名为 istioctl 的命令行工具进行配置。下载该工具以及 Istio 示例应用程序:

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

通过打印版本的命令来检查您是否能够运行 istioctl。 此时,Istio 尚未安装在您的集群中,因此您将看到没有 Pod 就绪。

$ istioctl version

Istio is not present in the cluster: no running Istio pods in namespace "istio-system" client version: 1.27.1

将 Istio 安装到你的集群上

istioctl 支持多种配置文件, 其中包含不同的默认选项,并可根据您的生产需求进行自定义。 ambient 配置文件中包含对 Ambient 模式的支持。使用以下命令安装 Istio:

$ istioctl install --set profile=ambient --skip-confirmation

安装完成后,您将看到以下输出,表明所有组件已成功安装。

✔ Istio core installed
✔ Istiod installed
✔ CNI installed
✔ Ztunnel installed
✔ Installation complete

安装 Kubernetes Gateway API CRD

您将使用 Kubernetes Gateway API 来配置流量路由。

请注意,Kubernetes Gateway API CRD 不会默认安装在大多数 Kubernetes 集群上, 因此请确保在使用 Gateway API 之前已安装好这些 CRD:

$ kubectl get crd gateways.gateway.networking.k8s.io &> /dev/null || \ kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.3.0/standard-install.yaml

SideCar模式(k8s集群下)

https://istio.io/latest/zh/docs/setup/getting-started/

您需要一个 Kubernetes 集群才能继续。如果您没有集群, 则可以使用 kind 或任何其他受支持的 Kubernetes 平台。

  1. 下载并安装 Istio
  2. 安装 Kubernetes Gateway API CRD
  3. 部署示例应用
  4. 对外开放应用
  5. 查看仪表板

下载 Istio

  1. 转到 Istio 发布页面,下载适用于您操作系统的安装文件, 或自动下载并获取最新版本(Linux 或 macOS):

     

    $ curl -L https://istio.io/downloadIstio | sh -

  2. 转到 Istio 包目录。例如,如果包是 istio-1.27.1

     

    $ cd istio-1.27.1

    安装目录包含:

    • samples/ 目录下的示例应用
    • bin/ 目录下的 istioctl 客户端可执行文件。
  3. 将 istioctl 客户端添加到路径(Linux 或 macOS):

     

    $ export PATH=$PWD/bin:$PATH

安装 Istio

在本指南中,我们使用 demo 配置文件。 选择它是为了拥有一组适合测试的默认设置,但还有其他配置文件可用于生产、 性能测试或 OpenShift。

与 Istio Gateway 不同, 创建 Kubernetes Gateway 时, 默认情况下还会部署网关代理服务器。 由于不会使用它们,因此我们禁用通常作为 demo 配置文件的一部分安装的默认 Istio Gateway 服务的部署。

  1. 使用 demo 配置文件安装 Istio,无需任何 Gateway:

     

    $ istioctl install -f samples/bookinfo/demo-profile-no-gateways.yaml -y

    ✔ Istio core installed ✔ Istiod installed ✔ Installation complete Made this installation the default for injection and validation.

  2. 给命名空间添加标签,指示 Istio 在部署应用的时候,自动注入 Envoy Sidecar 代理:

     

    $ kubectl label namespace default istio-injection=enabled

    namespace/default labeled

安装 Kubernetes Gateway API CRD

Kubernetes Gateway API CRD 在大多数 Kubernetes 集群上不会默认安装, 因此请确保在使用 Gateway API 之前已安装它们。

  1. 如果 Gateway API CRD 尚不存在,请安装它们:

     

    $ kubectl get crd gateways.gateway.networking.k8s.io &> /dev/null || \ { kubectl kustomize "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v1.3.0" | kubectl apply -f -; }

部署示例应用

您已将 Istio 配置为将 Sidecar 容器注入到您在 default 命名空间中部署的任何应用程序中。

  1. 部署 Bookinfo 示例应用:

     

    $ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml

    service/details created serviceaccount/bookinfo-details created deployment.apps/details-v1 created service/ratings created serviceaccount/bookinfo-ratings created deployment.apps/ratings-v1 created service/reviews created serviceaccount/bookinfo-reviews created deployment.apps/reviews-v1 created deployment.apps/reviews-v2 created deployment.apps/reviews-v3 created service/productpage created serviceaccount/bookinfo-productpage created deployment.apps/productpage-v1 created

    应用很快会启动起来。当每个 Pod 准备就绪时,Istio Sidecar 将伴随应用一起部署。

     

    $ kubectl get services

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE details ClusterIP 10.0.0.212 <none> 9080/TCP 29s kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 25m productpage ClusterIP 10.0.0.57 <none> 9080/TCP 28s ratings ClusterIP 10.0.0.33 <none> 9080/TCP 29s reviews ClusterIP 10.0.0.28 <none> 9080/TCP 29s

     

    $ kubectl get pods

    NAME READY STATUS RESTARTS AGE details-v1-558b8b4b76-2llld 2/2 Running 0 2m41s productpage-v1-6987489c74-lpkgl 2/2 Running 0 2m40s ratings-v1-7dc98c7588-vzftc 2/2 Running 0 2m41s reviews-v1-7f99cc4496-gdxfn 2/2 Running 0 2m41s reviews-v2-7d79d5bd5d-8zzqd 2/2 Running 0 2m41s reviews-v3-7dbcdcbc56-m8dph 2/2 Running 0 2m41s

    请注意,Pod 显示 READY 2/2,确认它们具有应用程序容器和 Istio Sidecar 容器。

  2. 通过检查响应中的页面标题来验证应用程序是否在集群内运行:

     

    $ kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"

    <title>Simple Bookstore App</title>

对外开放应用

Bookinfo 应用程序已部署,但无法从外部访问。为了使其可访问, 您需要创建一个 Ingress Gateway,它将路径映射到网格边缘的路由。

  1. 为 Bookinfo 应用创建 Kubernetes Gateway:

     

    $ kubectl apply -f samples/bookinfo/gateway-api/bookinfo-gateway.yaml

    gateway.gateway.networking.k8s.io/bookinfo-gateway created httproute.gateway.networking.k8s.io/bookinfo created

    默认情况下,Istio 会为网关创建一个 LoadBalancer 服务。 由于我们将通过隧道访问此网关,因此不需要负载均衡器。 如果您想了解如何为外部 IP 地址配置负载均衡器, 请阅读 Ingress Gateway 文档。

  2. 通过注解网关将服务类型更改为 ClusterIP

     

    $ kubectl annotate gateway bookinfo-gateway networking.istio.io/service-type=ClusterIP --namespace=default

  3. 要检查网关的状态,请运行:

     

    $ kubectl get gateway

    NAME CLASS ADDRESS PROGRAMMED AGE bookinfo-gateway istio bookinfo-gateway-istio.default.svc.cluster.local True 42s

访问应用程序

您将通过刚刚配置的网关连接到 Bookinfo productpage 服务。 要访问网关,您需要使用 kubectl port-forward 命令:

 

$ kubectl port-forward svc/bookinfo-gateway-istio 8080:80

打开浏览器并导航到 http://localhost:8080/productpage 以查看 Bookinfo 应用程序。

Bookinfo 应用程序

Bookinfo 应用程序

如果您刷新页面,您应该会看到书评和评分发生变化, 因为请求分布在 reviews 服务的不同版本上。

查看仪表板

Istio 和几个遥测应用做了集成。 遥测能帮您了解服务网格的结构、展示网络的拓扑结构、分析网格的健康状态。

使用下面说明部署 Kiali 仪表板、 以及 Prometheus、 Grafana、 还有 Jaeger。

  1. 安装 Kiali 和其他插件,等待部署完成。

     

    $ kubectl apply -f samples/addons $ kubectl rollout status deployment/kiali -n istio-system

    Waiting for deployment "kiali" rollout to finish: 0 of 1 updated replicas are available... deployment "kiali" successfully rolled out

  2. 访问 Kiali 仪表板。

     

    $ istioctl dashboard kiali

  3. 在左侧的导航菜单,选择 Graph, 然后在 Namespace 下拉列表中,选择 default

    要查看追踪数据,必须向服务发送请求。请求的数量取决于 Istio 的采样率。 采样率在安装 Istio 时设置,默认采样速率为 1%。在第一个跟踪可见之前,您需要发送至少 100 个请求。 使用以下命令向 productpage 服务发送 100 个请求:

     

    $ for i in $(seq 1 100); do curl -s -o /dev/null "http://$GATEWAY_URL/productpage"; done

    Kiali 仪表板展示了网格的概览以及 Bookinfo 示例应用的各个服务之间的关系。 它还提供过滤器来可视化流量的流动。

    Kiali 仪表板

    Kiali 仪表板

后续步骤

恭喜您完成了评估安装!

对于新手来说,以下这些任务是非常好的学习资源, 可以借助 demo 安装更深入评估 Istio 的特性:

  • 请求路由
  • 错误注入
  • 流量切换
  • 查询指标
  • 可视化指标
  • 访问外部服务
  • 可视化网格

在您为生产系统定制 Istio 之前,请先参阅这些学习资源:

  • 部署模型
  • 部署的最佳实践
  • Pod 的要求
  • 通用安装说明

加入 Istio 社区

我们欢迎您加入 Istio 社区, 提出问题,并给我们以反馈。

卸载

要删除 Bookinfo 示例应用和配置,请参阅清理 Bookinfo。

Istio 卸载程序按照层次结构逐级地从 istio-system 命令空间中删除 RBAC 权限和所有资源。对于不存在的资源报错, 可以安全地忽略掉,毕竟它们已经被分层地删除了。

 

$ kubectl delete -f samples/addons $ istioctl uninstall -y --purge

命名空间 istio-system 默认情况下并不会被移除。 不需要的时候,使用下面命令移除它:

 

$ kubectl delete namespace istio-system

指示 Istio 自动注入 Envoy Sidecar 代理的标签默认也不移除。 不需要的时候,使用下面命令移除它。

 

$ kubectl label namespace default istio-injection-

如果您安装了 Kubernetes Gateway API CRD 并且现在想要删除它们,请运行以下命令之一:

  • 如果您运行的任何任务需要实验版本的 CRD:

     

    $ kubectl kustomize "github.com/kubernetes-sigs/gateway-api/config/crd/experimental?ref=v1.3.0" | kubectl delete -f -

  • 否则:

     

    $ kubectl kustomize "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v1.3.0" | kubectl delete -f -

相关内容

无需 Gateway API 开始使用

使用旧式 Istio API 尝试 Istio 的功能。

Helm 变更

关于 Istio 1.1 和 Istio 1.2 之间的 Helm chart 安装选项的变更。

Helm 安装参数变动表

本文详细介绍了 Istio 1.0 系列到 Istio 1.1 系列之间的安装参数变化详情。

Helm 安装参数变动表

本文详细介绍了 Istio 1.2 系列到 Istio 1.3 系列之间的安装参数变化详情。

安装 Gateway

安装和定制 Istio Gateway。

在 Istio 中使用 Kubernetes 原生 Sidecar

使用 Istio 演示新的 SidecarContainers 功能。

http://www.dtcms.com/a/400052.html

相关文章:

  • wordpress 分享后可见福州短视频seo方法
  • 网站模板下载 网盘枣庄企业网站建设
  • 网站必须做ipv6自定义图片 wordpress
  • CherryStudio+cpolar:让智能工作流突破组织边界
  • count down 87 days
  • 一家专门做开网店的网站中国网评中国网评
  • C++相关概念与语法基础——C基础上的改进与优化
  • 淘宝客做网站自动更新燕莎网站建设
  • 重庆市工程造价信息价查询外包网络优化
  • 做网站后期费用备案个人网站 淘宝客
  • 电视台视频网站建设方案无锡企业网站的建设
  • 数据结构初阶——AVL树的实现(C++)
  • 【计算机通识】IoT 是什么、如何工作、关键技术、应用场景、挑战与趋势
  • php网站开发手机绑定谷歌推广外包
  • 如何面试网站开发学校网站建设与管理
  • 青岛网站建设咨询wordpress head.php
  • 企业网站管理系统网页制作模板的网站免费
  • 【Shell】Shell脚本基础知识
  • 北京seo推广清远网站推广优化公司
  • 基于STM32单片机远程浇花花盆GSM短信浇水补光设计
  • 丘里奇网站排名黑龙江省建设教育协会网站
  • 【汽车篇】AI深度学习在汽车焊缝3D视觉检测的应用
  • 上海专业高端网站建佳城建站 网站
  • RNN 与 LSTM:解密序列数据的 “记忆大师”
  • 【力扣LeetCode】 1422_分割字符串的最大得分
  • 东莞企业网站推广公司可以看任何网站的浏览器
  • SQL,使用递归 CTE 删除层级菜单项
  • wordpress做英文站怎样做一个网站
  • 泰安本地网站南宁网站建设公司比优建站
  • 做视频上什么网站找创意青岛福瀛建设集团有限公司网站