Istio:Gateway设计与实现

简介: Istio:Gateway设计与实现

目录

  • Gateway简介
  • Gateway vs Kubernetes Ingress
  • Gateway原理及实现

Gateway简介

在Istio中, Gateway控制着网格边缘的服务暴露。

Gateway也可以看作网格的负载均衡器, 提供以下功能:

  • 1) L4-L6的负载均衡
  • 2) 对外的mTLS

Istio服务网格中, Gateway可以部署任意多个,可以共用一个,也可以每个租户、 namespace单独隔离

标题

Gateway根据流入流出方向分为ingress gateway和egress gateway

Ingress gateway:

  • 控制外部服务访问网格内服务,配合VirtualService

Egress gateway:

  • 控制网格内服务访问外部服务, 配合DestinationRule ServiceEntry使用


Gateway vs Kubernetes Ingress

Kubernetes Ingress集群边缘负载均衡, 提供集群内部服务的访问入口,仅支持L7负载均衡, 功能单一

Istio 1.0以前,利用Kubernetes Ingress实现网格内服务暴露。但是Ingress无法实现很多功能:

  • 1) L4-L6负载均衡
  • 2) 对外mTLS
  • 3) SNI的支持
  • 4) 其他istio中已经实现的内部网络功能: Fault Injection,Traffic Shifting, Circuit Breaking, Mirroring

为了解决这些这些问题, Istio在1.0版本设计了新的v1alpha3API。

  1. Gateway允许管理员指定L4-L6的设置:端口及TLS设置。
  2. 对于ingress 的L7设置, Istio允许将VirtualService与Gateway绑定起来。
  3. 分离的好处:用户可以像使用传统的负载均衡设备一样管理进入网格内部的流量,绑定虚拟IP到虚拟服务器上 。便于传统技术用户无缝迁移到微服务


Gateway原理及实现

Gateway原理及实现

Gateway原理及实现

Gateway 与 普通sidecar均是使用Envoy作为proxy实行流量控制。

Pilot为不同类型的proxy生成相应的配置, Gateway的类型为router, sidecar的类型为sidecar。


Ingress Gateway 启动参数:

Ingress Gateway 启动参数


Sidecar启动参数:

Sidecar启动参数


Pilot如何得知proxy类型?


kubectl get crd gateways.networking.istio.io 验证

kubectl get crd gateways.networking.istio.io 验证

 


Istio networking所有配置API定义:

https://github.com/istio/api/tree/master/networking/v1alpha3

Istio networking所有配置API定义

Istio networking所有配置API定义

Istio networking所有配置API定义

Istio networking所有配置API定义


Gateway配置下发:

Gateway配置下发


Gateway demo演示

  • 控制Ingress HTTP流量
  • 利用HTTPS保护后端服务
  • mTLS
  • 控制egress流量


理解外部请求如何到达应用

  • 1) Client发起请求到特定端口
  • 2) Load Balancer 监听在这个端口, 并转发到后端
  • 3) 在Istio中, LB将请求转发到IngressGateway 服务
  • 4) Service将请求转发到IngressGateway pod
  • 5) Pod 获取Gateway 和 VirtualService配置,获取端口、协议、证书,创建监听器
  • 6) Gateway pod 根据路由将请求转发到应用pod( 不是service)


控制Ingress HTTP流量


HTTPS termination

生成证书

https://istio.io/docs/tasks/traffic-management/secure-ingress/#generate-client-andserver-certificates-and-keys

创建secret:名称一定是istio-ingressgateway-certs,否则mount不上

$ kubectl create -n istio-system secret tls istio-ingressgateway-certs --key

httpbin.example.com/3_application/private/httpbin.example.com.key.pem --cert

httpbin.example.com/3_application/certs/httpbin.example.com.cert.pem

创建应用$ kubectl apply -f samples/httpbin/httpbin.yaml 创建路由规则$ kubectl apply -f samples/httpbin/httpbin-gateway-https.yaml

通过HTTPS访问

$ curl -v -HHost:httpbin.example.com --resolve httpbin.example.com:31390:100.109.176.196 --

cacert httpbin.example.com/2_intermediate/certs/ca-chain.cert.pem

https://httpbin.example.com:31390/status/418


