Istio:Gateway设计与实现

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 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控制访问外部服务



相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
缓存 负载均衡 监控
nacos+ribbon+feign+gateway设计实现灰度方案 (上)
nacos+ribbon+feign+gateway设计实现灰度方案
1254 0
nacos+ribbon+feign+gateway设计实现灰度方案  (上)
|
算法 NoSQL 安全
SpringCloud Gateway 通过redis实现限流
SpringCloud Gateway 通过redis实现限流
1227 0
SpringCloud Gateway 通过redis实现限流
|
Kubernetes JavaScript API
如何理解 Istio Ingress, 它与 API Gateway 有什么区别?东西流量?南北流量?
这三者都和流量治理密切相关,那么流量治理在过去和现在有什么区别呢?都是如何做的呢? 在学习istio的时候对流量管理加深了理解。什么是东西流量?什么是南北流量?
266 0
|
存储 缓存 安全
SpringCloud微服务实战——搭建企业级开发框架(二十三):Gateway+OAuth2+JWT实现微服务统一认证授权
OAuth2是一个关于授权的开放标准,核心思路是通过各类认证手段(具体什么手段OAuth2不关心)认证用户身份,并颁发token(令牌),使得第三方应用可以使用该token(令牌)在限定时间、限定范围访问指定资源。   OAuth2中使用token验证用户登录合法性,但token最大的问题是不携带用户信息,资源服务器无法在本地进行验证,每次对于资源的访问,资源服务器都需要向认证服务器发起请求,一是验证token的有效性,二是获取token对应的用户信息。如果有大量的此类请求,无疑处理效率是很低,且认证服务器会变成一个中心节点
1534 57
SpringCloud微服务实战——搭建企业级开发框架(二十三):Gateway+OAuth2+JWT实现微服务统一认证授权
|
开发框架 监控 安全
SpringCloud微服务实战——搭建企业级开发框架(十八):集成Gateway实现微服务路由转发
在微服务架构里,服务的粒度被进一步细分,各个业务服务可以被独立的设计、开发、测试、部署和管理。这时,各个独立部署单元可以用不同的开发测试团队维护,可以使用不同的编程语言和技术平台进行设计,这就要求必须使用一种语言和平 台无关的服务协议作为各个单元间的通讯方式。
433 57
SpringCloud微服务实战——搭建企业级开发框架(十八):集成Gateway实现微服务路由转发
|
算法 前端开发 安全
SpringCloud Gateway API接口安全设计(加密 、签名、安全)(一)
SpringCloud Gateway API接口安全设计(加密 、签名、安全)(一)
SpringCloud Gateway API接口安全设计(加密 、签名、安全)(一)
|
Java Spring
|
负载均衡 安全 Java
实现 Gateway | 学习笔记
快速学习实现 Gateway。
实现 Gateway | 学习笔记
|
Java 开发者 Spring
Gateway整合sentineI实现服务限流|学习笔记
快速学习Gateway整合sentineI实现服务限流
Gateway整合sentineI实现服务限流|学习笔记
|
JSON NoSQL 安全
纯干货!Spring Cloud Gateway整合OAuth2.0 实现分布式统一认证授权
今天这篇文章介绍一下Spring Cloud Gateway整合OAuth2.0实现认证授权,涉及到的知识点有点多,有不清楚的可以看下陈某的往期文章。
纯干货!Spring Cloud Gateway整合OAuth2.0 实现分布式统一认证授权