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

云原生专栏大纲

文章目录

安装Istio

官网参考:KubeSphere Container Platform

需安装servicemesh组件,参考《16.云原生之kubesphere组件安装卸载》

下面是对istiod、jaeger-operator-metrics、jaeger-collector、jaeger-query、kiali和jaeger-collector-headless的简要介绍的表格输出:

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

卸载Istio

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

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

yaml 复制代码
tar -xvf istioctl-1.11.2-linux-amd64.tar.gz
mv istioctl /usr/local/bin
# 验证
istioctl version
  1. 卸载
yaml 复制代码
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. 验证
yaml 复制代码
# 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

yaml 复制代码
--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
yaml 复制代码
# 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. 修改自动注入策略
bash 复制代码
kubectl -n istio-system edit MutatingWebhookConfiguration istio-sidecar-injector-1-11-2

默认策略配置如下:

yaml 复制代码
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" 的对象。

修改配置如下:

yaml 复制代码
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
bash 复制代码
# 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自动注入
yaml 复制代码
kubectl label namespace <namespace> istio-injection=enabled
kubectl 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

yaml 复制代码
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 应用,小编将在接下来章节实战介绍。

相关推荐
Lyqfor3 小时前
云原生学习
java·分布式·学习·阿里云·云原生
Smile丶凉轩6 小时前
微服务即时通讯系统的实现(客户端)----(1)
微服务·云原生·架构
南慕小白6 小时前
云原生后端
云原生
小安运维日记7 小时前
CKA认证 | Day3 K8s管理应用生命周期(上)
运维·云原生·容器·kubernetes·云计算·k8s
politeboy9 小时前
关于k8s中镜像的服务端口被拒绝的问题
云原生·容器·kubernetes
weixin_438197389 小时前
K8S创建云主机配置docker仓库
linux·云原生·容器·eureka·kubernetes
ggaofeng20 小时前
通过命令学习k8s
云原生·容器·kubernetes
qq_道可道1 天前
K8S升级到1.24后,切换运行时导致 dind 构建镜像慢根因定位与解决
云原生·容器·kubernetes
郝同学的测开笔记1 天前
云原生探索系列(十二):Go 语言接口详解
后端·云原生·go
mit6.8241 天前
[Docker#5] 镜像仓库 | 命令 | 实验:搭建Nginx | 创建私有仓库
linux·后端·docker·云原生