Istio:Gateway设计与实现

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 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控制访问外部服务



相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
缓存 负载均衡 监控
nacos+ribbon+feign+gateway设计实现灰度方案 (上)
nacos+ribbon+feign+gateway设计实现灰度方案
1145 0
nacos+ribbon+feign+gateway设计实现灰度方案  (上)
|
算法 NoSQL 安全
SpringCloud Gateway 通过redis实现限流
SpringCloud Gateway 通过redis实现限流
1131 0
SpringCloud Gateway 通过redis实现限流
|
11月前
|
Kubernetes JavaScript API
如何理解 Istio Ingress, 它与 API Gateway 有什么区别?东西流量?南北流量?
这三者都和流量治理密切相关,那么流量治理在过去和现在有什么区别呢?都是如何做的呢? 在学习istio的时候对流量管理加深了理解。什么是东西流量?什么是南北流量?
205 0
|
Java Spring
|
算法 前端开发 安全
SpringCloud Gateway API接口安全设计(加密 、签名、安全)(一)
SpringCloud Gateway API接口安全设计(加密 、签名、安全)(一)
SpringCloud Gateway API接口安全设计(加密 、签名、安全)(一)
|
负载均衡 安全 Java
实现 Gateway | 学习笔记
快速学习实现 Gateway。
62 0
实现 Gateway | 学习笔记
|
Java 开发者 Spring
Gateway整合sentineI实现服务限流|学习笔记
快速学习Gateway整合sentineI实现服务限流
101 0
Gateway整合sentineI实现服务限流|学习笔记
|
XML JSON 网络协议
SAP ABAP Gateway Client 的 ABAP 实现,重用 HTTP Connection
SAP ABAP Gateway Client 的 ABAP 实现,重用 HTTP Connection
131 0
SAP ABAP Gateway Client 的 ABAP 实现,重用 HTTP Connection
|
对象存储
SAP Gateway Service Builder 里的 OData 服务实现方式
SAP Gateway Service Builder 里的 OData 服务实现方式
100 0
SAP Gateway Service Builder 里的 OData 服务实现方式
|
NoSQL Java 关系型数据库
SpringCloud Gateway 基于nacos实现动态路由
Spring Cloud Gateway作为微服务的入口,需要尽量避免重启,而现在配置更改需要重启服务不能满足实际生产过程中的动态刷新、实时变更的业务需求,所以我们需要在Spring Cloud Gateway运行时动态配置网关。
589 0
SpringCloud Gateway 基于nacos实现动态路由