基于Kubernetes的Istio的微服务架构需要安装以下组件:
在部署启用 Istio 的应用程序时,需要特别注意 Istio Sidecar 模型造成的影响。
作为 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 插件,可以不配置。
要列出服务账户的权限,请在下面的命令中用你的值替换
和
。
带有 app 和 version 标签(label)的 pod:我们建议显式地给 Deployment 加上 app
和 version
标签。给使用 Kubernetes Deployment
部署的 Pod 部署配置中增加这些标签,可以给 Istio 收集的指标和遥测信息中增加上下文信息。
app
标签:每个部署配置应该有一个不同的 app
标签并且该标签的值应该有一定意义。app
label 用于在分布式追踪中添加上下文信息。
version
标签:这个标签用于在特定方式部署的应用中表示版本。
Istio sidecar 代理(Envoy)使用以下端口和协议。
Istio 控制平面(istiod)使用以下端口和协议。
参考: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
该命令指定的变量如下:
一个打好包的 Chart 路径,也可以是一个未打包的 Chart 目录或 URL。
一个用于标识和管理安装后的 Helm Chart 的名称。
要安装 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( Istio Discovery) 是 Istio 服务网格的核心组件,负责控制平面功能。
istiod 具备了五大功能:
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/
来找到配置。 例如: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
永久删除 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
----------------------------------------------------------------------------------------------------
大多数 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博客
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
#进入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 Ingress Gateway )类似 Kubernetes 的 Ingress ,是 Istio 控制外部流量进入 Kubernetes 的入口组件,istio-ingressgateway 作为一个入口点,允许从服务网格外部访问服务网格内部的服务,起到了类似 nginx、apisix 等入口网关的作用。
Istio Ingress Gateway 的主要包括以下作用:
helm install istio-ingressgateway istio/gateway -n istio-system
实际上 istio-ingressgateway 是作为一个 Kubernetes Service 对外提供访问服务。
kubectl get svc -n istio-system
由于 Istio-ingressgateway 默认使用的是 LoadBalancer ,需要公有云平台支撑,不然会一直处于
,因此我们需要修改 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 支持 Jaeger、Zipkin、Skywalking 等链路追踪中间件,支持 Prometheus 收集指标数据
安全性能
主要特点是可以实现零信任网络中的服务之间通讯加密。Istio 通过自动为服务之间的通信提供双向 TLS 加密来增强安全性,同时 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 组件称为控制平面。