mTLS

创建包含CA证书的secret

kubectl create -n istio-system secret generic istio-ingressgateway-ca-certs --fromfile=httpbin.example.com/2_intermediate/certs/ca-chain.cert.pem

更新Gateway TLS setting

更新Gateway TLS setting

 

通过HTTPS访问


Istio访问外部服务

Istio网格内默认不能访问外部服务,如果需要访问外部服务有三种方式:

创建应用时指定pod annotation

traffic.sidecar.istio.io/includeOutboundIPRanges: "127.0.0.1/24,10.96.0.1/24“

创建ServiceEntry


通过egress gateway控制访问外部服务

通过egress gateway控制访问外部服务

通过egress gateway控制访问外部服务

通过egress gateway控制访问外部服务



相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
缓存 负载均衡 监控
nacos+ribbon+feign+gateway设计实现灰度方案 (上)
nacos+ribbon+feign+gateway设计实现灰度方案
1745 0
nacos+ribbon+feign+gateway设计实现灰度方案  (上)
|
算法 NoSQL 安全
SpringCloud Gateway 通过redis实现限流
SpringCloud Gateway 通过redis实现限流
2771 0
SpringCloud Gateway 通过redis实现限流
|
Kubernetes JavaScript API
如何理解 Istio Ingress, 它与 API Gateway 有什么区别?东西流量?南北流量?
这三者都和流量治理密切相关,那么流量治理在过去和现在有什么区别呢?都是如何做的呢? 在学习istio的时候对流量管理加深了理解。什么是东西流量?什么是南北流量?
823 0
|
存储 缓存 安全
SpringCloud微服务实战——搭建企业级开发框架(二十三):Gateway+OAuth2+JWT实现微服务统一认证授权
OAuth2是一个关于授权的开放标准,核心思路是通过各类认证手段(具体什么手段OAuth2不关心)认证用户身份,并颁发token(令牌),使得第三方应用可以使用该token(令牌)在限定时间、限定范围访问指定资源。   OAuth2中使用token验证用户登录合法性,但token最大的问题是不携带用户信息,资源服务器无法在本地进行验证,每次对于资源的访问,资源服务器都需要向认证服务器发起请求,一是验证token的有效性,二是获取token对应的用户信息。如果有大量的此类请求,无疑处理效率是很低,且认证服务器会变成一个中心节点
2120 57
SpringCloud微服务实战——搭建企业级开发框架(二十三):Gateway+OAuth2+JWT实现微服务统一认证授权
|
开发框架 监控 安全
SpringCloud微服务实战——搭建企业级开发框架(十八):集成Gateway实现微服务路由转发
在微服务架构里,服务的粒度被进一步细分,各个业务服务可以被独立的设计、开发、测试、部署和管理。这时,各个独立部署单元可以用不同的开发测试团队维护,可以使用不同的编程语言和技术平台进行设计,这就要求必须使用一种语言和平 台无关的服务协议作为各个单元间的通讯方式。
728 57
SpringCloud微服务实战——搭建企业级开发框架(十八):集成Gateway实现微服务路由转发
|
算法 前端开发 安全
SpringCloud Gateway API接口安全设计(加密 、签名、安全)(一)
SpringCloud Gateway API接口安全设计(加密 、签名、安全)(一)
SpringCloud Gateway API接口安全设计(加密 、签名、安全)(一)
|
JSON NoSQL 安全
纯干货!Spring Cloud Gateway整合OAuth2.0 实现分布式统一认证授权
今天这篇文章介绍一下Spring Cloud Gateway整合OAuth2.0实现认证授权,涉及到的知识点有点多,有不清楚的可以看下陈某的往期文章。
纯干货!Spring Cloud Gateway整合OAuth2.0 实现分布式统一认证授权
|
负载均衡 关系型数据库 MySQL
nacos+ribbon+feign+gateway设计实现灰度方案 (下)
nacos+ribbon+feign+gateway设计实现灰度方案 (下)
867 0
nacos+ribbon+feign+gateway设计实现灰度方案 (下)
|
Java Spring
|
负载均衡 安全 Java
实现 Gateway | 学习笔记
快速学习实现 Gateway。
203 0
实现 Gateway | 学习笔记