Istio入门
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Istio入门相关的知识,希望对你有一定的参考价值。
Istio 在逻辑上分为数据平面和控制平面。
数据平面,由一组高性能的智能代理(基于 Envoy 改进的 istio-proxy)组成,它们控制和协调了被代理服务的所有网络通信,同时也负责收集和上报相关的监控数据。
控制平面,负责制定应用策略来控制网络流量的路由。
Istio 由多个组件组成,核心组件及其作用为如下:
Ingressgateway,控制外部流量访问 Istio 内部的服务。
Egressgateway,控制 Istio 内部访问外部服务的流量。
Pilot,负责管理服务网格内部的服务和流量策略。它将服务信息和流量控制的高级路由规则在运行时传播给 Proxy,并将特定平台的服务发现机制抽象为 Proxy 可使用的标准格式。
Citadel,提供身份认证和凭证管理。
Galley,负责验证、提取、处理和分发配置。
Proxy,作为服务代理,调节所有 Service Mesh 单元的入口和出口流量。
这其中 Proxy 属于数据平面,以 Sidecar 的方式与应用程序一同部署到 Pod 中,而 Pilot、Citadel 和 Galley 属于控制平面。
除此之外,Istio 中还提供一些额外的插件,如 grafana、istio-tracing、kiali 和 prometheus,用于进行可视化的数据查看、流量监控和链路追踪等。
Pilot:Istio 控制面中最核心的模块,负责运行时配置下发,具体来说,就是和 Envoy 之间基于 xDS 协议进行的各种
Citadel:负责证书的分发和轮换,使
Galley:配置信息的格式和正确性校验,将配置信息提供给
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入门的主要内容,如果未能解决你的问题,请参考以下文章