idou老师教你学Istio 09: 如何用Istio实现K8S Ingress流量管理
前言
在Istio的世界里,如果想把外部的请求流量引入网格,你需要认识并会学会配置Istio Ingress Gateway
什么是Ingress Gateway
由于Kubernetes Ingress API只能支持最基本的HTTP路由,使用Kubernetes Ingress资源来配置外部流量的方式不能满足需求。因此Istio v1alpha3 routing API引入新的Istio Ingress Gateway取代Kubernetes Ingress。
Gateway为HTTP/TCP流量配置了一个负载均衡,用于承载网格边缘的进入和发出连接。在同一个网格中可以有多个不同的gateway存在。这一规范中描述了一系列开放端口,以及这些端口所使用的协议、负载均衡的 SNI 配置等内容。用户可以利用标准的Istio 路由规则控制HTTP和TCP请求进入网格。
从下图可以看到Istio gateway在整个网格中的使用情况:

如何配置Gateway控制Ingress流量
如果你已经安装好了bookinfo的应用,为了能在外部访问bookinfo中的productpage服务,只需要配置Gateway和相关的VirtualService。
用一个简单的gateway配置一个负载均衡使访问bookinfo.com的外部http流量能够进入网格:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: bookinfo-gateway
spec:
selector:
istio: ingressgateway
servers:
- hosts:
- bookinfo.com
port:
number: 80
name: http
protocol: HTTP
为了配置相应的路由,需要为相同的host定义一个VirtualService 并且用配置中gateways的字段绑定到刚才创建的Gateway:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: bookinfo
spec:
hosts:
- bookinfo.com
gateways:
- bookinfo-gateway # <---- 绑定gateway
- mesh # <----对内部通信进行流量控制
http:
- match:
- uri:
exact: /productpage
route:
- destination:
host: productpage
port:
number: 9080
这样就达到了在外网开放productpage服务的目的。
如何用HTTPS加密Gateway?
我们也可以为服务启用TLS保护,以HTTPS的形式对网格外提供服务。
首先需要使用工具生成客户端和服务器端的证书和密钥。然后使用密钥和证书作为输入,创建一个Secret。
$ kubectl create -n istio-system secret tls istio
-ingressgateway-certs --key key.pem --cert cert.p
em
接下来修改Gateway对象,为Ingress gateway开放一个443端口,用于提供HTTPS服务:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: bookinfo-gateway
spec:
selector:
istio: ingressgateway
servers:
- hosts:
- bookinfo.com
port:
number: 80
name: http
protocol: HTTP
- hosts:
- "*"
port:
number: 443
name: https
protocol: HTTPS
tls:
mode: SIMPLE
serverCertificate: /etc/istio/ingressgateway-certs/tls.crt
privateKey: /etc/istio/ingressgateway-certs/tls.key
这样简单的配置就可以通过HTTPS协议访问bookinfo.com了。
idou老师教你学Istio 09: 如何用Istio实现K8S Ingress流量管理的更多相关文章
- idou老师教你学Istio11 : 如何用Istio实现流量熔断
		
在之前的最佳实践中,已经带大家通过一系列的实践任务领略了Istio的无穷魅力.今天,将向大家介绍如何用Istio实现流量熔断. 熔断机制是创建弹性微服务应用程序的重要模式.熔断可以帮助您自由控制故障影 ...
 - idou老师教你学Istio 07: 如何用istio实现请求超时管理
		
在前面的文章中,大家都已经熟悉了Istio的故障注入和流量迁移.这两个方面的功能都是Istio流量治理的一部分.今天将继续带大家了解Istio的另一项功能,关于请求超时的管理. 首先我们可以通过一个简 ...
 - idou老师教你学Istio 04:Istio性能及扩展性介绍
		
Istio的性能问题一直是国内外相关厂商关注的重点,Istio对于数据面应用请求时延的影响更是备受关注,而以现在Istio官方与相关厂商的性能测试结果来看,四位数的qps显然远远不能满足应用于生产的要 ...
 - idou老师教你学istio1:如何为服务提供安全防护能力
		
