29.云原生KubeSphere服务网格实战之Istio安装配置

云原生专栏大纲

安装Istio

官网参考:KubeSphere Container Platform
需安装servicemesh组件,参考《16.云原生之kubesphere组件安装卸载》
image.png
下面是对istiod、jaeger-operator-metrics、jaeger-collector、jaeger-query、kiali和jaeger-collector-headless的简要介绍的表格输出:

组件名称描述
istiodIstio控制平面的核心组件,集成了Pilot、Citadel、Galley和Mixer等功能,提供统一的管理接口和服务。
jaeger-operator-metricsJaeger Operator Metrics是Jaeger Operator的一个组件,用于收集和存储Jaeger Operator的指标数据。
jaeger-collectorJaeger Collector负责接收和处理来自应用程序的跟踪数据,并将其存储到后端存储系统中,以供查询和分析。
jaeger-queryJaeger Query提供了查询和检索跟踪数据的接口,用户可以使用它来搜索和分析应用程序在服务网格中的请求路径和性能。
kialiKiali是一个可视化工具,用于展示和监控服务网格的拓扑图、流量图和指标数据,帮助用户理解和调试服务网格的运行状况。
jaeger-collector-headlessJaeger Collector Headless是Jaeger Collector的一种部署方式,它提供无头(headless)服务的访问接口。

卸载Istio

  1. 将 CRD ClusterConfiguration 配置文件中 ks-installer 参数的 servicemesh.enabled 字段的值从 true 改为 false。
  2. 安装istioctl

https://github.com/istio/istio/releases中查找istioctl 响应版本

tar -xvf istioctl-1.11.2-linux-amd64.tar.gz
mv istioctl /usr/local/bin
# 验证
istioctl version
  1. 卸载
istioctl x uninstall --purge

kubectl -n istio-system delete kiali kiali
helm -n istio-system delete kiali-operator

kubectl -n istio-system delete jaeger jaeger
helm -n istio-system delete jaeger-operator
  1. 验证
# kubectl get all -n istio-system
No resources found in istio-system namespace.

启用istio

  1. 修改 kube-apiserver.yaml

编辑 master 节点的 /etc/kubernetes/manifests/kube-apiserver.yaml 文件,添加MutatingAdmissionWebhook

--enable-admission-plugins=NodeRestriction,MutatingAdmissionWebhook
  1. NodeRestriction:
    NodeRestriction 插件是一个安全性插件,用于增强 Kubernetes 集群的安全性。它限制了 kube-apiserver 接受的请求,确保只有经过身份验证的 kubelet 节点才能进行请求。它通过验证请求中的证书和节点名称来实现这一目的。启用 NodeRestriction 可以防止未经授权的节点访问 Kubernetes API,提高集群的安全性。
  2. MutatingAdmissionWebhook:
    MutatingAdmissionWebhook 插件是一个 Admission 控制器,用于在创建或修改资源对象之前对其进行自动修改。它可以拦截请求并对其进行自定义的修改操作,然后将修改后的请求发送给 kube-apiserver 进行处理。这个插件通常用于实现自动化任务,例如自动注入 Sidecar 容器、自动添加标签等。启用 MutatingAdmissionWebhook 可以在资源对象创建或修改时自动执行一些操作,以便满足特定的需求或策略。
  1. 重启apiserver
# kubectl get pods -n kube-system
kube-apiserver-ksmaster21            1/1     Running   28 (7h59m ago)   39d
kube-apiserver-ksmaster22            1/1     Running   25 (4h55m ago)   39d
kube-apiserver-ksmaster23            1/1     Running   28 (11h ago)     39d

# 删除apiserver后会自动恢复
kubectl delete pod/kube-apiserver名称 -n kube-system

# 查看pod对应的yaml验证配置是否修改
kubectl get pods -n kube-system -l component=kube-apiserver
kubectl get pod kube-apiserver-ksmaster21 -o yaml -n kube-system
  1. 开启自动注入功能

istio-sidecar-injector-1-11-2 的配置字典,修改其中的policy 值为 enabled。注意修改ks-installer中servicemesh组件,policy 值会重置disabled
通过配置 policy,istio-sidecar-injector 可以根据规则自动注入 Sidecar 代理并应用所需的功能和策略,从而实现对应用程序的流量管理和安全控制。

  1. 修改自动注入策略
