第一章 服务网格基本概念

Istio实践之基本概念


前言

云原生概念的兴起、业务的日益复杂、安全事件的层出不穷,一个公司,一个企业如何能够紧跟时代,如何能够进行服务有效治理。这需要一个统一的服务流量管理组件


一、服务网格是什么?

服务网格(Service Mesh),用于简化服务的治理,包括服务调用之间的流量路由与拆分管理、服务间通信的认证安全以及网格可观测性能力,从而极大地减轻开发与运维的工作负担,这里我们使用Istio产品来进行讲解,现在业界有很多服务网格,像kuma、zuul,鉴于篇幅有限,此处不一一介绍。

二、为什么需要服务网格?

1.流量管理

一个请求,到底应该请求到那个业务,那个版本,是到灰度环境呢,还是到正式呢,想对某些接口进行特殊转发,又怎么做呢?
很多人都会说用Nginx可以实现这些需求,今天我们说的是一个和k8s、云原生流量管理组件—istio

下面看一段示例配置,清楚的展示了那些接口请求那个服务(host)

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: bookinfo
  namespace: default
spec:
  gateways:
    - bookinfo-gateway
  hosts:
    - '*'
  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
    - match:
        - uri:
            prefix: /get
      route:
        - destination:
            host: httpbin
            port:
              number: 8000
  

2.传输安全

istio中可以使用身份认证、授权策略来实现 请求加密和服务访问控制
以下配置 为deafult空间所有请求必须使用mTLS模式

apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: default
  namespace: default
spec:
  mtls:
    mode: STRICT


3.网络可视化

Istio可以很直观的看到服务之间调用、数据流向,利于服务治理
如下:
kiali可视化

三、服务网格能做什么?

服务网格,主要适用于需要对应用服务进行流量管理、安全管理、故障恢复、观测监控以及微服务架构迁移的应用场景,可以实现敏捷开发和部署落地,加速企业业务迭代。

四、服务网格基本名词

控制平面(Control Plane)

从架构设计上来看,Istio 服务网格逻辑上分为控制平面和数据平面两部分。控制平面负责管理和配置代理,从而实现路由流量。

数据平面(Data Plane)

数据平面由一组以 Sidecar 方式部署的智能代理(Envoy)组成,负责调节和控制微服务以及 Mixer 之间所有的网络通信。

命名空间(Namespace)

命名空间为 Kubernetes 集群提供虚拟的隔离作用。Kubernetes 集群初始有 3 个命名空间,分别是默认命名空间 default、系统命名空间 kube-system 和 kube-public,管理员可以创建新的命名空间以满足需求。通过服务网格ASM控制台或者使用ASM Kubeconfig定义的命名空间隶属于ASM实例本身,与该ASM管理的数据平面集群是独立的,因此ASM托管的控制平面的命名空间可以与数据平面集群的命名空间存在不同的情况。即在服务网格ASM控制台新增或者删除命名空间,并不会影响数据平面Kubernetes集群的命名空间。

虚拟服务(Virtual Service)

作为 Istio 自定义资源之一,虚拟服务(VirtualService)定义了一系列针对指定服务的流量路由规则。每个路由规则都针对特定协议定义流量匹配规则。如果流量符合这些特征,就会根据规则发送到服务注册表中的目标服务(或者目标服务的子集或版本)。

目标规则(Destination Rule)

作为 Istio 自定义资源之一,目标规则(DestinationRule)定义了在路由发生后应用于服务的流量策略。这些规则指定负载均衡的配置、来自 Sidecar 代理的连接池大小以及异常检测设置,从而实现从负载均衡池中检测和驱逐不健康的主机。

Istio 网关(Gateway)

作为 Istio 自定义资源之一,Istio 网关(Gateway)定义了在网格出入口操作的负载均衡器,用于接收传入或传出的 HTTP/TCP 连接。它描述了需要公开的一组端口、要使用的协议类型、负载均衡器的 SNI 配置等信息。

服务条目(Service Entry)

作为 Istio 自定义资源之一,服务条目(ServiceEntry)是用于将一个服务添加到 Istio 抽象模型或服务注册表中,这些注册的服务是由 Istio 内部维护的。添加服务条目后,Envoy 代理可以将流量发送到该服务,如同这个添加的服务条目是网格中的其他服务一样。

入口网关服务(IngressGateway Service)

与 Istio 网关(Gateway)概念容易混淆的入口网关服务并不是指 Istio 自定义资源,而是指 Kubernetes 服务。它是真实的入口网关服务的抽象,后面由对应的容器来提供支持。通过ASM 创建一个入口网关服务时,会部署一个 Kubernetes 服务和 Deployment 资源到用户集群中。

对等身份认证 (Peer authentication)

对等身份验证策略指定 Istio 对目标工作负载强制执行的双向 TLS 模式。支持以下模式:

· PERMISSIVE:工作负载接受双向 TLS 和纯文本流量。当没有 sidecar 的工作负载无法使用双向 TLS 时,此模式在迁移期间最有用。一旦使用 · · sidecar 注入迁移工作负载,您应该将模式切换为 STRICT。
· STRICT:工作负载只接受双向 TLS 流量。
· DISABLE:禁用双向 TLS。从安全角度来看,除非您提供自己的安全解决方案,否则不应使用此模式。
当模式未设置时,将继承父作用域的模式。未设置模式的全网对等体认证策略PERMISSIVE默认使用该模式。

授权策略 (Authorization policies)

Istio 的授权功能为网格中的工作负载提供网格、命名空间和工作负载范围的访问控制。这种控制级别提供了以下好处:

工作负载到工作负载和最终用户到工作负载的授权。
一个简单的API:它包含一个单一的AuthorizationPolicyCRD,易于使用和维护。
灵活的语义:操作员可以在 Istio 属性上定义自定义条件,并使用 CUSTOM、DENY 和 ALLOW 操作。
高性能:Istio 授权(ALLOW和DENY)在 Envoy 上本地强制执行。
高兼容性:原生支持 gRPC、HTTP、HTTPS 和 HTTP/2,以及任何普通的 TCP 协议。


下一章 服务如何接入Istio


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海盗巨人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值