Istio入门

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Istio入门相关的知识,希望对你有一定的参考价值。

Istio 在逻辑上分为数据平面和控制平面。

数据平面,由一组高性能的智能代理(基于 Envoy 改进的 istio-proxy)组成,它们控制和协调了被代理服务的所有网络通信,同时也负责收集和上报相关的监控数据。

控制平面,负责制定应用策略来控制网络流量的路由。

Istio 由多个组件组成,核心组件及其作用为如下:

Ingressgateway,控制外部流量访问 Istio 内部的服务。

Egressgateway,控制 Istio 内部访问外部服务的流量。

Pilot,负责管理服务网格内部的服务和流量策略。它将服务信息和流量控制的高级路由规则在运行时传播给 Proxy,并将特定平台的服务发现机制抽象为 Proxy 可使用的标准格式。

Citadel,提供身份认证和凭证管理。

Galley,负责验证、提取、处理和分发配置。

Proxy,作为服务代理,调节所有 Service Mesh 单元的入口和出口流量。

Istio入门_ide

 

 

这其中 Proxy 属于数据平面,以 Sidecar 的方式与应用程序一同部署到 Pod 中,而 Pilot、Citadel 和 Galley 属于控制平面。

除此之外,Istio 中还提供一些额外的插件,如 grafana、istio-tracing、kiali 和 prometheus,用于进行可视化的数据查看、流量监控和链路追踪等。

 

Pilot:Istio 控制面中最核心的模块,负责运行时配置下发,具体来说,就是和 Envoy 之间基于 xDS 协议进行的各种

 

Citadel:负责证书的分发和轮换,使

 

Galley:配置信息的格式和正确性校验,将配置信息提供给

Istio入门_Pod_02

 

Istio 通过 Galley 模块管理配置,Pilot 模块解析配置为 xDS 协议格式,通过 gRPC 和 Envoy 进行通信,以便完成配置和节点信息更新,pilot-agent 作为 Envoy 守护模块,保证 Envoy 的正常运行和平滑重启。

本地业务服务

实例服务原理解析

apiVersion: v1
kind: Service
metadata:
name: productpage
labels:
app: productpage
service: productpage
spec:
ports:
- port: 9080
name: http
selector:
app: productpage

首先定义了一个,而

这样就可以通过服务名访问这些后端 IP,而不用感知后端 Pod IP 的变化。

然后在

接下来,通过

当然一些常规的镜像拉取地址和拉取方式也做了定义:

 

apiVersion: apps/v1
kind: Deployment
metadata:
name: productpage-v1
labels:
app: productpage
version: v1
spec:
replicas: 1
selector:
matchLabels:
app: productpage
version: v1
template:
metadata:
labels:
app: productpage
version: v1
spec:
serviceAccountName: bookinfo-productpage
containers:
- name: productpage
image: docker.io/istio/examples-bookinfo-productpage-v1:1.16.2
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9080
volumeMounts:
- name: tmp
mountPath: /tmp
volumes:
- name: tmp
emptyDir:

 

另外在

下一步,用到了 Ingress 模式。定义一组网关类型的资源, Istio 通过 Gateway 将服务发布成外部可访问的服务,通过

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: bookinfo-gateway
spec:
selector:
istio: ingressgateway # use istio default controller
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"

在这里,Gateway 资源类型,需要配合 VirtualService 类型的资源一起使用。那么,定义匹配到的 URI 具体路由到哪个服务呢?

在这个程序中可以看到匹配到 /productpage 路径的服务,而

 

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: bookinfo
spec:
hosts:
- "*"
gateways:
- bookinfo-gateway
http:
- match:
- uri:
exact: /productpage
- uri:
prefix: /static
- uri:
exact: /login
- uri:
exact: /logout
- uri:
prefix: /api/v1/products
route:
- destination:
host: productpage
port:
number: 9080

 

 

 

 

 

 

以上是关于Istio入门的主要内容,如果未能解决你的问题,请参考以下文章

Envoy 及 Istio 中的 xDS REST 和 gRPC 协议详解

Istio入门

Istio CRD和Helm Chart配置大全

K8s:渐进式入门服务网格 Istio

Istio1.12:安装和快速入门

Istio 大入门 — Egress Gateway