之前,已为大家介绍过 Istio 第一主打功能---连接服务. 凡是产生连接关系,就必定带来安全问题,人类社会如此,服务网格世界,亦是如此. 今天,我们就来谈谈Istio第二主打功能---保护服务. ...
 - idou老师教你学Istio :如何用istio实现监控和日志采集
		
大家都知道istio可以帮助我们实现灰度发布.流量监控.流量治理等功能.每一个功能都帮助我们在不同场景中实现不同的业务.那Istio是如何帮助我们实现监控和日志采集的呢? 这里我们依然以Bookinf ...
 - idou老师教你学istio :基于角色的访问控制
		
istio的授权功能,也称为基于角色的访问控制(RBAC),它为istio服务网格中的服务提供命名空间级别.服务级别和方法级别的访问控制.基于角色的访问控制具有简单易用.灵活和高性能等特性.本文介绍如 ...
 - idou老师教你学Istio 17 : 通过HTTPS进行双向TLS传输
		
众所周知,HTTPS是用来解决 HTTP 明文协议的缺陷,在 HTTP 的基础上加入 SSL/TLS 协议,依靠 SSL 证书来验证服务器的身份,为客户端和服务器端之间建立“SSL”通道,确保数据运输 ...
 - idou老师教你学Istio: 如何用Istio实现K8S Egress流量管理
		
本文主要介绍在使用Istio时如何访问集群外服务,即对出口流量的管理. 默认安装的Istio是不能直接对集群外部服务进行访问的,如果需要将外部服务暴露给 Istio 集群中的客户端,目前有两种方案: ...
 - idou老师教你学Istio:如何用 Istio 实现速率限制
		
使用 Istio 可以很方便地实现速率限制.本文介绍了速率限制的使用场景,使用 memquota\redisquota adapter 实现速率限制的方法,通过配置 rule 实现有条件的速率限制,以 ...
 
随机推荐
- iOS-登录加密也许用到,反转字符串
			
- (NSString *)stringByReversed{// NSMutableString *s = [NSMutableString string];// for (NSUInt ...
 - iOS-UIToolbar与UISearchBar
			
组件_ UIToolbar /** 1. 顶部toolbar 2. TextField可以以UIBarButtonItem的自定义视图的方式加入toolbar 3. 三个按钮 4. 将UIBarBu ...
 - 使用python或robotframework调multipart/form-data接口上传文件
			
这几天调一个multipart/form-data类型的接口,遇到点小阻碍.之前同事有使用urllib库写了个类似的方法实现,比较长,想要改的时候发现不太好使.在网上查找发现用requests库做这个 ...
 - 数据结构与算法学习(二)——Master公式及其应用
			
本篇文章涉及公式,由于博客园没有很好的支持,建议移步我的CSDN博客和简书进行阅读. 1. Master公式是什么? 我们在解决算法问题时,经常会用到递归.递归在较难理解的同时,其算法的复杂度也不是很 ...
 - Centos安装Python3及设置对应版本pip
			
安装Python3 安装Python依赖: yum -y install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel ...
 - C# 自定义特性(Attribute)详解
			
什么是特性 特性的定义:公共语言运行时允许添加类似关键字的描述声明,叫做attribute,它对程序中的元素进行标注,如类型.字段.方法.和属性等.attribute和.NetFramework文件的 ...
 - Java Script 学习日志 Div
			
2019年7月7日 学习网站: http://www.w3school.com.cn/js/js_examples.asp 1.输出 1. 1首先就是输出看 <script> docume ...
 - 路由器01---k2刷Pandora
			
1.固件 固件(Firmware)就是写入EPROM(可擦写可编程只读存储器)或EEPROM(电可擦可编程只读存储器)中的程序. 对于独立可操作的电子产品,固件一般指它的操作系统(“担任着一个数码产品 ...
 - Spring Bean装配详解(五)
			
装配 Bean 的概述 前面已经介绍了 Spring IoC 的理念和设计,这一篇文章将介绍的是如何将自己开发的 Bean 装配到 Spring IoC 容器中. 大部分场景下,我们都会使用 Appl ...
 - C++:标准模板库vector
			
一:介绍 vector是C++标准模板库,是一个容器,底层是数组,为连续内存. 命名空间为std,所属头文件为<vector> 注意:不是<vector.h> vector ...