云原生专栏大纲

文章目录

    • 安装Istio
    • 卸载Istio
    • 启用istio
    • 命名空间自动注入istio
    • 测试istio自动注入
    • istio规则
    • 自制应用实现业务系统灰度发布
    • devops如何集成Istio?

安装Istio

官网参考:KubeSphere Container Platform
需安装servicemesh组件,参考《16.云原生之kubesphere组件安装卸载》

下面是对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.gzmv istioctl /usr/local/bin# 验证istioctl version
  1. 卸载
istioctl x uninstall --purgekubectl -n istio-system delete kiali kialihelm -n istio-system delete kiali-operatorkubectl -n istio-system delete jaeger jaegerhelm -n istio-system delete jaeger-operator
  1. 验证
# kubectl get all -n istio-systemNo 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-systemkube-apiserver-ksmaster211/1 Running 28 (7h59m ago) 39dkube-apiserver-ksmaster221/1 Running 25 (4h55m ago) 39dkube-apiserver-ksmaster231/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-apiserverkubectl 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-injectionoperator: 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.ionamespaceSelector:matchExpressions:- key: istio.io/revoperator: Invalues: # 用于选择具有特定 Istio 版本的命名空间- 1-11-2- key: istio-injection operator: Invalues: # 启用了注入的命名空间将被选择- enabledobjectSelector:matchExpressions:- key: sidecar.istio.io/injectoperator: NotInvalues:- "false"

命名空间自动注入istio

  1. 查看namespace的lables
# kubectl get namespace --show-labelsNAME STATUS AGE LABELSspring-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=enabledkubectl label namespace <namespace> istio.io/rev=1-11-2

测试istio自动注入

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

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 实现微服务的灰度发布


devops如何集成Istio?

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