kubectl -n istio-system edit MutatingWebhookConfiguration istio-sidecar-injector-1-11-2

默认策略配置如下:

namespaceSelector: # (命名空间选择器):指定要应用自动注入策略的命名空间。
    # 此部分的意思是选择具有标签 istio.io/rev=1-11-2 的命名空间
    matchExpressions: # (匹配表达式):定义命名空间选择的条件列表。
    - key: istio.io/rev # 选择具有指定标签 istio.io/rev 的命名空间。
      operator: In # 使用 In 操作符表示匹配标签值等于列表中的任何一个值。
      values:
      - 1-11-2
    - key: istio-injection
      operator: DoesNotExist
  # 此部分的意思是选择所有没有设置注解 sidecar.istio.io/inject 值为 "false" 的对象
  objectSelector: # (对象选择器):指定要应用自动注入策略的对象。
    matchExpressions: # (匹配表达式):定义对象选择的条件列表。
    - key: sidecar.istio.io/inject # 选择具有指定注解 sidecar.istio.io/inject 的对象。
      operator: NotIn # 使用 NotIn 操作符表示不匹配注解值等于列表中的任何一个值
      values: # 指定要不匹配的注解值列表,这里是 "false"。
      - "false"

综合起来,上述配置的含义是:选择具有标签 istio.io/rev=1-11-2 的命名空间,并对所有没有设置注解 sidecar.istio.io/inject 值为 “false” 的对象应用自动注入策略。换句话说,这个配置将自动注入 Sidecar 容器到具有特定标签的命名空间中的所有对象,但排除了那些设置了注解 sidecar.istio.io/inject: “false” 的对象。

修改配置如下:

name: rev.namespace.sidecar-injector.istio.io
namespaceSelector:
  matchExpressions:
  - key: istio.io/rev
    operator: In
    values: # 用于选择具有特定 Istio 版本的命名空间
    - 1-11-2
  - key: istio-injection 
    operator: In
    values: # 启用了注入的命名空间将被选择
    - enabled
objectSelector:
  matchExpressions:
  - key: sidecar.istio.io/inject
    operator: NotIn
    values:
    - "false"

命名空间自动注入istio

  1. 查看namespace的lables
# kubectl get namespace <namespace>  --show-labels
NAME           STATUS   AGE     LABELS
spring-cloud   Active   4h52m   kubernetes.io/metadata.name=spring-cloud,kubesphere.io/namespace=spring-cloud,kubesphere.io/workspace=yxym-workspace
  1. namespces开启istio自动注入
kubectl label namespace <namespace> istio-injection=enabled
kubectl label namespace <namespace> istio.io/rev=1-11-2

image.png

测试istio自动注入

  1. 部署nginx测试,在pod中出现istio-proxy则表示使用了istio

image.png

istio规则

https://blog.csdn.net/qq_36464836/article/details/123500983

kubectl -n spring-cloud get destinationrules.networking.istio.io -o yaml

让我逐步解释这个命令的各个部分:

  • kubectl: 这是 Kubernetes 命令行工具,用于与 Kubernetes 集群进行交互和管理。
  • -n spring-cloud: 这是一个命令行选项,用于指定要操作的命名空间。在这个命令中,-n spring-cloud 表示要在 spring-cloud 命名空间中执行操作。
  • get destinationrules.networking.istio.io: 这是 kubectl 的 get 命令的一部分,用于获取指定类型的资源。在这个命令中,我们要获取的资源类型是 DestinationRule,该资源属于 Istio 的 Networking API 组。
  • -o yaml: 这是另一个命令行选项,用于指定输出的格式。在这个命令中,-o yaml 表示输出资源的 YAML 格式。

自制应用实现业务系统灰度发布

使用 KubeSphere 实现微服务的灰度发布

image.png
image.png

devops如何集成Istio?

