Istioldie 1.18 / 安装指南
基于Kubernetes的Istio的微服务架构需要安装以下组件:
- Istio控制平面组件:包括Istio-Pilot、Istio-Policy、Istio-Telemetry等。这些组件负责微服务的管理和配置,如流量管理、策略执行、遥测数据收集等。
- 数据平面组件:主要是Envoy代理,它被部署为Sidecar容器与每个微服务一同运行。Envoy负责微服务之间的网络通信,实现负载均衡、服务发现、故障恢复等功能。
- 可选的增值组件:如Jaeger用于调用链追踪,Kiali用于服务网格的可视化观察,Prometheus和Grafana用于监控和度量数据收集和展示。这些组件能够增强Istio的观测性,帮助开发者更好地理解和管理微服务网格。
应用程序要求
参考:Istioldie 1.18 / 应用程序要求
在部署启用 Istio 的应用程序时,需要特别注意 Istio Sidecar 模型造成的影响。
Pod 要求
作为 Istio 服务网格中的一部分,Kubernetes 集群中的 Pod 和 Service 必须满足以下要求:
-
Service 关联:不管一个 Pod 是否对外暴露端口,每个 Pod 必须至少属于一个 Kubernetes Service。假如一个 Pod 同时属于多个 Kubernetes Service,那么它不能在不同 Service 的端口号上使用不同的协议(比如 HTTP 和 TCP)。
-
应用 UID:确保您的 Pod 不会被 ID(UID)为
1337
的用户运行应用,因为1337
是为 Sidecar 代理保留的。 -
NET_ADMIN
和NET_RAW
权限:如果您的集群强制执行了 Pod 安全策略,必须给 Pod 配置NET_ADMIN
和NET_RAW
权限。如果您使用 Istio CNI 插件,可以不配置。 -
要列出服务账户的权限,请在下面的命令中用你的值替换
<your namespace>
和<your service account>
。
-
带有 app 和 version 标签(label)的 pod:我们建议显式地给 Deployment 加上
app
和version
标签。给使用 KubernetesDeployment
部署的 Pod 部署配置中增加这些标签,可以给 Istio 收集的指标和遥测信息中增加上下文信息。-
app
标签:每个部署配置应该有一个不同的app
标签并且该标签的值应该有一定意义。app
label 用于在分布式追踪中添加上下文信息。 -
version
标签:这个标签用于在特定方式部署的应用中表示版本。
-
Istio 使用的端口
Istio sidecar 代理(Envoy)使用以下端口和协议。
Istio 控制平面(istiod)使用以下端口和协议。
使用 Helm 安装
参考:Istioldie 1.18 / 使用 Helm 安装
请遵循本指南使用 Helm 安装和配置 Istio 网格。
先决条件
-
执行任何必要的特定于平台的设置。
-
检查 Pod 和服务的要求。
-
安装 Helm 客户端 3.6 或更高的版本。
helm version
4.配置 Helm 存储库:
helm repo add istio https://istio-release.storage.googleapis.com/charts
helm repo update
安装步骤
本节介绍使用 Helm 安装 Istio 的过程。Helm 安装的一般语法是:
Helm 安装的一般语法是:
$ helm install <release> <chart> --namespace <namespace> --create-namespace [--set <other_parameters>]
该命令指定的变量如下:
<chart>
一个打好包的 Chart 路径,也可以是一个未打包的 Chart 目录或 URL。<release>
一个用于标识和管理安装后的 Helm Chart 的名称。<namespace>
要安装 Chart 的命名空间。
1、为 Istio 组件,创建命名空间 istio-system
:
kubectl get namespaces
kubectl create namespace istio-system
2、安装 Istio base chart,它包含了集群范围的自定义资源定义 (CRD),这些资源必须在部署 Istio 控制平面之前安装:
helm install istio-base istio/base -n istio-system
3. 使用 helm ls
命令验证 CRD 的安装情况:
helm ls -n istio-system
在输出中找到 istio-base
的条目,并确保状态已被设置为 deployed
。
4.安装 Istio discovery chart,它用于部署 istiod
服务:
部署 istiod
Istiod( Istio Discovery) 是 Istio 服务网格的核心组件,负责控制平面功能。
istiod 具备了五大功能:
- 配置管理:负责分发和同步 Istio 配置到数据平面(Envoy 代理)。
- 服务发现:基于 Kubernetes 的 Service 和 Endpoint 信息生成服务发现数据,这些数据用于 Envoy Proxy 的负载均衡。
- 证书管理:为 Envoy Proxy 提供证书签发,以支持双向 TLS 身份验证。
- 验证和转换:验证 Istio 配置资源的正确性,并将它们转换为 Envoy Proxy 可以理解的格式。
- Envoy 代理注入:负责将 Envoy Proxy 注入到服务 Pod 中,以便进行流量拦截和路由。
helm install istiod istio/istiod -n istio-system --wait
5、验证 Istio discovery chart 的安装情况:
helm ls -n istio-system
6、获取已安装的 Helm Chart 的状态以确保它已部署:
helm status istiod -n istio-system
7、检查 istiod
服务是否安装成功,其 Pod 是否正在运行:
kubectl get deployments -n istio-system --output wide
8、(可选)安装 Istio 的入站网关:
kubectl create namespace istio-ingress
kubectl label namespace istio-ingress istio-injection=enabled
helm install istio-ingress istio/gateway -n istio-ingress --wait
一直在 timeout 没有成功过。
至于可用的配置项,你可以通过使用 helm show values istio/<chart>
来找到配置。 例如:helm show values istio/gateway
。
卸载
您可以通过卸载上述安装的 chart,以便卸载 Istio 和及其组件。
helm delete istio-ingress -n istio-ingress
kubectl delete namespace istio-ingress
helm delete istiod -n istio-system
helm delete istio-base -n istio-system
kubectl delete namespace istio-system
(可选)删除 Istio 安装的 CRD
永久删除 CRD 会移除您在集群中已创建的所有 Istio 资源。 用下面命令永久删除集群中安装的 Istio CRD:
kubectl get crd -oname | grep --color=never 'istio.io' | xargs kubectl delete
其中 kubectl get crd -oname | grep --color=never 'istio.io'
其他
kubectl get pods -n istio-system
kubectl get services -n istio-system
----------------------------------------------------------------------------------------------------
开始使用 Istio 和 Kubernetes Gateway API
大多数 Kubernetes 集群上默认并未安装 Kubernetes Gateway API CRD, 因此需要先确保安装了 Kubernetes Gateway API CRD,再使用 Gateway API:
kubectl get crd gateways.gateway.networking.k8s.io &> /dev/null || \ { kubectl kustomize "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v0.6.2" | kubectl apply -f -; }
没成功
------------------------------------------------------------------------------------------------------------------------
参考 Releases · istio/istio (github.com)
第四篇:kubernetes部署istio_k8s安装istio_kjkdd的博客-CSDN博客
1. 下载解压istio包
wget https://github.com/istio/istio/releases/download/1.19.4/istio-1.19.4-linux-amd64.tar.gz
下载时间较长
tar -zxvf istio-1.19.4-linux-amd64.tar.gz
kubectl version
2. 生成istio安装文件
#进入istio-1.15.3/bin目录 执行:./istioctl manifest generate > generated.yaml
/opt/istio-1.19.4/bin/istioctl manifest generate > generated.yaml
执行完成后会在本目录下会生成一个generated.yaml文件
注意: 执行完命令后会在本目录下生成一个generated.yaml文件,这个文件就是安装istio的配置文件(这个条命令会生成default profile的manifest文件)
没继续的命令
---------------------------------------------------------------------------
参考:Isito 入门(二):Istio 的部署-腾讯云开发者社区-腾讯云 (tencent.com)
部署 istio-ingressgateway
istio-ingressgateway (Istio Ingress Gateway )类似 Kubernetes 的 Ingress ,是 Istio 控制外部流量进入 Kubernetes 的入口组件,istio-ingressgateway 作为一个入口点,允许从服务网格外部访问服务网格内部的服务,起到了类似 nginx、apisix 等入口网关的作用。
Istio Ingress Gateway 的主要包括以下作用:
- 接收集群外部的流量,并根据 Istio 的配置将请求路由到适当的内部服务(起到网关的作用)。
- 提供负载均衡和流量控制功能,包括请求路由、重试、超时、熔断等(流量治理)。
- 支持 TLS 配置,以便在流量进入服务网格之前进行加密(给域名配置证书)。
- 支持双向 TLS 身份验证,以提高服务网格的安全性(服务间通讯)。
- 提供 Metrics、Tracing 和 Logging 收集,以便更好地观察和监控流量(需要自己安装对应的组件)。
helm install istio-ingressgateway istio/gateway -n istio-system
实际上 istio-ingressgateway 是作为一个 Kubernetes Service 对外提供访问服务。
kubectl get svc -n istio-system
由于 Istio-ingressgateway 默认使用的是 LoadBalancer ,需要公有云平台支撑,不然会一直处于 <pending>
,因此我们需要修改 Service ,将 istio-ingressway 的网络类型从 LoadBalancer 改成 NodePort,以便直接通过服务器的 IP 访问。
kubectl edit svc istio-ingressgateway -n istio-system
找到 type: LoadBalancer
,修改为 type: NodePort
istio-ingressgateway 本身包含 Kubernetes Service 、Pod,通过暴露节点端口,外部可以通过节点端口将流量打入 istio-ingressgateway 的 Pod。
流量经过 Istio 分析后,流量通过负载均衡转发到其中一个 Pod。
流量进入 Istio 之后,不需要将流量转发到 Service,但是依然需要依赖 Service。 Istio 会从 Service 中获取到所有的 Pod,然后 Istio 直接将流量转发到 Pod,实现熔断、故障处理等一系列任务。
Istio 是一个与 Kubernetes 紧密结合的服务网格(Service Mesh),用于服务治理。
Istio 是用于服务治理的,主要有流量管理、服务间安全、可观测性这几种功能。
Istio 三个主要功能
接下来介绍一下 Istio 的三个主要能力。
流量管理
流量管理包括以下功能:
- 动态服务发现
- 负载均衡
- TLS 终端
- HTTP/2 与 gRPC 代理
- 熔断器
- 健康检查
- 基于百分比流量分割的分阶段发布
- 故障注入
- 丰富的指标
可观测性
Istio 支持 Jaeger、Zipkin、Skywalking 等链路追踪中间件,支持 Prometheus 收集指标数据
安全性能
主要特点是可以实现零信任网络中的服务之间通讯加密。Istio 通过自动为服务之间的通信提供双向 TLS 加密来增强安全性,同时 Istio 还提供了强大的身份验证、授权和审计功能。
Istio 原理
Istio 可以的作用原理是拦截 Kubernetes 部署 Pod 的事件,然后从 Pod 中注入一个名为 Envoy 的容器,这个容器会拦截外部到业务应用的流量。由于所有流量都被 Envoy “劫持” 了,所以 Istio 可以对流量进行分析例如收集请求信息,以及一系列的流量管理操作,也可以验证授权信息。当 Envoy 拦截流量并执行一系列操作之后,如果请求没问题,就会转发流量到业务应用的 Pod 中。
每个 Pod 都有一个 Envoy 负责拦截、处理和转发进出 Pod 的所有网络流量,这种方式被称为 Sidecar。
Istio Sidecar 的一些主要功能:
-
流量管理:Envoy 代理可以根据 Istio 配置的路由规则(如 VirtualService 和 DestinationRule)实现流量的转发、分割和镜像等功能。
-
安全通信:Envoy 代理负责在服务之间建立安全的双向 TLS 连接,确保服务间通信的安全性。
-
遥测数据收集:Envoy 代理可以收集关于网络流量的详细遥测数据(如延迟、成功率等),并将这些数据上报给 Istio 的遥测组件,以便进行监控和分析。
-
策略执行:Envoy 代理可以根据 Istio 配置的策略规则(如 RateLimit 和 AuthorizationPolicy)执行限流、访问控制等策略。
由于 Pod 是通过 Envoy 暴露端口的,所有进出口流量都需要经过 Envoy 的检查,所以很容易判断访问来源,如果请求方不是在 Istio 中的服务,那么 Envoy 便会拒绝访问。
在 Istio 中,Envoy 这一块称为数据平面,而负责管理集群的 istiod 组件称为控制平面。