cicd发布项目如何使用Istio?灰度发布我们可以通过自制应用发布项目来应用,但是感觉不够智能,能否在cicd中项目自动发布就应用上?在资源清单项目中预先定义好istio相关资源,资源清单项目参考23.云原生之ArgoCD CICD实战。要学弄明白需先学习Istio官网Bookinfo 应用,小编将在接下来章节实战介绍。

  • 18
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《云原生服务网格进阶实战PDF》是一本关于云原生服务网格技术实践的书籍,介绍了在云原生环境下如何构建和管理服务网格。本书以深入浅出的方式介绍了服务网格的基本概念、原理和工作原理,并提供了实践案例和示例代码,帮助读者更好地理解和应用服务网格技术。 本书主要包含以下内容: 1. 云原生基础知识:介绍了云原生的概念、特点和优势,以及与传统架构的区别。同时,还介绍了一些核心技术,如容器化、微服务和持续交付。 2. 服务网格概述:详细介绍了服务网格的概念、架构和组件,包括边车代理(sidecar proxy)、控制平面和数据平面。还介绍了一些主流的服务网格实现,如Istio和Linkerd。 3. 服务网格的企业应用:通过实际案例,介绍了服务网格在企业中的应用场景和解决方案。例如,如何在微服务架构中使用服务网格管理服务间的通信和负载均衡。 4. 服务网格的监控和治理:探讨了如何使用监控工具和指标来监控和管理服务网格,以及如何实现流量控制和故障恢复。 5. 服务网格的测试和部署:介绍了服务网格的测试策略和部署方法,并提供了一些实用的技巧和建议。 通过阅读《云原生服务网格进阶实战PDF》,读者能够深入了解云原生服务网格技术,掌握其设计和实施的方法和技巧。无论是初学者还是有一定经验的从业人员,都可以从中受益,并能够在云原生环境中更好地构建和管理服务网格。 ### 回答2: 《云原生服务网格进阶实战》是一本介绍和实践云原生服务网格的技术书籍。云原生服务网格是一种用于构建和管理微服务架构的工具,它可以提供服务发现、负载均衡、流量管理等功能,以确保服务的高可用性和弹性。这本书通过详细介绍云原生服务网格的原理和实践方法,帮助读者理解和掌握如何使用云原生服务网格来构建可靠的微服务系统。 《云原生服务网格进阶实战》首先介绍了云原生服务网格的概念和特点,并通过实例解释了为什么要使用云原生服务网格来构建微服务架构。然后,书中详细介绍了云原生服务网格的核心组件,包括代理、控制平面和数据平面,以及它们之间的工作原理和相互协作方式。 接下来,书中介绍了如何使用云原生服务网格来实现服务注册与发现、负载均衡、故障恢复和安全等功能。同时,书中还介绍了如何使用云原生服务网格来管理服务间的通信和流量,包括流量控制、流量镜像和流量分割等技术。 《云原生服务网格进阶实战》还提供了大量的示例和实践案例,帮助读者了解如何在实际项目中应用云原生服务网格。这些实践案例涉及各种常见的场景和问题,如如何优化服务间的通信性能、如何实现服务的灰度发布和版本控制等。 总之,《云原生服务网格进阶实战》是一本介绍和实践云原生服务网格的权威指南。通过阅读本书,读者可以全面了解云原生服务网格的原理和技术,并学会如何在实际项目中应用云原生服务网格来构建和管理可靠的微服务系统。 ### 回答3: 《云原生服务网格进阶实战 PDF》是一本讲述云原生技术中服务网格应用及实践的书籍。云原生服务网格是一种用于管理和组织服务的解决方案,提供了以微服务为基础的网络通信和管理功能。 这本书通过系统地介绍云原生服务网格的概念、架构、核心组件等,帮助读者深入理解其工作原理。同时,书中还详细介绍了服务网格的相关工具和技术,如Istio、Envoy等,以及如何在实际项目中应用和配置它们。 书中包含了丰富的实例和案例,以帮助读者更好地理解和应用云原生服务网格实战部分涵盖了服务网格安装配置、监控和故障排除等方面。读者可以通过跟随书中的指引和示例,逐步构建和管理一个具有高可用性、高可扩展性的服务网格架构。 此外,书中还介绍了服务网格在不同场景和行业中的应用实践,如微服务架构、容器化部署、跨云服务等。通过学习这些实践,读者可以更好地理解服务网格的整体思想和实际应用。 总的来说,《云原生服务网格进阶实战 PDF》是一本对于云原生服务网格感兴趣的读者来说非常有价值的书籍。它系统地介绍了服务网格的相关概念、技术和实践,为读者提供了深入学习和应用云原生技术的指导和手册。无论是初学者还是有经验的开发人员,都可以从中获得实用的知识和技巧,提升对云原生服务网格的理解和应用能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值